Reverter processo atual após Cancelar
To fazendo um controle de quantidades do produto no meu sistema. É assim, a principio ele cadastra uma nota, e abre uma janela onde ele possa pegar os produtos e conforme ele pega os produtos, a quantidade desses produtos vai reduzindo, por exemplo, se ele pediu 4 quantidades do produto x naquela nota, na tabela, mando fazer a quantidade q o produto tinha no estoque menos 4 (qtde no estoque - 4 = qtde no estoque). Depois eu mando postar, pq ele pode voltar outras vezes pra pegar o produto ou até o mesmo produto e é necessario tar atualizado.
O meu problema, é fazer tudo isso ao contrário, ou seja, reverter o processo na tabela quando ele clicar em Cancelar ou fechar a janela sem postar. To vendo q vai me parecer complicado, alguém tem uma luz pra me dar? Eu tentei também assim (quando ele clica no botão Cancelar Nota), mas não consegui:
Legenda, IbProdutos é uma IbQuery usando a tabela Produtos, to usando Firebird como banco de dados e os componentes da palheta InterBase. IbItens é minha outra IbQuery usando a tabela Nota.
IbItens e IbProdutos tem um codigo em comum, e os q estão listados na nota atual, quando cancelados, precisa-se voltar a quantidade anterior. O q estou fazendo de errado? Há um jeito melhor?
Muito obrigado.
O meu problema, é fazer tudo isso ao contrário, ou seja, reverter o processo na tabela quando ele clicar em Cancelar ou fechar a janela sem postar. To vendo q vai me parecer complicado, alguém tem uma luz pra me dar? Eu tentei também assim (quando ele clica no botão Cancelar Nota), mas não consegui:
IbProdutos.Open; IbItens.First; while IbItens.Eof do begin if IbItens.FieldByName(´PRODSERV´).AsString = ´PROD´ then begin while IbProdutos.Eof do begin if IbProdutos.FieldByName(´PCODIGO´).AsInteger = IbItens.FieldByName(´ICODPRODUTO´).AsInteger then begin IbProdutos.First; IbProdutos.FieldByName(´PQTDE´).AsInteger := IbProdutos.FieldByName(´PQTDE´).AsInteger - IbItens.FieldByName(´IQUANTIDADE´).AsInteger; end; IbProdutos.Next; end; end; IbItens.Next; end;
Legenda, IbProdutos é uma IbQuery usando a tabela Produtos, to usando Firebird como banco de dados e os componentes da palheta InterBase. IbItens é minha outra IbQuery usando a tabela Nota.
IbItens e IbProdutos tem um codigo em comum, e os q estão listados na nota atual, quando cancelados, precisa-se voltar a quantidade anterior. O q estou fazendo de errado? Há um jeito melhor?
Muito obrigado.
Castor
Curtidas 0
Respostas
Castor
04/04/2007
Ah, só uma nota, numa linha do codigo:
significa q ele tá vendo se a linha atual é um produto ou um serviço, pq pode-se cadastrar os dois na mesma nota, mas preciso saber se é produto pra poder fazer reduzir ou reverter as quantidades.
if IbItens.FieldByName(´PRODSERV´).AsString = ´PROD´ then
significa q ele tá vendo se a linha atual é um produto ou um serviço, pq pode-se cadastrar os dois na mesma nota, mas preciso saber se é produto pra poder fazer reduzir ou reverter as quantidades.
GOSTEI 0
Castor
04/04/2007
Pessoal, me desculpem, postei o codigo errado, o codigo é esse:
// revertendo quantidade dos produtos IbProdutos.Open; IbItens.First; while IbItens.Eof do begin if IbItens.FieldByName(´PRODSERV´).AsString = ´PROD´ then begin while IbProdutos.Eof do begin if IbProdutos.FieldByName(´PCODIGO´).AsInteger = IbItens.FieldByName(´ICODPRODUTO´).AsInteger then begin IbProdutos.First; IbProdutos.FieldByName(´PQTDE´).AsInteger := IbProdutos.FieldByName(´PQTDE´).AsInteger + IbItens.FieldByName(´IQUANTIDADE´).AsInteger; end; IbProdutos.Next; end; end; IbItens.Next; end;
GOSTEI 0
Castor
04/04/2007
Consegui pessoal, erro totalmente bobo, esqueci do while not. Bom, em partes foi resolvido, o botão cancelar. Mas e se o carinha for lá e fechar sem confirmar ou sem cancelar do nada? É claro q no estoque vai persistir e eu teria q colocar esse mesmo código pra sanar esse problema, quando ele fechar sem ao menos cancelar e confirmar, pq isso com crtz um dia irá acontecer. Bom, se alguém tiver uma luz pra me dar, agradeço muitissimo.
Por enquanto vai a solução:
Por enquanto vai a solução:
IbProdutos.Open; IbItens.First; while not IbItens.Eof do begin if IbItens.FieldByName(´IPRODSERV´).AsString = ´PROD´ then begin IbProdutos.First; while not IbProdutos.Eof do begin if IbProdutos.FieldByName(´PCODIGO´).AsInteger = IbItens.FieldByName(´ICODPRODUTO´).AsInteger then begin IbProdutos.Edit; IbProdutos.FieldByName(´PQTDE´).AsInteger := IbProdutos.FieldByName(´PQTDE´).AsInteger + IbItens.FieldByName(´IQUANTIDADE´).AsInteger; end; IbProdutos.Next; end; end; IbItens.Next; end;
GOSTEI 0