Trigger para bloqueio de venda bloqueando também a compra
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
Curtidas 0