Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fabio.silva

[Resolvido] Erro no final de trigger

Recommended Posts

pessoal minha trigger nao esta compilando.. estou desde ontem trabalhando nela! nao sei mais oq pode ser... to pedindo ajuda até para Ex professor mas ta dificil..

na ultima linha eu recebo o erro pls 00130 ( encontrado ; esperado if)

que loucura é essa?

CREATE OR REPLACE TRIGGER TGV_TRG_INC_UPD_TGFITE_COM
BEFORE INSERT OR UPDATE ON TGFITE FOR EACH ROW
DECLARE
 --PRAGMA AUTONOMOUS_TRANSACTION;
 P_VLRTAB   TGFITE.VLRUNIT%TYPE;
 P_VLRMIN   TGFITE.VLRUNIT%TYPE;
 --P_VLRUNIT  TGFITE.VLRUNIT%TYPE;
 P_TOP      TGFCAB.CODTIPOPER%TYPE;
 P_DTNEG    TGFCAB.DTNEG%TYPE;
 P_NUTAB    INTEGER;
 P_COM      TGFCAB.COMISSAO%TYPE;
 P_DESC     TGFITE.AD_PERC_COM_CSA%TYPE;
 P_REP      TGFCAB.AD_COM_REP%TYPE;
 P_CODVEND  TGFCAB.CODVEND%TYPE;
 P_EXISTE   INTEGER;
 VAR_DESC   INTEGER;
 --P_TABELA   TGFITE.AD_TABELAMP%TYPE;

BEGIN
/*
TRIGGER UTILIZADA .....
*/

SELECT CODTIPOPER, DTNEG, CODVEND INTO P_TOP, P_DTNEG, P_CODVEND FROM TGFCAB WHERE NUNOTA = :NEW.NUNOTA;
SELECT COUNT(1) INTO P_EXISTE FROM TGFVEN WHERE TIPVEND = 'V' AND CODVEND = P_CODVEND;

        -- NOTA --
       -- NÃO ESTÁ FUNCIONANDO EM CASO DE ALTERAÇÃO DA QUANTIDADE NEGOCIADA.
       -- ATIVANDO O PRAGMA FUNCIONA, MAS ACARRETA EM PROBLEMAS NO FATURAMENTO


/*
COMISSÃO xxxx
*/

       IF (P_TOP IN (2016, 3016)) THEN
       --IF UPDATING('CODPROD') THEN
         SELECT COMISSAO, AD_COM_REP INTO P_COM, P_REP FROM TGFCAB WHERE NUNOTA = :NEW.NUNOTA;
             :NEW.AD_PERC_COM_CSA := P_COM;
             :NEW.AD_VLR_COM_CSA := :NEW.QTDNEG * :NEW.VLRUNIT * P_COM / 100;
             IF (P_EXISTE > 0) THEN
                   SELECT COMVENDA INTO P_COM FROM TGFVEN WHERE CODVEND = P_CODVEND;
                   :NEW.AD_PERC_COM_VEN := P_COM; 
                   :NEW.AD_VLR_COM_VEN := ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_VEN / 100),4);
               ELSIF (P_EXISTE = 0) THEN
                 :NEW.AD_PERC_COM_VEN := P_REP;
                 :NEW.AD_VLR_COM_VEN := :NEW.QTDNEG * :NEW.VLRUNIT * P_REP / 100;
               END IF;
              END IF;
       --END IF;
      --END IF;        
      --DEVOLUÇÃO
       IF (P_TOP IN (4000, 4001, 4005, 4016)) THEN
         SELECT COMISSAO, AD_COM_REP INTO P_COM, P_REP FROM TGFCAB WHERE NUNOTA = :NEW.NUNOTA;
             :NEW.AD_PERC_COM_CSA := P_COM;
             :NEW.AD_VLR_COM_CSA := (:NEW.QTDNEG * :NEW.VLRUNIT * P_COM) / 100 * -1;
             :NEW.AD_PERC_COM_VEN := P_REP;
             :NEW.AD_VLR_COM_VEN := (:NEW.QTDNEG * :NEW.VLRUNIT * P_REP) / 100 * -1;
      END IF;
