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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)