Fórum Atualizando tabela estoque via codigo SQLgt; #321525
16/05/2006
0
procedure TFRm_EntraNF.BitBtn3Click(Sender: TObject); begin With Dmdados.IBQ_Estoque DO Begin Close; Sql.Clear; Sql.Add(´Update Tabela_Estoque´); Sql.add(´Set Quantidade_atu = New.quantidade_atu´); Sql.Add(´Where Cod_Prod´); Open; End; Dmdados.IBTab_EstoqueCOD_PROD.Value:=Dmdados.IBTab_EntraItenCOD_PROD.Value; Dmdados.IBTab_EstoqueQUANTIDADE_ATU.Value:=Dmdados.IBTab_EstoqueQUANTIDADE_ATU.Value +Dmdados.IBTab_EntraItenQUANTIDADE.Value; end;
Mais infelismente não deu certo, como faço para que este funcione corretamente?
Peninha
Curtir tópico
+ 0Posts
17/05/2006
Marcelo_mileris
procedure TFRm_EntraNF.BitBtn3Click(Sender: TObject); begin With Dmdados.IBQ_Estoque DO Begin Close; Sql.Clear; Sql.Add(´Update Tabela_Estoque´); Sql.add(´Set Quantidade_atu = :QUANTIDADE_NOVA´); Sql.Add(´Where Cod_Prod = :COD_PROD´); ParamByName(´QUANTIDADE_NOVA´).AsInteger := (Quantidade Nova); ParamByName(´COD_PROD´).AsInteger := (Código do Produto); ExecSql; end; end;
Gostei + 0
17/05/2006
Emerson Nascimento
tente algo assim:
procedure TFrm_EntraNF.BitBtn3Click(Sender: TObject); begin with Dmdados do begin // aqui monta a instrução para atualização do estoque with IBQ_Estoque do begin Close; Sql.Clear; Sql.Add(´Update Tabela_Estoque´); Sql.add(´Set Quantidade_atu = Quantidade_atu + :QUANTIDADE´); Sql.Add(´Where Cod_Prod = :COD_PROD´); end; // varre a tebela de itens e faz a entrada de todos eles IBTab_EntraIten.First; while not IBTab_EntraIten.Eof do begin with IBQ_Estoque do begin Close; ParamByName(´QUANTIDADE´).Value := IBTab_EntraItenQUANTIDADE.Value; ParamByName(´COD_PROD´).Value := IBTab_EntraItenCOD_PROD.Value; ExecSql; end; IBTab_EntraIten.Next; end; end; end;
simples:
imagine que há dois usuários fazendo entradas de notas fiscais e, por acaso, as notas tem um produto em comum.
quando os dois entraram no sistema, a quantidade lida do estoque para esse produto foi de 56, certo? 56 unidades no estoque para aquele determinado produto.
na nota do 1o usuário entrarão mais 12 unidades;
na nota do 2o, entrarão 9.
o primeiro usuário confirmou:
segundo seu código, o sistema gravaria na quantidade atual:
56 + 12 = 68, certo?
depois o 2o usuário confirmou a entrada da sua nota, então o sistema, ainda segundo o seu código, gravaria:
56 + 9 = 65, certo?
(porque seu sistema ´leu´ 56 e vai passar para a quantidade atual esse 56 - que já não é mais 56, devido a entrada da primeira nota - com a quantidade do item que está sofrendo a entrada)
o saldo final ficaria gravado como 65, mas na verdade deveria ser 77!!! por isso a instrução que eu estou te passando não grava um valor direto na quantidade. ela soma o valor que você passar à quantidade atual, evitando esse tipo de erros.
pense sempre dessa maneira, pois um bom sistema deve estar preparado para múltiplos acessos.
não sei se fui claro, mas espero que essa dica te ajude nos próximos procedimentos.
Gostei + 0
17/05/2006
Peninha
Gostei + 0
18/05/2006
Emerson Nascimento
depois de todo o processo, faça algo como:
IBDatabase.DefaultTransaction.Commit;
ou
IBQuery1.Transaction.Commit;
Gostei + 0
18/05/2006
Peninha
Veja bem, vou tentara explicar melhor.
Estou colocando este código dentro do Botão ´Confirmar Operação´
Que é onde dou o Post na Tabela ´EntraIten´ Mesmo colocando o Post para gravar na tabela estoque não acontece nenhuma mudança na Tabela_Estoque.
Outra coisa:
Preciso criar chave primaria na tabela_estoque e fazer relacionamento da Tabela_Estoque e Tab_EntraIten?
Gostei + 0
18/05/2006
Emerson Nascimento
isso não deveria ser feito somente na confirmação da entrada da nota, depois de digitar todos os itens?
bom, de qualquer forma, seguindo seu procedimento, seria necessário gravar o item antes de proceder com a movimentação:
procedure TFrm_EntraNF.BitBtn3Click(Sender: TObject); begin Dmdados.IBTab_EntraIten.Post; with Dmdados, Dmdados.IBQ_Estoque do begin Close; Sql.Clear; Sql.Add(´Update Tabela_Estoque´); Sql.add(´Set Quantidade_atu = Quantidade_atu + :QUANTIDADE´); Sql.Add(´Where Cod_Prod = :COD_PROD´); ParamByName(´QUANTIDADE´).Value := IBTab_EntraItenQUANTIDADE.Value; ParamByName(´COD_PROD´).Value := IBTab_EntraItenCOD_PROD.Value; ExecSql; Transaction.Commit; end; end;
Gostei + 0
21/05/2006
Peninha
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)