ESTOQUE
Bom dia
Tenho um controle de estoque que funciona muito bem nas entradas de produto pelas compras e saidas pelas peças usadas nos serviços.
Atualiza o estoque numa boa.
O problema que não estou conseguindo resolver é o seguinte:
se eu excluo uma nota de entrada lançada ou excluo um serviço que usou peças não consigo atualizar o estoque
No caso da entrada faço assim:
Private Sub ExcluirRegistro() [ô]exclui a nf toda
If txtNF.Text = Empty Then
MsgBox [Ô]Digite o Número da NF[Ô], _
vbApplicationModal + vbInformation + vbOKOnly, _
[Ô]Informação[Ô]
Exit Sub
End If
AtualizarEntrada2
If MsgBox([Ô]Confirmar Exclusão?[Ô], vbYesNo + vbQuestion) = vbYes Then
cnnProgServ.Execute [Ô]Delete * from Entrada where CodNota=[Ô] & txtNF.Text & [Ô][Ô]
cnnProgServ.Execute [Ô]Delete * from ItemEntrada where CodNota=[Ô] & txtNF.Text & [Ô][Ô]
End If
LimparTela
End Sub
Preciso colocar ai a atualização do estoque que está na tabela Produtos depois da nota ser excluida.
Se alguem puder ajudar agradeço
Nereu
Tenho um controle de estoque que funciona muito bem nas entradas de produto pelas compras e saidas pelas peças usadas nos serviços.
Atualiza o estoque numa boa.
O problema que não estou conseguindo resolver é o seguinte:
se eu excluo uma nota de entrada lançada ou excluo um serviço que usou peças não consigo atualizar o estoque
No caso da entrada faço assim:
Private Sub ExcluirRegistro() [ô]exclui a nf toda
If txtNF.Text = Empty Then
MsgBox [Ô]Digite o Número da NF[Ô], _
vbApplicationModal + vbInformation + vbOKOnly, _
[Ô]Informação[Ô]
Exit Sub
End If
AtualizarEntrada2
If MsgBox([Ô]Confirmar Exclusão?[Ô], vbYesNo + vbQuestion) = vbYes Then
cnnProgServ.Execute [Ô]Delete * from Entrada where CodNota=[Ô] & txtNF.Text & [Ô][Ô]
cnnProgServ.Execute [Ô]Delete * from ItemEntrada where CodNota=[Ô] & txtNF.Text & [Ô][Ô]
End If
LimparTela
End Sub
Preciso colocar ai a atualização do estoque que está na tabela Produtos depois da nota ser excluida.
Se alguem puder ajudar agradeço
Nereu
colega posta o código que faz a atualização desta tabela produtos quando vc executa um compra.
Boa Tarde Marcelo
A compra é atualizada assim:
Private Sub AtualizarEntrada() [ô]atualiza o valor de venda na tabela Produtos
Dim sql As String
Set rsitem = New ADODB.Recordset
Set rsitem.ActiveConnection = cnnProgServ
sql = [Ô][Ô]
sql = [Ô] Select ID, Produto, Quantidade, ValorUnitario, ValorVenda [Ô]
sql = sql & [Ô] FROM ItemEntrada WHERE ID = [Ô] & txtID.Text
rsitem.Open sql, cnnProgServ, adOpenStatic, adLockOptimistic
rsitem.MoveFirst
Do While Not rsitem.EOF
rsProdutos.MoveFirst
Do While Not rsProdutos.EOF
If rsitem!Produto = rsProdutos!id Then
rsProdutos!PrecoCusto = rsitem!ValorUnitario
If rsitem!VALORVENDA = 0 Then
rsProdutos!VALORVENDA = rsProdutos!precoVenda
Else
rsProdutos!precoVenda = rsitem!VALORVENDA
End If
rsProdutos!estoque = rsitem!Quantidade + rsProdutos!estoque
rsProdutos.Update
End If
rsProdutos.MoveNext
Loop
rsitem.MoveNext
Loop
errAtualizacao:
With Err
If .Number <> 0 Then
MsgBox [Ô]Ocorreu um Erro! Refaça o processo.[Ô], vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
.Number = 0
End If
End With
End Sub
A compra é atualizada assim:
Private Sub AtualizarEntrada() [ô]atualiza o valor de venda na tabela Produtos
Dim sql As String
Set rsitem = New ADODB.Recordset
Set rsitem.ActiveConnection = cnnProgServ
sql = [Ô][Ô]
sql = [Ô] Select ID, Produto, Quantidade, ValorUnitario, ValorVenda [Ô]
sql = sql & [Ô] FROM ItemEntrada WHERE ID = [Ô] & txtID.Text
rsitem.Open sql, cnnProgServ, adOpenStatic, adLockOptimistic
rsitem.MoveFirst
Do While Not rsitem.EOF
rsProdutos.MoveFirst
Do While Not rsProdutos.EOF
If rsitem!Produto = rsProdutos!id Then
rsProdutos!PrecoCusto = rsitem!ValorUnitario
If rsitem!VALORVENDA = 0 Then
rsProdutos!VALORVENDA = rsProdutos!precoVenda
Else
rsProdutos!precoVenda = rsitem!VALORVENDA
End If
rsProdutos!estoque = rsitem!Quantidade + rsProdutos!estoque
rsProdutos.Update
End If
rsProdutos.MoveNext
Loop
rsitem.MoveNext
Loop
errAtualizacao:
With Err
If .Number <> 0 Then
MsgBox [Ô]Ocorreu um Erro! Refaça o processo.[Ô], vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
.Number = 0
End If
End With
End Sub
Qual banco vc usa? Se for algum SGBD, utilize TRIGGERS para atualizar o estoque.
Outra coisa, faça um delete primeiro na tabela ItemEntrada (filho) e depois delete o registro na tabela Entrada (pai), senão pode dar erro.
Outra coisa, faça um delete primeiro na tabela ItemEntrada (filho) e depois delete o registro na tabela Entrada (pai), senão pode dar erro.
Valeu MSMJudas
Uso Access e VB6. Como nunca usei TRIGGERS então vou buscar mais informações.
Obrigado.
Nereu
Uso Access e VB6. Como nunca usei TRIGGERS então vou buscar mais informações.
Obrigado.
Nereu
Marcelo
Obrigado pela dica. Ficou assim.
Criei nova sub e mudei onde está assinalado.
Private Sub AtualizarEntrada2() [ô]atualiza tabela Produtos na exclusão de NF
Dim sql As String
Set rsitem = New ADODB.Recordset
Set rsitem.ActiveConnection = cnnProgServ
sql = [Ô][Ô]
sql = [Ô] Select ID, Produto, Quantidade, ValorUnitario, ValorVenda [Ô]
sql = sql & [Ô] FROM ItemEntrada WHERE CodNota = [Ô] & txtNF.Text
rsitem.Open sql, cnnProgServ, adOpenStatic, adLockOptimistic
rsitem.MoveFirst
Do While Not rsitem.EOF
rsProdutos.MoveFirst
Do While Not rsProdutos.EOF
If rsitem!Produto = rsProdutos!id Then
rsProdutos!PrecoCusto = rsitem!ValorUnitario
If rsitem!VALORVENDA = 0 Then
rsProdutos!VALORVENDA = rsProdutos!precoVenda
Else
rsProdutos!precoVenda = rsitem!VALORVENDA
End If
rsProdutos!estoque = rsProdutos!estoque - rsitem!Quantidade
rsProdutos.Update
End If
rsProdutos.MoveNext
Loop
rsitem.MoveNext
Loop
errAtualizacao:
With Err
If .Number <> 0 Then
MsgBox [Ô]Ocorreu um Erro! Refaça o processo.[Ô], vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
.Number = 0
End If
End With
End Sub
e aqui assim:
Private Sub ExcluirRegistro() [ô]exclui a nf toda
If txtNF.Text = Empty Then
MsgBox [Ô]Digite o Número da NF[Ô], _
vbApplicationModal + vbInformation + vbOKOnly, _
[Ô]Informação[Ô]
Exit Sub
End If
If MsgBox([Ô]Confirmar Exclusão?[Ô], vbYesNo + vbQuestion) = vbYes Then
AtualizarEntrada2 cnnProgServ.Execute [Ô]Delete * from ItemEntrada where CodNota=[Ô] & txtNF.Text & [Ô][Ô]
cnnProgServ.Execute [Ô]Delete * from Entrada where CodNota=[Ô] & txtNF.Text & [Ô][Ô]
End If
LimparTela
End Sub
Obrigado
Nereu
Obrigado pela dica. Ficou assim.
Criei nova sub e mudei onde está assinalado.
Private Sub AtualizarEntrada2() [ô]atualiza tabela Produtos na exclusão de NF
Dim sql As String
Set rsitem = New ADODB.Recordset
Set rsitem.ActiveConnection = cnnProgServ
sql = [Ô][Ô]
sql = [Ô] Select ID, Produto, Quantidade, ValorUnitario, ValorVenda [Ô]
sql = sql & [Ô] FROM ItemEntrada WHERE CodNota = [Ô] & txtNF.Text
rsitem.Open sql, cnnProgServ, adOpenStatic, adLockOptimistic
rsitem.MoveFirst
Do While Not rsitem.EOF
rsProdutos.MoveFirst
Do While Not rsProdutos.EOF
If rsitem!Produto = rsProdutos!id Then
rsProdutos!PrecoCusto = rsitem!ValorUnitario
If rsitem!VALORVENDA = 0 Then
rsProdutos!VALORVENDA = rsProdutos!precoVenda
Else
rsProdutos!precoVenda = rsitem!VALORVENDA
End If
rsProdutos!estoque = rsProdutos!estoque - rsitem!Quantidade
rsProdutos.Update
End If
rsProdutos.MoveNext
Loop
rsitem.MoveNext
Loop
errAtualizacao:
With Err
If .Number <> 0 Then
MsgBox [Ô]Ocorreu um Erro! Refaça o processo.[Ô], vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
.Number = 0
End If
End With
End Sub
e aqui assim:
Private Sub ExcluirRegistro() [ô]exclui a nf toda
If txtNF.Text = Empty Then
MsgBox [Ô]Digite o Número da NF[Ô], _
vbApplicationModal + vbInformation + vbOKOnly, _
[Ô]Informação[Ô]
Exit Sub
End If
If MsgBox([Ô]Confirmar Exclusão?[Ô], vbYesNo + vbQuestion) = vbYes Then
AtualizarEntrada2 cnnProgServ.Execute [Ô]Delete * from ItemEntrada where CodNota=[Ô] & txtNF.Text & [Ô][Ô]
cnnProgServ.Execute [Ô]Delete * from Entrada where CodNota=[Ô] & txtNF.Text & [Ô][Ô]
End If
LimparTela
End Sub
Obrigado
Nereu
Tópico encerrado , respostas não são mais permitidas