--------------------------------------------------------------------------------------------------------------------------
/*
xxx
*/
IF(P_TOP IN(1006, 2006, 3006, 1011, 2011, 3011)) THEN
    IF (:NEW.AD_PERC_COM_CSA IS NULL) THEN 
      RAISE_APPLICATION_ERROR(-20101, 'PERCENTUAL DE COMISSÃO CSA NÃO INFORMADO!.');
    ELSIF(P_EXISTE >0) THEN
         SELECT COMVENDA INTO P_COM FROM TGFVEN WHERE CODVEND = P_CODVEND;
         :NEW.AD_VLR_COM_VEN := :NEW.QTDNEG * :NEW.VLRUNIT * P_COM / 100;
         :NEW.AD_VLR_COM_CSA := :NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_CSA / 100;
ELSE
          RAISE_APPLICATION_ERROR(-20101, 'Não existe vendedor com este código na tabela TGFVEN .');
END IF;
END IF;

--DEVOLUCAO
IF (P_TOP IN(4006, 4011)) THEN
  :NEW.AD_VLR_COM_VEN := (:NEW.QTDNEG * :NEW.VLRUNIT * P_COM / 100)* -1;
  :NEW.AD_VLR_COM_CSA := (:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_CSA / 100)* -1;
END IF;   
--------------------------------------------------------------------------------------------------------------------
/*
xxx  
*/

     IF (P_TOP IN (1007, 2007, 3007, 1012, 2012, 3012, 1013, 2013, 3013)) THEN
        IF :NEW.AD_PERC_COM_CSA IS NULL THEN 
   RAISE_APPLICATION_ERROR(-20101, 'PERCENTUAL DE COMISSÃO CSA NÃO INFORMADO!.');
 ELSIF :NEW.AD_PERC_COM_VEN IS NULL THEN
              RAISE_APPLICATION_ERROR(-20101, 'PERCENTUAL DE COMISSÃO VENDEDOR NÃO INFORMADO!.');
 ELSE
              :NEW.AD_VLR_COM_CSA := :NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_CSA / 100;
              :NEW.AD_VLR_COM_VEN := :NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_VEN / 100;
END IF;
END IF;
      --DEVOLUÇAO
IF (P_TOP IN(4007, 4012, 4013))THEN
          :NEW.AD_VLR_COM_CSA := (:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_CSA / 100)* -1;
           :NEW.AD_VLR_COM_VEN := (:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_VEN / 100)* -1;
END IF;
-----------------------------------------------------
/*
xx
*/
       IF (P_TOP IN (1006, 2006, 3006, 1011, 2011, 3011)) THEN

             :NEW.AD_VLR_COM_CSA := :NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_CSA / 100;
             IF (P_EXISTE > 0) THEN
                   SELECT COMVENDA INTO P_COM FROM TGFVEN WHERE CODVEND = P_CODVEND;
                   :NEW.AD_PERC_COM_VEN := P_COM; 
                   :NEW.AD_VLR_COM_VEN := ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_VEN / 100),4);
               ELSE 
                    RAISE_APPLICATION_ERROR(-20101, 'Não existe vendedor com este código na tabela TGFVEN .');
               END IF;
              END IF;


      --DEVOLUÇÃO

       IF (P_TOP IN (4006, 4011)) THEN
             SELECT COMISSAO, AD_COM_REP INTO P_COM, P_REP FROM TGFCAB WHERE NUNOTA = :NEW.NUNOTA;
             :NEW.AD_PERC_COM_CSA := P_COM;
             :NEW.AD_VLR_COM_CSA := (:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_CSA / 100) * -1;
             :NEW.AD_PERC_COM_VEN := P_REP;
             :NEW.AD_VLR_COM_VEN := (:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_VEN / 100) * -1;
      END IF; 

--------------------------------------------------------------------------------------------------------------------------
/*
xxx
*/    

     IF (P_TOP IN (1000, 2000, 3000)) THEN
             SELECT CODTIPOPER, DTNEG INTO P_TOP, P_DTNEG FROM TGFCAB WHERE NUNOTA = :NEW.NUNOTA;
/*              
--SELECT AD_TABELAMP, VLRUNIT INTO P_TABELA, P_VLRUNIT FROM TGFITE ITE WHERE ITE.NUNOTA = :NEW.NUNOTA AND ITE.SEQUENCIA = :NEW.SEQUENCIA;
*/
             IF (:NEW.AD_TABELAMP IS NOT NULL ) THEN
                 IF (:NEW.AD_TABELAMP = 'TABELA 6') THEN
                    SELECT T.NUTAB INTO P_NUTAB FROM TGFTAB T WHERE T.CODTAB = 2000 AND T.DTVIGOR = (SELECT MAX (DTVIGOR) FROM TGFTAB M WHERE M.CODTAB = 2000 AND M.DTVIGOR <= P_DTNEG);
                    Stp_Obtem_Preco2(P_NUTAB,:NEW.CODPROD,SYSDATE,P_VLRTAB);
                    SELECT (P_VLRTAB - (P.DESCMAX * P_VLRTAB / 100)) INTO P_VLRMIN FROM TGFPRO P WHERE P.CODPROD = :NEW.CODPROD;
                    IF (ROUND(:NEW.VLRUNIT,2) >= P_VLRMIN) THEN
                       :NEW.AD_PERC_COM_CSA := 6;
                       :NEW.AD_VLR_COM_CSA := :NEW.QTDNEG * :NEW.VLRUNIT * 6 / 100;
                       IF (P_EXISTE > 0) THEN
                           SELECT COMVENDA INTO P_COM FROM TGFVEN WHERE CODVEND = P_CODVEND;
                           :NEW.AD_PERC_COM_VEN := P_COM; 
                           :NEW.AD_VLR_COM_VEN := ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_VEN / 100),4);
                       ELSE 
                           RAISE_APPLICATION_ERROR(-20101, 'Não existe vendedor com este código na tabela TGFVEN .');
                          END IF;
                        :NEW.AD_DESC_TAB_CSA := (( 1 - ( :NEW.VLRUNIT /P_VLRTAB)) * 100 );
                    ELSE
                       RAISE_APPLICATION_ERROR(-20101, 'O VALOR UNITÁRIO NÃO SE ENQUADRA PARA A TABELA ESCOLHIDA.(6) - VALOR MÍNIMO: ' || P_VLRMIN);                     
                    END IF;
                 END IF;
                 IF (:NEW.AD_TABELAMP = 'TABELA 5') THEN
                    SELECT T.NUTAB INTO P_NUTAB FROM TGFTAB T WHERE T.CODTAB = 2001 AND T.DTVIGOR = (SELECT MAX (DTVIGOR) FROM TGFTAB M WHERE M.CODTAB = 2001 AND M.DTVIGOR <= P_DTNEG);                  
                    Stp_Obtem_Preco2(P_NUTAB,:NEW.CODPROD,SYSDATE,P_VLRTAB);
                    SELECT ROUND((P_VLRTAB - (P.DESCMAX * P_VLRTAB / 100)),2) INTO P_VLRMIN FROM TGFPRO P WHERE P.CODPROD = :NEW.CODPROD;
                    IF (ROUND(:NEW.VLRUNIT,2) >= P_VLRMIN) THEN
                       :NEW.AD_PERC_COM_CSA := 5;
                       :NEW.AD_VLR_COM_CSA := :NEW.QTDNEG * :NEW.VLRUNIT * 5 / 100;
        IF (P_EXISTE > 0) THEN
SELECT COMVENDA INTO P_COM FROM TGFVEN WHERE CODVEND = P_CODVEND;    
:NEW.AD_PERC_COM_VEN := P_COM; 
:NEW.AD_VLR_COM_VEN := ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_VEN / 100),4);

                       ELSE 
                       RAISE_APPLICATION_ERROR(-20101, 'Não existe vendedor com este código na tabela TGFVEN .');
                          END IF;

                       :NEW.AD_DESC_TAB_CSA := (( 1 - ( :NEW.VLRUNIT /P_VLRTAB)) * 100 );
                    ELSE
                       RAISE_APPLICATION_ERROR(-20101, 'O VALOR UNITÁRIO NÃO SE ENQUADRA PARA A TABELA ESCOLHIDA. (5) - VALOR MÍNIMO: ' || P_VLRMIN);                     
                    END IF;

                 IF (:NEW.AD_TABELAMP = 'TABELA 4') THEN
                    SELECT T.NUTAB INTO P_NUTAB FROM TGFTAB T WHERE T.CODTAB = 2002 AND T.DTVIGOR = (SELECT MAX (DTVIGOR) FROM TGFTAB M WHERE M.CODTAB = 2002 AND M.DTVIGOR <= P_DTNEG);                  
                    Stp_Obtem_Preco2(P_NUTAB,:NEW.CODPROD,SYSDATE,P_VLRTAB);
                    SELECT ROUND((P_VLRTAB - (P.DESCMAX * P_VLRTAB / 100)),2) INTO P_VLRMIN FROM TGFPRO P WHERE P.CODPROD = :NEW.CODPROD;
                    IF (ROUND(:NEW.VLRUNIT,2) >= P_VLRMIN) THEN
                       :NEW.AD_PERC_COM_CSA := 4;
                       :NEW.AD_VLR_COM_CSA := :NEW.QTDNEG * :NEW.VLRUNIT * 4 / 100;
                       IF (P_EXISTE > 0) THEN
                           SELECT COMVENDA INTO P_COM FROM TGFVEN WHERE CODVEND = P_CODVEND;
                           :NEW.AD_PERC_COM_VEN := P_COM; 
                           :NEW.AD_VLR_COM_VEN := ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_VEN / 100),4);
                       ELSE
                           RAISE_APPLICATION_ERROR(-20101, 'Não existe vendedor com este código na tabela TGFVEN .');
                         END IF;
                       :NEW.AD_DESC_TAB_CSA := (( 1 - ( :NEW.VLRUNIT /P_VLRTAB)) * 100 );
                    ELSE
                       RAISE_APPLICATION_ERROR(-20101, 'O VALOR UNITÁRIO NÃO SE ENQUADRA PARA A TABELA ESCOLHIDA. (4) - VALOR MÍNIMO: ' || P_VLRMIN);                     
                    END IF;


                 IF (:NEW.AD_TABELAMP = 'TABELA 3') THEN
                    SELECT T.NUTAB INTO P_NUTAB FROM TGFTAB T WHERE T.CODTAB = 2003 AND T.DTVIGOR = (SELECT MAX (DTVIGOR) FROM TGFTAB M WHERE M.CODTAB = 2003 AND M.DTVIGOR <= P_DTNEG);                  
                    Stp_Obtem_Preco2(P_NUTAB,:NEW.CODPROD,SYSDATE,P_VLRTAB);
                    SELECT (P_VLRTAB - (P.DESCMAX * P_VLRTAB / 100)) INTO P_VLRMIN FROM TGFPRO P WHERE P.CODPROD = :NEW.CODPROD;
                    IF (ROUND(:NEW.VLRUNIT,2) >= P_VLRMIN) THEN
                       :NEW.AD_PERC_COM_CSA := 3;
                       :NEW.AD_VLR_COM_CSA := ROUND(:NEW.QTDNEG * :NEW.VLRUNIT * 3 / 100,4);
                       IF (P_EXISTE > 0) THEN
                           SELECT COMVENDA INTO P_COM FROM TGFVEN WHERE CODVEND = P_CODVEND;
                           :NEW.AD_PERC_COM_VEN := P_COM; 
                           :NEW.AD_VLR_COM_VEN := ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_VEN / 100),4);
                       ELSE 
                           RAISE_APPLICATION_ERROR(-20101, 'Não existe vendedor com este código na tabela TGFVEN .');
                         END IF;

                       :NEW.AD_DESC_TAB_CSA := (( 1 - ( :NEW.VLRUNIT /P_VLRTAB)) * 100 );
                    ELSE
                       RAISE_APPLICATION_ERROR(-20101, 'O VALOR UNITÁRIO NÃO SE ENQUADRA PARA A TABELA ESCOLHIDA. (3) - VALOR MÍNIMO: ' || P_VLRMIN);                     
                    END IF;
                 END IF;                  

             ELSE
                 RAISE_APPLICATION_ERROR(-20101, 'TABELA DE PREÇO NÃO INFORMADA.'); 
             END IF;
      END IF;
-----------------------------------------------------------------------------------------------------
/*
xxx
*/     
      IF (P_TOP IN (1001, 2001, 3001)) THEN
         SELECT COMISSAO, AD_COM_REP INTO P_COM, P_REP FROM TGFCAB WHERE NUNOTA = :NEW.NUNOTA;
             :NEW.AD_PERC_COM_CSA := P_COM;
             :NEW.AD_VLR_COM_CSA := :NEW.QTDNEG * :NEW.VLRUNIT * P_COM / 100;
             :NEW.AD_PERC_COM_VEN := P_REP; 
             :NEW.AD_VLR_COM_VEN := ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_VEN / 100),4);

    END IF; 
    --DEVOLUÇÃO   
       IF (P_TOP IN (4000, 4001)) THEN

       SELECT COMISSAO, AD_COM_REP INTO P_COM, P_REP FROM TGFCAB WHERE NUNOTA = :NEW.NUNOTA;
           :NEW.AD_PERC_COM_CSA := (P_COM*-1);
           :NEW.AD_VLR_COM_CSA := ((:NEW.QTDNEG * :NEW.VLRUNIT * P_COM / 100)*-1);
           :NEW.AD_PERC_COM_VEN := (P_REP*-1); 
           :NEW.AD_VLR_COM_VEN := ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * (P_REP*-1) / 100),4);  
       END IF;     

--------------------------------------------------------------------------------------------------------------------------

/*
xxxx
*/       
      IF (P_TOP IN(1002, 2002, 3002 )) THEN
         SELECT T.NUTAB INTO P_NUTAB FROM TGFTAB T WHERE T.CODTAB = 5000 AND T.DTVIGOR = (SELECT MAX (DTVIGOR) FROM TGFTAB M WHERE M.CODTAB = 5000 AND M.DTVIGOR <= P_DTNEG);
          Stp_Obtem_Preco2(P_NUTAB,:NEW.CODPROD,SYSDATE,P_VLRTAB);
          IF (P_VLRTAB > 0 ) THEN
              SELECT ROUND((P_VLRTAB - (P.DESCMAX * P_VLRTAB / 100)),2) INTO P_VLRMIN FROM TGFPRO P WHERE P.CODPROD = :NEW.CODPROD;
              IF (ROUND(:NEW.VLRUNIT,2) >= P_VLRMIN) THEN
                 :NEW.AD_PERC_COM_CSA := 5;
                 :NEW.AD_VLR_COM_CSA := 0;
                 :NEW.AD_VLR_COM_CSA := ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_CSA / 100),4);
                 IF (P_EXISTE > 0) THEN
                   SELECT COMVENDA INTO P_COM FROM TGFVEN WHERE CODVEND = P_CODVEND;
                   :NEW.AD_PERC_COM_VEN := P_COM; 
                   :NEW.AD_VLR_COM_VEN := ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_VEN / 100),4);
                 ELSE 
                   RAISE_APPLICATION_ERROR(-20101, 'Não existe vendedor com este código na tabela TGFVEN .');               
                  END IF;
                 :NEW.AD_DESC_TAB_CSA := (( 1 - ( :NEW.VLRUNIT /P_VLRTAB)) * 100 ); 
              ELSE
                 RAISE_APPLICATION_ERROR(-20101, 'O VALOR UNITÁRIO NÃO SE ENQUADRA PARA A TABELA ESCOLHIDA. (5000) - VALOR MÍNIMO: ' || P_VLRMIN);                     
              END IF;
          ELSE
             RAISE_APPLICATION_ERROR(-20101, 'Não existe preço para este produto na Tabela (5000).'); 
          END IF; 
      END IF;
