[firebase-br] RES: RES: Firebird IBO ou Programador com erro

Felix - Sol felix.sol em terra.com.br
Qui Maio 27 17:18:22 -03 2010


SET TERM ^ ;
ALTER TRIGGER IT_PEDIDO_ESTOQUE ACTIVE
BEFORE INSERT OR UPDATE OR DELETE POSITION 25
AS BEGIN 
    IF (UPDATING OR  DELETING) THEN 
        UPDATE PRODUTO SET PRODUTO.QUANTIDADE = PRODUTO.QUANTIDADE +
OLD.QTDE WHERE PRODUTO.CODIGOPRO = OLD.CODIGOPRO; 
    IF (UPDATING OR INSERTING) THEN 
        UPDATE PRODUTO SET PRODUTO.QUANTIDADE = PRODUTO.QUANTIDADE -
NEW.QTDE WHERE PRODUTO.CODIGOPRO = NEW.CODIGOPRO; 
END^
SET TERM ; ^


Fco. Felix
Desenvolvimento de Sistemas
www.soltecnologia.com.br


-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Marcio Alves de Almeida
Enviada em: quinta-feira, 27 de maio de 2010 16:38
Para: FireBase
Assunto: Re: [firebase-br] RES: Firebird IBO ou Programador com erro

Alguem tem um exemplo de  de trigger de baixa de estroque, gostaria de
mudar mas nao sei como começar
estou gostando muito do firebird, mas tenho dificuldades em programar
dentro dele trigger etc... alem de fazer
o delphi executar a trigger no momento certo.

2010/5/26 Felix - Sol <felix.sol em terra.com.br>:
> Mude para trigger. Recomendadissimo. Pode dar um trabalho a mais agora,
mas
> vai te poupar de imensas dores de cabeça.
>
>
> Fco. Felix
> Desenvolvimento de Sistemas
> www.soltecnologia.com.br
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br]
Em
> nome de Eduardo Pombo
> Enviada em: quarta-feira, 26 de maio de 2010 17:22
> Para: FireBase
> Assunto: Re: [firebase-br] Firebird IBO ou Programador com erro
>
> Acredito que o ocorrido tenha sido algo que a trigger realmente
> impediria. O provavel neste caso seja que tenha acontecido de duas
> vendas no mesmo momento pegando dados da mesma venda anterior pq a
> segunda deva estar na hora em transacao aberta e por isso nao visivel
> para a outra venda.
>
> Solucao recomendada: reduzir ao maximo o tempo de transacao deixando
> para abrir a transacao apenas no momento da gravacao e/ou claro a
> criacao de uma trigger como citado pelo Alysson
>
>
>
> 2010/5/26 Alysson Azevedo <agalysson em gmail.com>:
>> ja pensou na ideia de preencher o estoque anterior e o estoque atual
> atravez
>> de uma trigger?
>> acho difissilimo ter esse tipo de problema se for com trigger... (só num
>> garanto que seja impossivel)
>> --
>>
>> Alysson Gonçalves de Azevedo
>> (11) 8491-7730
>>
>> (\(''^_^ )/)
>>
>> "Pobre vive dizendo que não tem nada, mas quando vem a enchente, ele sai
>> gritando: -Perdi tudo!!!"
>>
>>
>>
>>
>> 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;
>>>
>>> ______________________________________________
>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>
>
>
> --
>
> Atenciosamente
>
> José Eduardo Pombo de Barros
> Gerente de Manutenção de Sistemas
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>

______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista