[firebase-br] RES: RES: RES: Trigger Master/Detail

Zottis bzottis em ig.com.br
Ter Jan 17 15:59:25 -03 2012


A trigger do item é esta:

CREATE OR ALTER TRIGGER TG_SOMA_COMPRAS FOR COMPRA_ITEM
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
as
begin
if (inserting) then
execute procedure sp_soma_compra(new.COD_COMPRA) ;
else
if ((deleting) or (updating)) then
execute procedure sp_soma_compra(old.COD_COMPRA) ;
end



CREATE OR ALTER PROCEDURE SP_SOMA_COMPRA (
    compra_no integer)
as
declare variable frete_itens numeric(15,2);
declare variable total_ipi numeric(15,2);
declare variable total_icms numeric(15,2);
declare variable peso_total double precision;
declare variable total_itens numeric(15,2);
declare variable total_desconto_itens numeric(15,2);
declare variable soma_quantidade double precision;
begin
 SELECT
   sum((UNITARIO * QTDE) - TOTAL),
   SUM(unitario * QTDE * (100 - desconto)/100),
   SUM(PESO * QTDE),
   SUM(UNITARIO * QTDE * (TAXA_ICMS) / 100),
   SUM(UNITARIO * QTDE * (TAXA_IPI)  / 100),
   SUM(FRETE * QTDE),
   SUM(QTDE)
  FROM COMPRA_ITEM
  WHERE (COD_COMPRA = :COMPRA_NO)
  INTO :total_desconto_itens, :total_itens, :peso_total,
       :total_icms,:total_ipi,:frete_itens, :soma_quantidade;

if (:total_desconto_itens is null) then TOTAL_DESCONTO_ITENS = 0;
if (:total_itens is null) then TOTAL_ITENS  = 0;
if (:peso_total is null) then PESO_TOTAL    = 0;
if (:total_icms is null) then TOTAL_ICMS = 0;
if (:total_ipi is null) then TOTAL_IPI = 0;
if (:frete_itens is null) then FRETE_ITENS = 0;
if (:soma_quantidade is null) then soma_quantidade = 0;

 UPDATE compras c
 SET c.total_desc_itens  = :total_desconto_itens,
     C.total_itens       = :total_itens,
     C.total_peso        = :peso_total,
     C.total_icms        = :total_icms,
     C.total_ipi         = :total_ipi,
     C.frete_itens       = :frete_itens,
     C.total_quantia     = :soma_quantidade
     where C.cod_compra  = :COMPRA_NO;
end



e a do Pedido é esta

CREATE OR ALTER TRIGGER TG_COMPRAS_ENTREGA FOR COMPRAS
INACTIVE AFTER UPDATE POSITION 0
AS
begin

  if (new.entregue = 'S')  then
    begin
      update compra_item CI
      SET CI.data_entrega = NEW.data_entrega,
          CI.entregue     = 'S'
      WHERE CI.cod_compra = OLD.cod_compra;
    end ELSE
  if (new.entregue <> 'S')  then
    begin
      update compra_item CI
      SET CI.data_entrega = NULL,
          CI.entregue     = 'N'
      WHERE CI.cod_compra = OLD.cod_compra;
    end
end







-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Alysson Gonçalves de Azevedo
Enviada em: terça-feira, 17 de janeiro de 2012 11:56
Para: FireBase
Assunto: Re: [firebase-br] RES: RES: Trigger Master/Detail

então bota uns if na trigger de itens... algo como if new.valor_item <>
old.valor_item then atualiza_pedido.
dae, quando a trigger de pedido atualizar o item, os valores não serão
alterados e logo a trigger do item não fará nada.

Alysson Gonçalves de Azevedo
(11) 8491-7730



Em 17 de janeiro de 2012 11:49, Zottis <bzottis em ig.com.br> escreveu:

> A tabela Pedido Edita o campo Cod_Cliente e Entregue('S' ou 'N') na 
> tabela Item E a tabela Item  Edita os Totais na tabela pedido
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br 
> [mailto:lista-bounces em firebase.com.br]
> Em
> nome de Alysson Gonçalves de Azevedo
> Enviada em: terça-feira, 17 de janeiro de 2012 11:31
> Para: FireBase
> Assunto: Re: [firebase-br] RES: Trigger Master/Detail
>
> Zottis, como o pedido vai atualizar o item?
>
> o segredo pra contornar esses problemas é não trabalhar com os mesmos 
> campos e assim evitar loop.
> por exemplo, os items atualiza o Valor da tabela pedido, então, vc tem 
> que criar um novo campo, tipo valor2, dae esse campo dispara a 
> atualização dos items e os itens vao atualizar o campo "valor".
>
>
> Alysson Gonçalves de Azevedo
> (11) 8491-7730
>
>
>
> Em 17 de janeiro de 2012 11:22, Zottis <bzottis em ig.com.br> escreveu:
>
> > Sim, mas a tabela item depende da tabela pedidos
> >
> > -----Mensagem original-----
> > De: lista-bounces em firebase.com.br
> > [mailto:lista-bounces em firebase.com.br]
> > Em
> > nome de Daniel Roatt
> > Enviada em: terça-feira, 17 de janeiro de 2012 10:22
> > Para: FireBase
> > Assunto: Re: [firebase-br] Trigger Master/Detail
> >
> > Sao duas tabelas diferentes?
> >
> > Em 17 de janeiro de 2012 10:15, Zottis <bzottis em ig.com.br> escreveu:
> >
> > > Pessoal, tenho duas tabelas (Pedidos e Item)
> > >
> > > E tenho uma trigger que faz a soma dos itens e atualiza o pedido, 
> > > até aí tudo bem, mas tenho que fazer uma também no pedido que 
> > > atualiza o item
> > >
> > > E da conflito, pois quando a trigger dos itens é disparada e 
> > > atualiza o Pedido, dispara a trigger que atualiza os itens.
> > >
> > >
> > >
> > >
> > >
> > > Alguém tem alguma idéia de como resolver isso?
> > >
> > >
> > >
> > >
> > >
> > > ______________________________________________
> > > 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
> > >
> >
> >
> >
> > --
> > Daniel Roatt
> > T.I. Bessani Softwares
> > ______________________________________________
> > 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
>
>
> ______________________________________________
> 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