/*
xxxxx
*/      
IF (P_TOP IN(1003, 2003, 3003)) THEN
         SELECT T.NUTAB INTO P_NUTAB FROM TGFTAB T WHERE T.CODTAB = 4000 AND T.DTVIGOR = (SELECT MAX (DTVIGOR) FROM TGFTAB M WHERE M.CODTAB = 4000 AND M.DTVIGOR <= P_DTNEG);
          Stp_Obtem_Preco2(P_NUTAB,:NEW.CODPROD,SYSDATE,P_VLRTAB);
          IF (P_VLRTAB > 0 ) THEN
              SELECT ROUND((P_VLRTAB - (P.DESCMAX * P_VLRTAB / 100)),2) INTO P_VLRMIN FROM TGFPRO P WHERE P.CODPROD = :NEW.CODPROD;
              IF (ROUND(:NEW.VLRUNIT,2) >= P_VLRMIN) THEN
                 :NEW.AD_PERC_COM_CSA := 5;
                 :NEW.AD_VLR_COM_CSA := 0;
                 :NEW.AD_VLR_COM_CSA := ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_CSA / 100),4);
                 IF (P_EXISTE > 0) THEN
                   SELECT COMVENDA INTO P_COM FROM TGFVEN WHERE CODVEND = P_CODVEND;
                   :NEW.AD_PERC_COM_VEN := P_COM; 
                   :NEW.AD_VLR_COM_VEN := ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_VEN / 100),4);
                 ELSE 
                   RAISE_APPLICATION_ERROR(-20101,'VENDEDOR NAO INFORMADO!');
                  END IF;
                 :NEW.AD_DESC_TAB_CSA := (( 1 - ( :NEW.VLRUNIT /P_VLRTAB)) * 100 ); 
              ELSE
                 RAISE_APPLICATION_ERROR(-20101, 'O VALOR UNITÁRIO NÃO SE ENQUADRA PARA A TABELA ESCOLHIDA. (4000) - VALOR MÍNIMO: ' || P_VLRMIN);                     
              END IF;
          ELSE
             RAISE_APPLICATION_ERROR(-20101, 'Não existe preço para este produto na Tabela (4000).'); 
          END IF; 
      END IF;
      --NEGOCIADA
      /*IF (P_TOP IN (1004, 2004, 3004, 1005, 2005, 3005)) THEN
         SELECT COMISSAO, AD_COM_REP INTO P_COM, P_REP FROM TGFCAB WHERE NUNOTA = :NEW.NUNOTA;
        IF ((P_COM  <  1) OR (P_REP < 1)) THEN
                 RAISE_APPLICATION_ERROR(-20101, 'Um ou ambos os campos de comissão estão vazios .');
        END IF;      
:NEW.AD_PERC_COM_CSA := P_COM;
:NEW.AD_VLR_COM_CSA := :NEW.QTDNEG * :NEW.VLRUNIT * P_COM / 100;                     
:NEW.AD_VLR_COM_VEN := ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * P_REP/100),4)            
              END IF;*/
      END IF;  

       --DEVOLUÇÃO

       IF (P_TOP IN (4002, 4003, 4004, 4005)) THEN
   SELECT AD_COM_REP INTO P_REP FROM TGFCAB WHERE NUNOTA = :NEW.NUNOTA;
             :NEW.AD_PERC_COM_CSA := 5 * -1;
             :NEW.AD_VLR_COM_CSA := ROUND(:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_CSA / 100,4);
             :NEW.AD_PERC_COM_VEN := ((P_REP)* -1);
             :NEW.AD_VLR_COM_VEN := ROUND(:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_VEN / 100,4);
       END IF;  

--------------------------------------------------------------------------------------------------------------------------
/*
xxxxxxxxxx
*/
       IF (P_TOP IN (1008, 2008, 3008)) THEN
           :NEW.AD_PERC_COM_CSA := 10;
           :NEW.AD_VLR_COM_CSA := :NEW.QTDNEG * :NEW.VLRUNIT * 10 / 100;
             IF (P_EXISTE > 0) THEN
                   SELECT COMVENDA INTO P_COM FROM TGFVEN WHERE CODVEND = P_CODVEND;
                   :NEW.AD_PERC_COM_VEN := P_COM; 
                   :NEW.AD_VLR_COM_VEN := ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_VEN / 100),4);
               ELSE
                   RAISE_APPLICATION_ERROR(-20101, 'Não existe vendedor com este código na tabela TGFVEN .');                  
               END IF;
              END IF;

      --DEVOLUÇÃO

       IF (P_TOP IN (4008)) THEN
             :NEW.AD_VLR_COM_CSA :=ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * 10 / 100 * -1),4);
             :NEW.AD_VLR_COM_VEN :=ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_VEN / 100 * -1),4);
      END IF; 
--------------------------------------------------------------------------------------------------------------------------
/*
xxxx
*/
IF (P_TOP IN(1009, 2009, 3009)) THEN
  SELECT T.NUTAB INTO P_NUTAB FROM TGFTAB T WHERE T.CODTAB = 4 AND T.DTVIGOR = 
  (SELECT MAX (DTVIGOR) FROM TGFTAB M WHERE M.CODTAB = 4 AND M.DTVIGOR <= P_DTNEG);
  Stp_Obtem_Preco2(P_NUTAB,:NEW.CODPROD,SYSDATE,P_VLRTAB);
  IF (P_VLRTAB > 0 ) THEN
