NAO REPETIR PRODUTO EM LISTBOX VBA
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
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
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.
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?
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?
Seria algo como por exemplo :
Você precisa agora pesquisar como localizar um item em um Listview , com isso em mãos já consiguirá resolver o restante do problema.
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.
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
dai ou alterar ou somar os itens já atualizando os valores
Vejam a tabela
Faça seu login para responder