Calculos de Pendentes...
Olá amigos...
Tenho uma tabela de movimentação que contém campos como QTDE_ENT (qtde entrada), QTDE_SAI (qtde saida), QTDE_PEND (qtde pendentes) e outra de ESTOQUE que contém por exemplo campo EST_ATUAL (estoque atual).
Se é dada uma entrada de N qtde de um item, a saida tem que ser a mesma da entrada. Porém, qdo é digitada uma saida, faz-se as seguintes verificações no estoque:
1 - Se EST_ATUAL = 0 - mensagem ´estoque zerado´, e não é feita a saida, ficando o item pendente
2 - SE EST_ATUAL < SAIDA (no caso o dbedtQtdeSaida.text), aparece a mensagem pedindo para digitar um valor inferior ao estoque.
3 - SE EST_ATUAL > SAIDA, faz a baixa no estoque
Até aqui está funcionando perfeitamente.
Porém, além da baixa, o sistema precisa verificar qtas unidades ficaram pendentes. Então, para isso, deveria fazer o seguinte:
PENDENTES = ENTRADA - SAIDA, e o status tem que ficar como P (PENDENTE)
Infelizmente, este calculo nao esta sendo feito, o campo QTDE_PEND fica 0
Segue o codigo que eu usei;
...
if FieldByName(´EST_ATUAL´).AsInteger < strtoint(dbedtQtdeSai.Text) then
begin
dbedtQtdeSai.SetFocus;
MessageDlg
(´No estoque contém apenas ´ +
inttostr(dmEstoque.cdsEstoque.FieldByName(´EST_ATUAL´).AsInteger) + ´ unidade(s)´, mtWarning, [mbOK], 0);
exit;
end
else
if FieldByName(´EST_ATUAL´).AsInteger = strtoint(dbedtQtdeSai.Text) then
begin
with dmEstoque.cdsBaixaEstoque do
begin
close;
Params.ParamByName(´EST´).AsInteger := strtoint(dbedtQtdeSai.Text);
Params.ParamByName(´CODCART´).AsInteger := strtoint(dbedtCodCart.Text);
open;
end;
Entrada := strtoint(dbedtqtdeEnt.Text);
Saida := strtoint(dbedtqtdeSai.Text);
Pendencia := Entrada - Saida;
commandText := ´update MOVIMENTACAO set QTDE_PEND = ´ + IntToStr(Pendencia) + ´ where COD_CART = ´ + dbedtCodCart.Text;
dmMovimentacao.cdsMovimentacao.Refresh;
if Pendencia = 0 then
FieldByName(´STATUS´).AsString := ´R´
else
begin
FieldByName(´STATUS´).AsString := ´P´;
showmessage(´pendentes´);
end
....
showmessage(´Saida efetuada com sucesso!!!´);
fim...
Estou utilizando delphi2005, dbxpress, interbase
Gostaria de saber onde está o erro, sendo que a unica coisa que o sistema não esta fazendo é o calculo de pendentes, o resto está ok, eu até verifiquei no banco para fazer as constataçoes....
Por hora, obrigado, e fico no aguardo...
Um abraço a todos,
Rogerio
Tenho uma tabela de movimentação que contém campos como QTDE_ENT (qtde entrada), QTDE_SAI (qtde saida), QTDE_PEND (qtde pendentes) e outra de ESTOQUE que contém por exemplo campo EST_ATUAL (estoque atual).
Se é dada uma entrada de N qtde de um item, a saida tem que ser a mesma da entrada. Porém, qdo é digitada uma saida, faz-se as seguintes verificações no estoque:
1 - Se EST_ATUAL = 0 - mensagem ´estoque zerado´, e não é feita a saida, ficando o item pendente
2 - SE EST_ATUAL < SAIDA (no caso o dbedtQtdeSaida.text), aparece a mensagem pedindo para digitar um valor inferior ao estoque.
3 - SE EST_ATUAL > SAIDA, faz a baixa no estoque
Até aqui está funcionando perfeitamente.
Porém, além da baixa, o sistema precisa verificar qtas unidades ficaram pendentes. Então, para isso, deveria fazer o seguinte:
PENDENTES = ENTRADA - SAIDA, e o status tem que ficar como P (PENDENTE)
Infelizmente, este calculo nao esta sendo feito, o campo QTDE_PEND fica 0
Segue o codigo que eu usei;
...
if FieldByName(´EST_ATUAL´).AsInteger < strtoint(dbedtQtdeSai.Text) then
begin
dbedtQtdeSai.SetFocus;
MessageDlg
(´No estoque contém apenas ´ +
inttostr(dmEstoque.cdsEstoque.FieldByName(´EST_ATUAL´).AsInteger) + ´ unidade(s)´, mtWarning, [mbOK], 0);
exit;
end
else
if FieldByName(´EST_ATUAL´).AsInteger = strtoint(dbedtQtdeSai.Text) then
begin
with dmEstoque.cdsBaixaEstoque do
begin
close;
Params.ParamByName(´EST´).AsInteger := strtoint(dbedtQtdeSai.Text);
Params.ParamByName(´CODCART´).AsInteger := strtoint(dbedtCodCart.Text);
open;
end;
Entrada := strtoint(dbedtqtdeEnt.Text);
Saida := strtoint(dbedtqtdeSai.Text);
Pendencia := Entrada - Saida;
commandText := ´update MOVIMENTACAO set QTDE_PEND = ´ + IntToStr(Pendencia) + ´ where COD_CART = ´ + dbedtCodCart.Text;
dmMovimentacao.cdsMovimentacao.Refresh;
if Pendencia = 0 then
FieldByName(´STATUS´).AsString := ´R´
else
begin
FieldByName(´STATUS´).AsString := ´P´;
showmessage(´pendentes´);
end
....
showmessage(´Saida efetuada com sucesso!!!´);
fim...
Estou utilizando delphi2005, dbxpress, interbase
Gostaria de saber onde está o erro, sendo que a unica coisa que o sistema não esta fazendo é o calculo de pendentes, o resto está ok, eu até verifiquei no banco para fazer as constataçoes....
Por hora, obrigado, e fico no aguardo...
Um abraço a todos,
Rogerio
Roger1976
Curtidas 0