SELECT ROUND((P_VLRTAB - (P.DESCMAX * P_VLRTAB / 100)),2) INTO P_VLRMIN FROM TGFPRO P WHERE P.CODPROD = :NEW.CODPROD;

 IF (ROUND(:NEW.VLRUNIT,2) >= P_VLRMIN) THEN
        :NEW.AD_PERC_COM_CSA := 5;
        :NEW.AD_VLR_COM_CSA := 0;            
        :NEW.AD_VLR_COM_CSA := ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_CSA / 100),4);
         IF (P_EXISTE > 0) THEN
                 SELECT COMVENDA INTO P_COM FROM TGFVEN WHERE CODVEND = P_CODVEND;          
                :NEW.AD_PERC_COM_VEN := P_COM;   
       :NEW.AD_VLR_COM_VEN := ROUND((:NEW.QTDNEG * :NEW.VLRUNIT * :NEW.AD_PERC_COM_VEN / 100),4);

ELSE 
 RAISE_APPLICATION_ERROR(-20101, 'Não existe vendedor com este código na tabela TGFVEN .');
END IF;
ELSE
RAISE_APPLICATION_ERROR(-20101, 'Não existe valor para este item na tabela ?.');
END IF;
END IF;
--Devoluçao
IF(P_TOP IN (4009)) THEN
:NEW.AD_VLR_COM_CSA := :NEW.QTDNEG * :NEW.VLRUNIT * 5 / 100 * -1;
:NEW.AD_VLR_COM_VEN := :NEW.QTDNEG * :NEW.VLRUNIT * 10 / 100 * -1;
      END IF; 
/*REGRAS 2013 PROGRESSIVA*/     
IF (P_TOP IN(4))THEN
SELECT T.NUTAB INTO P_NUTAB FROM TGFTAB T WHERE T.CODTAB = 4 AND T.DTVIGOR = 
(SELECT MAX (DTVIGOR) FROM TGFTAB M WHERE M.CODTAB = 4 AND M.DTVIGOR <= P_DTNEG);
           Stp_Obtem_Preco2(P_NUTAB,:NEW.CODPROD,P_DTNEG,P_VLRTAB);          

     IF (P_VLRTAB > 0 ) THEN
      VAR_DESC := ROUND(((:NEW.VLRUNIT - P_VLRTAB)/P_VLRTAB)*100,4);
             IF (VAR_DESC<= 5) THEN
          :NEW.AD_DESC_TAB_CSA := ROUND((VAR_DESC*20/100),4);
               :NEW.AD_PERC_COM_CSA := ROUND(( 10 - :NEW.AD_DESC_TAB_CSA  ),4);

             ELSE 
         :NEW.AD_DESC_TAB_CSA := ROUND((VAR_DESC*50/100),4);
               :NEW.AD_PERC_COM_CSA := ROUND(( 10 - :NEW.AD_DESC_TAB_CSA  ),4);
                    END IF;

       ELSE
       RAISE_APPLICATION_ERROR(-20101, 'Não existe preço para este produto na Tabela (?).');   
          END IF;
               END IF;
END;                
/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um par if/end if está perdido , difícil ver sem indentação , em SP´s muito complicadas eu constumo comentar os "ind if" com a condição do if.

 

if xxxx = 38 then
 if yyy <> 77 then
    ... bla bla bla
 else
    ... bli bli bli
 ind if;--yyy <> 77
else
 ... blo blo blo
end if;--xxxx = 38

 

ajuda a pouco a não se perder nos ninho de if´s.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta era isso mesmo!!

 

Eu descobri que no PL/sql se se você posicionar o mouse no if botao direito da pra selecionar todo o codigo entre o if e o seu respectivo end if!

ai percebi uma serie de ifs fechados de forma errada!

 

Eu fui arrumando do if mais interno da trigger para o mais externo.. ai foi batata!!

1 problema a menos!! agora é ir pro cliente testar e torcer para que a trigger nao exploda o servidor!!! haha..

 

Valeu a força!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.