[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