Fórum Reverter processo atual após Cancelar #339917

04/04/2007

0

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:

  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

Castor

Responder

Posts

04/04/2007

Castor

Ah, só uma nota, numa linha do codigo:

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.


Responder

Gostei + 0

04/04/2007

Castor

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;



Responder

Gostei + 0

04/04/2007

Castor

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:

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;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar