none
Trigger com IF RRS feed

  • Pergunta

  • Bom dia Pessoal, estou em um impasse podem me ajudar por favor, criei a trigger abaixo com 2 condições if porem ele não esta entrando no 2° IF, esta somente parando no 1° IF, não sei mais o que tentar, eu defini a variavel @vlrmaxixo como 10000 e quando incluo um pedido maior que 10000 não esta caindo no if TESTE3 e TESTE4:(:

    ALTER TRIGGER [dbo].[tI_ESTPED_INSERE_APROVADOR] ON [dbo].[ESTPED] AFTER UPDATE AS
    --Alterado por Armando em 31/05/2017 - Incluído bloqueio para a aprovação de Pedidos que ultrapassem o valor da meta definida. Somente o Liberador poderá liberar o pedido.
    BEGIN
      SET NOCOUNT ON
      
    DECLARE @situac VARCHAR(1),
    @situac_deleted VARCHAR(1),
            @numped INT,
            @aprovador VARCHAR(100),
            @liberador VARCHAR(100),
    @errno INT,
    @errmsg VARCHAR(255),
    @codemp INT ,
    @codset INT,
    @libera VARCHAR(1),
    @PEDRAT_CODCUS varchar(30),
    @PEDRAT_ANALI INT,
    @GRUPO INT,
    @VLRORCAMENTO FLOAT,
    @VLRACUMUPEDI FLOAT,
    @VLRPEDIDO FLOAT,
    @errono int,
    @erromsg varchar(255),
    @vlrmaximo decimal(10,2)
     
    SELECT @numped = (SELECT TOP 1 INSERTED.NUMPED FROM INSERTED),
       @situac = (SELECT TOP 1 INSERTED.SITUAC FROM INSERTED),
       @aprovador = '',
       @liberador = '',
       @codemp = (SELECT TOP 1 RODFIL.CODEMP FROM INSERTED INNER JOIN RODFIL ON INSERTED.CODFIL = RODFIL.CODFIL),
       @codset = (SELECT TOP 1 ESTREQ.CODSET FROM INSERTED INNER JOIN ESTIPE ON INSERTED.NUMPED = ESTIPE.NUMPED INNER JOIN ESTREQ ON ESTIPE.CODREQ = ESTREQ.CODREQ),
       @libera = (SELECT TOP 1 INSERTED.LIBERA FROM INSERTED),
       @situac_deleted = (SELECT TOP 1 DELETED.SITUAC FROM DELETED),
       @PEDRAT_CODCUS = (SELECT TOP 1 CODCUS FROM PEDRAT WHERE PEDRAT.NUMPED = @numped),
       @PEDRAT_ANALI = (SELECT TOP 1 ANALIT FROM PEDRAT WHERE PEDRAT.NUMPED = @numped),
       @vlrmaximo = 10000,
       @GRUPO = (SELECT TOP 1 CODCON FROM TMP_CODCUS T WHERE T.CODCON = @PEDRAT_CODCUS),
       @VLRORCAMENTO = COALESCE((SELECT isnull(SUM(O.TMP_VLRORC),0) AS VALOR
      FROM TMP_GRUPO_ANALITICA T LEFT OUTER JOIN TMP_ORCAMENTO_COMPRAS O ON T.TMP_ANALI = O.TMP_ANALIT
      WHERE O.TMP_MES = MONTH(GETDATE()) AND
    O.TMP_ANO = YEAR(GETDATE()) AND
    t.tmp_anali = @PEDRAT_ANALI),0),
       @VLRACUMUPEDI = COALESCE((SELECT isnull(SUM(ESTPED.VLRTOT),0)
      FROM dbo.ESTPED AS ESTPED LEFT JOIN dbo.PEDRAT AS PEDRAT ON PEDRAT.NUMPED = ESTPED.NUMPED
    LEFT OUTER JOIN TMP_GRUPO_ANALITICA T ON PEDRAT.ANALIT = T.TMP_ANALI
      WHERE MONTH(ESTPED.DATPED) = MONTH(GETDATE()) AND
    YEAR(ESTPED.DATPED) = YEAR(GETDATE()) AND 
    ESTPED.SITUAC in ('A', 'B', 'X') AND
    ESTPED.LIBERA = 'S' AND
    PEDRAT.ANALIT = @PEDRAT_ANALI
    ),0),
       @VLRPEDIDO =  COALESCE((SELECT SUM(ESTPED.VLRTOT)
      FROM dbo.ESTPED AS ESTPED LEFT JOIN dbo.PEDRAT AS PEDRAT ON PEDRAT.NUMPED = ESTPED.NUMPED
    LEFT OUTER JOIN TMP_GRUPO_ANALITICA T ON PEDRAT.ANALIT = T.TMP_ANALI
      WHERE MONTH(ESTPED.DATPED) = MONTH(GETDATE()) AND
    YEAR(ESTPED.DATPED) = YEAR(GETDATE()) AND
    estped.numped = @numped
    ),0)

    IF @situac = 'P'
    BEGIN
    IF @vlrpedido < @vlrmaximo

    set @aprovador =  'TESTE1'

    set @liberador = 'TESTE2'

    END
    ELSE
    IF @situac = 'P'
    BEGIN
    IF @vlrpedido >= @vlrmaximo

    set @aprovador = 'TESTE3'

    set @liberador = 'TESTE4'

    END
    IF (@situac = 'P')  
    BEGIN
         UPDATE ESTPED SET LOGAPR = COALESCE(@aprovador,'NENHUM'), loglib = COALESCE(@liberador,'NENHUM') WHERE ESTPED.NUMPED = @numped
    END


    segunda-feira, 6 de maio de 2019 14:07

Respostas

Todas as Respostas

  • Deleted
    segunda-feira, 6 de maio de 2019 14:13
  • Ola Jose bom dia, fiz a alteração citada mas ainda continuou caindo no 1° IF, segue abaixo como ficou após alteração.

    IF @situac = 'P'
    BEGIN
    IF @vlrpedido < @vlrmaximo
    BEGIN
    set @aprovador =  'TESTE1'

    set @liberador = 'TESTE2'
    ENd

    ELSE

    BEGIN
    set @aprovador = 'TESTE3'

    set @liberador = 'TESTE4'

    END
    enD
    IF (@situac = 'P')  
    BEGIN
         UPDATE ESTPED SET LOGAPR = COALESCE(@aprovador,'NENHUM'), loglib = COALESCE(@liberador,'NENHUM') WHERE ESTPED.NUMPED = @numped
    END


    segunda-feira, 6 de maio de 2019 14:27
  • Deleted
    segunda-feira, 6 de maio de 2019 14:52
  • Eu setei na @VLRPEDIDO o numero do pedido que eu criei como teste no valor de 21000 e ai sim caiu no 2° IF mas não entendi o pq que a variável não esta recebendo o valor do pedido @numped.

       @VLRPEDIDO =  COALESCE((SELECT SUM(ESTPED.VLRTOT)
      FROM dbo.ESTPED AS ESTPED LEFT JOIN dbo.PEDRAT AS PEDRAT ON PEDRAT.NUMPED = ESTPED.NUMPED
    LEFT OUTER JOIN TMP_GRUPO_ANALITICA T ON PEDRAT.ANALIT = T.TMP_ANALI
      WHERE MONTH(ESTPED.DATPED) = MONTH(GETDATE()) AND
    YEAR(ESTPED.DATPED) = YEAR(GETDATE()) AND
    estped.numped = 89039
    ),0)

    segunda-feira, 6 de maio de 2019 15:15
  • Deleted
    • Marcado como Resposta PEPE_88 segunda-feira, 6 de maio de 2019 15:44
    segunda-feira, 6 de maio de 2019 15:24
  • Ok mas esse trecho vai depois das declarações das variáveis antes do select?

    DECLARE @situac VARCHAR(1),
    @situac_deleted VARCHAR(1),
            @numped INT,
            @aprovador VARCHAR(100),
            @liberador VARCHAR(100),
    @errno INT,
    @errmsg VARCHAR(255),
    @codemp INT ,
    @codset INT,
    @libera VARCHAR(1),
    @PEDRAT_CODCUS varchar(30),
    @PEDRAT_ANALI INT,
    @GRUPO INT,
    @VLRORCAMENTO FLOAT,
    @VLRACUMUPEDI FLOAT,
    @VLRPEDIDO FLOAT,
    @errono int,
    @erromsg varchar(255),
    @vlrmaximo decimal(10,2)

    IF (SELECT count (*) from INSERTED) > 1
      BEGIN
      PRINT 'ERRO. Procedimento não aceita mais de uma linha alterada';
      return;
      END;

    set @numped = (SELECT TOP 1 INSERTED.NUMPED FROM INSERTED);
    set @situac = (SELECT TOP 1 INSERTED.SITUAC FROM INSERTED);
     
    SELECT --@numped = (SELECT TOP 1 INSERTED.NUMPED FROM INSERTED),
       --@situac = (SELECT TOP 1 INSERTED.SITUAC FROM INSERTED),
       @aprovador = '',
       @liberador = '',
       @codemp = (SELECT TOP 1 RODFIL.CODEMP FROM INSERTED INNER JOIN RODFIL ON INSERTED.CODFIL = RODFIL.CODFIL),
       @codset = (SELECT TOP 1 ESTREQ.CODSET FROM INSERTED INNER JOIN ESTIPE ON INSERTED.NUMPED = ESTIPE.NUMPED INNER JOIN ESTREQ ON ESTIPE.CODREQ = ESTREQ.CODREQ),
       @libera = (SELECT TOP 1 INSERTED.LIBERA FROM INSERTED),
       @situac_deleted = (SELECT TOP 1 DELETED.SITUAC FROM DELETED),
       @PEDRAT_CODCUS = (SELECT TOP 1 CODCUS FROM PEDRAT WHERE PEDRAT.NUMPED = @numped),
       @PEDRAT_ANALI = (SELECT TOP 1 ANALIT FROM PEDRAT WHERE PEDRAT.NUMPED = @numped),
       @vlrmaximo = 10000,
       @GRUPO = (SELECT TOP 1 CODCON FROM TMP_CODCUS T WHERE T.CODCON = @PEDRAT_CODCUS),
       @VLRORCAMENTO = COALESCE((SELECT isnull(SUM(O.TMP_VLRORC),0) AS VALOR
      FROM TMP_GRUPO_ANALITICA T LEFT OUTER JOIN TMP_ORCAMENTO_COMPRAS O ON T.TMP_ANALI = O.TMP_ANALIT
      WHERE O.TMP_MES = MONTH(GETDATE()) AND
    O.TMP_ANO = YEAR(GETDATE()) AND
    t.tmp_anali = @PEDRAT_ANALI),0),
       @VLRACUMUPEDI = COALESCE((SELECT isnull(SUM(ESTPED.VLRTOT),0)
      FROM dbo.ESTPED AS ESTPED LEFT JOIN dbo.PEDRAT AS PEDRAT ON PEDRAT.NUMPED = ESTPED.NUMPED
    LEFT OUTER JOIN TMP_GRUPO_ANALITICA T ON PEDRAT.ANALIT = T.TMP_ANALI
      WHERE MONTH(ESTPED.DATPED) = MONTH(GETDATE()) AND
    YEAR(ESTPED.DATPED) = YEAR(GETDATE()) AND 
    ESTPED.SITUAC in ('A', 'B', 'X') AND
    ESTPED.LIBERA = 'S' AND
    PEDRAT.ANALIT = @PEDRAT_ANALI
    ),0),
       @VLRPEDIDO =  COALESCE((SELECT SUM(ESTPED.VLRTOT)
      FROM dbo.ESTPED AS ESTPED LEFT JOIN dbo.PEDRAT AS PEDRAT ON PEDRAT.NUMPED = ESTPED.NUMPED
    LEFT OUTER JOIN TMP_GRUPO_ANALITICA T ON PEDRAT.ANALIT = T.TMP_ANALI
      WHERE MONTH(ESTPED.DATPED) = MONTH(GETDATE()) AND
    YEAR(ESTPED.DATPED) = YEAR(GETDATE()) AND
    estped.numped = @numped
    ),0)

    segunda-feira, 6 de maio de 2019 15:35
  • Obrigado Jose, sua sugestão de definir o valor individual deu certo.
    segunda-feira, 6 de maio de 2019 15:45