NAO REPETIR PRODUTO EM LISTBOX VBA

GODMEC 14/10/2013 14:37:34
#430008
Estou com uma dificuldade num código.
Tipo: lanço um produto com a quantidade x e depois lanço o mesmo produto [Ô]na mesma venda[Ô] com outra quantidade e se por acaso eu excluir o produto ele apaga os dois produtos [Ô]até ai legal[Ô] mas, ele repõem somente o último produto adicionado no listbox.
Existe um jeito de impedir duplicidade ou seja impedir que lancem produtos repetidos?

código abaixo:


Private Sub txtProdutoQtd_BeforeUpdate(Cancel As Integer)
On Error GoTo Err_txtProdutoQtd_AfterUpdate

Dim codigoProduto As Long
Dim qtdProduto As Double
Dim posicao As Integer
Dim Status As Integer
Dim objVenda As New clsVenda
Dim objDetalhe As New clsDetalheVenda
Dim objProduto As New clsProduto

Status = 0
If Not IsNull(txtProdutoQtd) Then

Call preencheVenda

posicao = InStr(txtProdutoQtd, [Ô]*[Ô])

If posicao > 0 Then
Status = 1
codigoProduto = CLng(Left(txtProdutoQtd, posicao - 1))
Status = 2
qtdProduto = CDbl(Right(txtProdutoQtd, Len(txtProdutoQtd) - posicao))
Else
Status = 3
codigoProduto = CLng(txtProdutoQtd)
qtdProduto = 1
End If

Status = 4
objVenda.codVenda = CLng(txtCodigoVenda)

Status = 5
objVenda.dataVenda = CDate(txtData)

Status = 6
If Not IsNull(txtCodCliente) Then
objVenda.codCliente = CLng(txtCodCliente)
End If

If objProduto.obter(codigoProduto) Then
If objProduto.qtdEstoque < qtdProduto Then
MsgBox [Ô]O estoque existente não é suficiente![Ô] & vbCrLf & vbLf & _
[Ô]Estoque atual: [Ô] & FormatNumber(objProduto.qtdEstoque, 3) & _
[Ô] [Ô] & objProduto.unidade, _
vbExclamation, [Ô]Estoque Baixo[Ô]
Cancel = True
Exit Sub
End If
End If

Status = 7
If objVenda.salvar Then
objDetalhe.codVenda = objVenda.codVenda
objDetalhe.codProduto = codigoProduto
objDetalhe.qtdProduto = qtdProduto
Status = 8
If objDetalhe.salvar Then
Call exibeProduto(objDetalhe)
Call atualizaLista
If objProduto.obter(codigoProduto) Then
Status = 9
If objProduto.baixarEstoque(qtdProduto) Then
If objProduto.estoqueBaixo Then
MsgBox [Ô]O estoque ficou abaixo da quantidade mínima![Ô] & _
vbCrLf & vbLf & _
[Ô]Estoque atual: [Ô] & FormatNumber(objProduto.qtdEstoque, 3) & _
[Ô] [Ô] & objProduto.unidade, vbExclamation, [Ô]Estoque Baixo[Ô]
End If
Else
MsgBox [Ô]Ocorreu um erro na atualização do estoque.[Ô], _
vbExclamation, [Ô]Erro![Ô]
End If
End If
Else
MsgBox [Ô]Ocorreu um erro ao incluir o produto. Talvez o Produto já se Encontra na Lista. Exclua e Coloque-o Novamenta com a Quantidade Que deseja.[Ô], _
vbExclamation, [Ô]Erro![Ô]
Cancel = True
End If
Else
MsgBox [Ô]Ocorreu um erro ao incluir a venda.[Ô], _
vbExclamation, [Ô]Erro![Ô]
Cancel = True
End If

End If

Exit_txtProdutoQtd_AfterUpdate:
Exit Sub

Err_txtProdutoQtd_AfterUpdate:
Select Case Status
Case 1, 3
MsgBox [Ô]Código do produto inválido![Ô], vbExclamation, [Ô]Erro![Ô]
Case 2
MsgBox [Ô]Quantidade do produto inválida![Ô], vbExclamation, [Ô]Erro![Ô]
Case 5
MsgBox [Ô]Data inválida![Ô], vbExclamation, [Ô]Erro![Ô]
Case 6
MsgBox [Ô]Código do cliente inválido![Ô], vbExclamation, [Ô]Erro![Ô]
Case 7
MsgBox [Ô]Ocorreu um erro ao incluir a venda![Ô], vbExclamation, [Ô]Erro![Ô]
Case 8
MsgBox [Ô]Ocorreu um erro ao incluir o produto![Ô], vbExclamation, [Ô]Erro![Ô]
Case 9
MsgBox [Ô]Ocorreu um erro ao atualizar o estoque![Ô], vbExclamation, [Ô]Erro![Ô]
Case Else
MsgBox [Ô]Ocorreu um erro. O sistema informou a seguinte mensagem:[Ô] & _
vbCrLf & vbLf & Err.Description, vbExclamation, [Ô]Erro![Ô]
End Select
Cancel = True
Resume Exit_txtProdutoQtd_AfterUpdate

End Sub
FOXMAN 14/10/2013 17:53:32
#430026
Godmec no meu caso uso listview e criei uma função que faz uma busca , e encontrando o produto no listview eu apenas faço a soma do que já tem no item encontrado com a quantidade que vou adicionar.

GODMEC 14/10/2013 20:14:39
#430033
Sou um apaixonado por programação mas, o meu conhecimento ainda não é tão vasto.

Poderia mostrar um código de exemplo de como fazer essa função que faz a busca e faz a soma dos produtos já inclusos no listview?
FOXMAN 15/10/2013 19:10:14
#430053
Seria algo como por exemplo :

 Dim item As ListViewItem = Nothing
If .Items.Count > 0 Then
item = .BuscaItemListView(txtCodProduto.Text, False, 0, False)
Else
item = .BuscaItemListView(txtCodProduto.Text)
End If

If item IsNot Nothing Then
[ô]O ITEM FOI ENCONTRADO
else
[ô]O ITEM NÃO FOI ENCONTRADO
end if


Você precisa agora pesquisar como localizar um item em um Listview , com isso em mãos já consiguirá resolver o restante do problema.
GODMEC 16/10/2013 10:28:14
#430067
Eu estava pensando algo do tipo um código SQL que faz a verificação da tabela DetalheVenda pois é gravado
dai ou alterar ou somar os itens já atualizando os valores

Vejam a tabela
Faça seu login para responder