[firebase-br] Firebird IBO ou Programador com erro

Marcio Alves de Almeida net.marcio em gmail.com
Qua Jun 2 15:59:23 -03 2010


Pois eh seguindo os conselhos dos amigo
fiz esta Trigger
mas onde estou errando

 Onde esta o erro pois só funciona a Primeira parte a 'venda'...
na venda a trigger funciona mas devolucao e outras nao funga

CREATE TRIGGER "MovSaida_BI" FOR "MovSaida" ACTIVE
BEFORE INSERT POSITION 0
 AS
 BEGIN
  /* Movimenta estoque dos produtos que foram marcados com Entrada ,
 Devolucao,Venda, Estorno */

  if (new."Movimento" = 'Venda') then
  begin
  update "Produto" P set P."Prod_UltimoEstoque" = P."Pro_Quantidade" -
 new."Quantidade"
  where P."Cod_Produto" = new."Cod_Produto";
  end

  if (new."Movimento" = 'Devolucao') then
  begin
  update "Produto" P set P."Prod_UltimoEstoque" = P."Pro_Quantidade" +
 new."Quantidade"
  where P."Cod_Produto" = new."Cod_Produto";
  end

  if (new."Movimento" = 'Entrada') then
  begin
  update "Produto" P set P."Prod_UltimoEstoque" = P."Pro_Quantidade" +
 new."Quantidade"
  where P."Cod_Produto" = new."Cod_Produto";
  end

  if (new."Movimento" = 'Estorno') then
  begin
  update "Produto" P set P."Prod_UltimoEstoque" = P."Pro_Quantidade" -
 new."Quantidade"
  where P."Cod_Produto" = new."Cod_Produto";
  end

 END


2010/5/26 Marcio Alves de Almeida <net.marcio em gmail.com>:
> Tenho um sistema vendas rodado depois de fazer o pedido um cliente
> vai ateh um caixa pagar e nesse momento
> eh dado a baixa no estoque acontece essa semana em uma venda na hora
> da baixa do estoque aconteceu algo estranho tenho uma tabela aparte
> que guarda as movimentacoes dos produto tipo UltimoEstroque  a
> quantidade de saida e Saldo depois da venda
> tipo Assim
> Cod   UltimoEstoque      Saida     EstoqueAtual    Hora cod_venda
> 1        500                       10           490          07:10:10
>     255551
> 1        490                       10           480          07:10:15
>     255555
> 1        480                       20           460          07:10:22
>     255569
>
>
> acontece que em um determinada venda 1 produto foi dar baixa ao
> mesmo tempo e aconteceu isso
> 1        401                       1            400          09:10:01
>      255571
>
> 1        400                       1            399          09:10:22
>      255902
> 1        400                       1            399          09:10:22
>      255940
>
> ele deveria ficar assim
>
> 1        399                       1            398          09:10:22
>      255940
>
> Delphi 7 IBO 4.7.16  Firebird 2.0
> alguem tem uma luz sobre isso o que eu poderia fazer para nao
> acontecer isso
> uma vez que no tabela produtos nao deu baixa no estoque isso nao pode
> acontecer.
>
>        If Q_Produto.RecordCount > 0 Then
>        Begin
>         Modulo.Q_MovSaida.Append;
>         Modulo.Q_MovSaidaCod_Venda.Value        :=
> Modulo.Q_VendaCod_Venda.Value;
>         //*******************************************
>         Modulo.Q_MovSaidaVen_NumNota.Value      :=
> Modulo.Q_VendaVen_NumNota.Value;
>         Modulo.Q_MovSaidaCod_Marca.Value        := Q_ItemVendaCod_Marca.Value;
>         //*******************************************
>         Modulo.Q_MovSaidaCod_ItemVenda.Value    :=
> Q_ItemVendaCod_ItemVenda.Value;
>         Modulo.Q_MovSaidaCod_Produto.Value      :=
> Q_ItemVendaCod_Produto.Value;
>         Modulo.Q_MovSaidaCod_Grupo.Value        :=
> Q_ItemVendaItem_Cod_Grupo.Value;
>         Modulo.Q_MovSaidaCod_vendedor.Value     :=
> Modulo.Q_VendaCod_Funcionario.Value;
>         Modulo.Q_MovSaidaCod_Caixa.Value        :=
> Modulo.Q_VendaCod_Caixa_Funcionario.Value;
>         Modulo.Q_MovSaidaNumeroNota.Value       :=
> Modulo.Q_VendaVen_NumNota.Value;
>         Modulo.Q_MovSaidaSaida_Estorno.Value    := 'Venda';
>         Modulo.Q_MovSaidaData.Value             :=
> Modulo.MemoriaDataServer.Value;
>         Modulo.Q_MovSaidaPrecoUnit.Value        :=
> Q_ItemVendaItem_VlrVenda.Value;
>         Modulo.Q_MovSaidaQuantidade.Value       :=
> Q_ItemVendaItem_QtddVenda.Value;
>         Modulo.Q_MovSaidaHora.Value             := Now;
>         Modulo.Q_MovSaidaValorTotal.Value       := Q_ItemVendaItem_Total.Value;
>         Modulo.Q_MovSaidaCod_Fecha_Nota.Value   :=
> Modulo.Q_Fecha_NotaCod_Fecha_Nota.Value;
>         Modulo.Q_MovSaidaEstoqueAnterior.Value  :=
> Q_ProdutoPro_Quantidade.Value;
>         Modulo.Q_MovSaidaEstoqueAtual.Value     :=
> Q_ProdutoPro_Quantidade.Value - Q_ItemVendaItem_QtddVenda.Value;
>         Modulo.Q_MovSaida.Post;
>
>         Q_Produto.Edit;
>         Q_ProdutoPro_Quantidade.Value          :=
> Q_ProdutoPro_Quantidade.Value - Q_ItemVendaItem_QtddVenda.Value;
>         Q_ProdutoPro_DtUltimaVenda.Value       :=
> Modulo.MemoriaDataServer.Value;
>         Q_Produto.Post;
>        end;
>




Mais detalhes sobre a lista de discussão lista