[firebase-br] Preciso de uma mãozinha
Francisco Thiago
jeandeadlucky em yahoo.com.br
Qua Out 26 15:00:07 -03 2005
Pessoal,
Não está funcionando e eu não sei pq!
Tenho um controle assim.... Para um produto estar marcado como produzido,
todas as suas etapas tem de estar concluidas...
Tenho a seguinte estrutura
ITEM_PRODUCAO
ipdc_codigo
PRODUCAO_ETAPAS
EPDC_CODIGO D_INTEIRO NOT NULL /* D_INTEIRO = INTEGER */,
IPDC_CODIGO D_INTEIRO NOT NULL /* D_INTEIRO = INTEGER */,
EPDC_ENTRADA TIMESTAMP,
EPDC_SAIDA TIMESTAMP,
EPDC_INICIO TIMESTAMP,
EPDC_FIM TIMESTAMP,
EMPR_CODIGO D_INTEIRO NOT NULL /* D_INTEIRO = INTEGER */,
CUSU_CODIGO D_INTEIRO NOT NULL /* D_INTEIRO = INTEGER */,
CEPR_CODIGO D_INTEIRO NOT NULL /* D_INTEIRO = INTEGER */
Ou seja, um produto pode ter várias etapas. E cada etapa passa pela Entrada,
Inicio, Fim, Saida. Quando ele zerar todas essas fazes das etapas, ele está
produzido. Daí construí esta trigger, só que não funciona!!!
Alguém pode me dar uma mãozinha??
Obrigado
Francisco Thiago de Almeida
Enter & Plug Informática
Divisão: Desenvolvimento e Banco de dados
Franca / SP
msn: thiago em enterplug.com.br
CREATE TRIGGER PRODUCAO_ETAPAS_BIU0 FOR PRODUCAO_ETAPAS
ACTIVE AFTER UPDATE POSITION 0
as
declare variable V_ESTADO integer;
begin
-- VERIFICA SE ALGUMA ESTAPA FOI CONCLUIDA
select coalesce(count(PRODUCAO_ETAPAS.IPDC_CODIGO),0)
from PRODUCAO_ETAPAS
where PRODUCAO_ETAPAS.IPDC_CODIGO = old.ipdc_Codigo
and ( PRODUCAO_ETAPAS.EPDC_ENTRADA is not null
or PRODUCAO_ETAPAS.EPDC_SAIDA is not null
or PRODUCAO_ETAPAS.EPDC_INICIO is not null
or PRODUCAO_ETAPAS.EPDC_FIM is not null)
into :V_ESTADO;
if ((:V_ESTADO > 0) and (:V_ESTADO is not null)) then --ENTÃO ALGUMA
ESTAPA FOI INICIADA
begin
-- Todas as etapas foram concluídas?
select count(PRODUCAO_ETAPAS.IPDC_CODIGO)
from PRODUCAO_ETAPAS
where PRODUCAO_ETAPAS.IPDC_CODIGO = old.IPDC_CODIGO
and PRODUCAO_ETAPAS.EPDC_ENTRADA is not null
and PRODUCAO_ETAPAS.EPDC_SAIDA is not null
and PRODUCAO_ETAPAS.EPDC_INICIO is not null
and PRODUCAO_ETAPAS.EPDC_FIM is not null
group by PRODUCAO_ETAPAS.IPDC_CODIGO
having count(PRODUCAO_ETAPAS.IPDC_CODIGO) = (
select
count(PE2.IPDC_CODIGO)
from PRODUCAO_ETAPAS
PE2
where PE2.IPDC_CODIGO
= old.IPDC_CODIGO
)
into :V_ESTADO;
if ((:V_ESTADO IS NULL) or (:V_ESTADO <= 0)) then -- SIM, FORAM
begin
update CAD_PRODUCAO_ITEM set IPDC_ESTADO = 2 where IPDC_CODIGO =
old.IPDC_CODIGO; --Em Producao
end
else -- NÃO, SÓ ALGUMAS
begin
update CAD_PRODUCAO_ITEM set IPDC_ESTADO = 3 where IPDC_CODIGO =
old.IPDC_CODIGO; -- Produzido
end
end
else -- Nenhuma estapa foi iniciada
begin
update CAD_PRODUCAO_ITEM set IPDC_ESTADO = 1 where IPDC_CODIGO =
old.IPDC_CODIGO; --Enviado
end
end
^
_______________________________________________________
Promoção Yahoo! Acesso Grátis: a cada hora navegada você
acumula cupons e concorre a mais de 500 prêmios! Participe!
http://yahoo.fbiz.com.br/
Mais detalhes sobre a lista de discussão lista