Trigger para bloqueio de venda bloqueando também a compra

25/02/2019

0

Boa tarde! Fiz uma Trigger para bloquear Unidades de medida não liberadas para venda do meu sistema, a regra funciona quando aplicada para sua função que é a venda, mas como trata-se da tabela de itens a mesma também é da compra, mas não quero que a trigger seja executada quando for do tipo de movimento "C" compra. Quando feita a primeira inserção o sistema aceita a regra de compra e valida a inserção, mas quando tento efetuar um update no item, trocá-lo para outra unidade o sistema ativa a trigger indevidamente. segue o código:
CREATE OR REPLACE TRIGGER "AD_TGFITE_IUP_REGRAS_UNIDLIB"
BEFORE INSERT OR UPDATE ON TESTE.TGFITE

FOR EACH ROW

/*Declarações-------------------------------------------------------*/
DECLARE
   P_GRUPO        INT;
   P_EXCECAO      VARCHAR2(2);
   P_PADRAO       VARCHAR2(2);
   P_USUEMP       INT;
   P_TOP          VARCHAR2(2);
   pragma AUTONOMOUS_TRANSACTION;
/*------------------------------------------------------------------*/
/*Início------------------------------------------------------------*/
BEGIN

/*Empresa do Usuário logado-----------------------------------------*/
    SELECT TSIUSU.CODEMP
           INTO P_USUEMP
           FROM TSIUSU
           WHERE TSIUSU.CODUSU = STP_GET_CODUSULOGADO();
/*------------------------------------------------------------------*/   
/*Grupo Usuario logado----------------------------------------------*/
   SELECT GRU.CODGRUPO
          INTO P_GRUPO
          FROM TSIGRU GRU, TSIUSU USU
          WHERE USU.CODGRUPO = GRU.CODGRUPO
          AND USU.CODUSU = STP_GET_CODUSULOGADO(); 
/*------------------------------------------------------------------*/
/*Ver se o produto é uma exceção------------------------------------*/
    SELECT PRO.AD_EXCECAO
           INTO P_EXCECAO
           FROM TGFPRO PRO
           WHERE PRO.CODPROD = :NEW.CODPROD;
/*------------------------------------------------------------------*/           
/*Ver se a Unidade Padrão está liberada para venda------------------*/
    SELECT PRO.CODVOL
           INTO P_PADRAO
           FROM TGFPRO PRO
           WHERE PRO.AD_MOBILIDADE = ''S''
           AND PRO.ATIVO = ''S''
           AND PRO.AD_PERMITEVENDA = ''N''
           AND  PRO.CODPROD = :NEW.CODPROD 
           AND PRO.CODVOL = :NEW.CODVOL;
/*------------------------------------------------------------------------------------------------*/
/*Verificar Tipo de Movimentação da TOP--------------------------------------------------*/
    SELECT CAB.TIPMOV
           INTO P_TOP
           FROM TGFCAB CAB, TGFITE ITE
           WHERE CAB.NUNOTA = ITE.NUNOTA
           AND ITE.NUNOTA = :NEW.NUNOTA;
        
/*-----------------------------------------------------------------------------------------------*/
/*Condições: se a variável for igual ao código da ite*/
IF P_PADRAO = :NEW.CODVOL AND P_EXCECAO = ''N'' AND P_TOP <> ''C''
OR P_PADRAO = :NEW.CODVOL AND P_GRUPO <> 11 AND P_TOP <> ''C''

   THEN
       RAISE_APPLICATION_ERROR(-20101,AD_FC_FORMATAHTML_BISPO(''Unidade Não Liberada para Venda!'',
                                                          ''Produto: ''||:NEW.CODPROD,
                                                       ''Unidade: ''||:NEW.CODVOL ));                                                      
END IF;
/*-------------------------------------------------------------------------------------------------*/
/*Excessões: caso não encontre dados, a variável receberá o indicado.------------------------------*/       
EXCEPTION
WHEN NO_DATA_FOUND THEN
  P_PADRAO :=''NA'';

/*--------------------------------------------------------------------------------------------------*/
END;
/*Fim---------------------------------------------*/
Maicon Scapatici

Maicon Scapatici

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar