Fórum Trigger para bloqueio de venda bloqueando também a compra #600774
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | 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 :)