ESTOQUE

NEREU1301 19/05/2010 11:39:01
#342177
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
MARCELO.TREZE 19/05/2010 12:29:44
#342184
Resposta escolhida
colega posta o código que faz a atualização desta tabela produtos quando vc executa um compra.
NEREU1301 19/05/2010 13:21:12
#342191
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
MSMJUDAS 19/05/2010 14:21:16
#342198
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.
NEREU1301 19/05/2010 14:45:45
#342201
Valeu MSMJudas

Uso Access e VB6. Como nunca usei TRIGGERS então vou buscar mais informações.

Obrigado.

Nereu
NEREU1301 19/05/2010 15:33:29
#342207
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
Tópico encerrado , respostas não são mais permitidas