[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