6 Replies Latest reply: Feb 23, 2015 1:23 PM by André Barros RSS

    Dúvida sobre IF aninhado

    André Barros

      Pessoal,

      Possuo a seguinte tabela carregada:

      OPSituacaoAtraso
      1203013
      1203112
      120321-4
      1203305
      120340-2

       

      Estou tentando fazer o seguinte teste condicional para diferenciar os campos 'Situacao' e 'Atraso' respectivamente.

      if(SituacaoOP=0, if(Atraso<=0, OP))

      ou

      if(SituacaoOP=0, if(Atraso>0, OP))

      ou

      if(SituacaoOP=1, if(Atraso<=0, OP))

      ou

      if(SituacaoOP=1, if(Atraso>0, OP))

       

      Porém, em todas as expressões acima, sempre só o primeiro teste funciona (em azul).

      O que estou fazendo de errado?

       

       

      Grato

        • Re: Dúvida sobre IF aninhado
          Juliana Campagnolo

          Olá André,

           

          tenta assim:

           

          if(SituacaoOP=0 and Atraso<=0, OP)

          ou

          if(SituacaoOP=0 and Atraso>0, OP)

          ou

          if(SituacaoOP=1 and Atraso<=0, OP)

          ou

          if(SituacaoOP=1 and Atraso>0, OP)

           

          Espero ajudar

          • Re: Dúvida sobre IF aninhado

            Oi André!

             

            Qual seria o objetivo do seu If?

             

            Talvez possamos inclusive contribuir com uma solução diferente de um If =)

              • Re: Dúvida sobre IF aninhado
                André Barros

                Ola Edécio,

                Tento como base a tabela abaixo:

                 

                Veja o que espero do seguinte filtro em uma eventual consulta:

                Quando eu usar: if(Situacao=0 and Atraso<=0, OP)

                Mostraria:

                 



                Ou, quando eu usar: if(Situacao=1 and Atraso<=0, OP)

                Mostraria:

                 

                 

                Ou ainda, quando eu usar: if(Situacao=1 and Atraso>0, OP)

                Mostraria:

                  • Re: Dúvida sobre IF aninhado

                    Pelo o que entendi, você gostaria de criar 3 "categorias" para suas instruções, correto?

                    A ideia do If abaixo é utilizar flags para que você possa filtrar valores através de uma lista no QV.

                     

                    Subsituí o campo SituacaoOP que você utilizou (imaginando que você quis mencionar a coluna Situacao) . Talvez esse fosse um dos problemas de não estar obtendo uma resposta esperada.

                     

                    Tenta utilizar assim:

                     

                    If( Situacao = 0 and Atraso <=0, 'Tipo 1',

                        If( Situacao = 1 and Atraso <=0, 'Tipo 2',

                              If( Situacao = 1 and Atraso >0, 'Tipo 3')))


                    Caso não funcione, tenta descrever um pouco mais o que você deseja. Pode passar a regra de negócio por trás do seu If mesmo


                    Cordialmente,

                    Edécio Santos.

                • Re: Dúvida sobre IF aninhado
                  André Barros

                  Pessoal,

                   

                  Vejam só o que pode fazer um pequeno descuido.

                  Todas as formas de uso do IF estavam certos. O problema foi que eu estava dando LOAD separado nos campos que estavam sendo testados pelo IF!

                   

                  Vejam os destaques em meu script abaixo:

                  LIB CONNECT TO 'DataPlus';

                  /* Prazo de entrega da indústria */

                  LOAD Ano, Mes, DataCriacaoOP, InicioOP, PrevTerminoOP,

                    DataEmissaoPed, DataEntregaPrevPed, PedidoVenda,

                    Cliente, OP, SituacaoOP, Atraso_SN, PrevisaoFeita,

                    PrazoIniciar, NotaFiscal,TerminoRealOP, Status, DescStatus;

                  SQL Select * from vw_PrazoEntregaOP;

                   

                  /* OPs em aberto */

                  LOAD Ordem, DataAbertura, Usuario, UltimaAlteracao, Atraso_Aberto, MedVidOp;

                   

                  SQL Select

                    oi.Ordem, o.DataAbertura, o.Usuario, o.Data as UltimaAlteracao,

                    (DATEDIFF(Day, o.DataAbertura, o.Data)) as MedVidOp,

                    (DATEDIFF(Day, o.Termino, GedDate()) as  Atraso_Aberto

                  from OrdemItens oi, OrdemProducao o

                  Where

                    o.Fechada = 0 and

                    o.Cancelada = 0 and

                    o.Concluida = 0 and

                    oi.Ordem = o.Numero;

                   

                   

                  Obrigado pela ajuda pessoal, problema resolvido!