5 Replies Latest reply: Aug 29, 2013 8:05 AM by Raphael Pacheco RSS

    Ajuda em Relatório

    Raphael Pacheco

      Boa tarde a todos.

      Tenho uma situação onde estou desenvolvendo um script para calcular a inadimplência da empresa onde trabalho.

      A regra que tínhamos era calcular a faixa da inadimplência pelos dias de atraso onde era só pegar a data atual - a data de vencimento que chagava aos dias em atraso.

      O problema é que agora a regra mudou. Ela não será mais pela faixa de dias em atraso, mas sim pelo mês. Ou seja, os títulos vencidos do dia 1 a 31 de agosto serão considerados para a faixa de 30 dias na inadimplência de Setembro.

      Bom, tentei fazer uma faixa pegando o valor do mês base - o mês do vencimento, mas não dá certo quando temos as passagens de anos.

      Como posso implementar isso?

      Alguém já passou por uma situação parecida?

       

      Abraços!

        • Re: Ajuda em Relatório
          Yuri Nicolett

          Utilize uma data no formato de Mês + Ano (MMM/YYYY), desta forma você não terá esse problema na mudança de ano.

            • Re: Ajuda em Relatório
              Raphael Pacheco

              Já usei essa data formatada, mas não deu certo, pois o que precisava é trazer uma faixa entre os meses e não para os dias.

              Tentei utilizando as funções num() e month() para me retornar apenas o valor numeral do mês, mas quando há mudança de anos ele se perde, pois está vendo apenas meses e não os anos.

              A solução que achei foi incluir a função MonthStart() , pois assim tenho como calcular a faixa de dias de um determinado mês.

              Exemplo:

              Criei uma variável com a data de hoje -1 chamada DATA_BASE_CRC

              Aí fiz uma sequêcia de ifs

               

              If(MonthStart($(#DATA_BASE_CRC)) <= AddMonths(MonthStart(DTVENCTO),0),
              'A VENCER', ...

              Aí só fui adicionando valores no AddMonths para pegar as faixas entre os meses

              Obrigado pela atenção Yuri.

                • Re: Ajuda em Relatório

                  Boa tarde Raphael,

                   

                  Você pode utilizar a seguinte lógica:

                   

                  Vencimento em 05/12/2013 e a data atual é 10/01/2014.

                   

                  Vcto: 05/12/2013

                  Atual: 10/01/2014

                   

                  Inicialmente pegue a diferença dos anos e dos meses:

                   

                  Ano Atual - Ano Vcto: 2014 - 2013 = 1

                   

                  Depois a diferença entre os meses:

                   

                  Mes Atual - Mes Vcto: 01 - 12 = -11

                   

                  A regra utilizada é baseada na fórmula

                   

                  (RESULTADO ANO * 12) + RESULTADO MES

                   

                  Ficaria:

                   

                  (1 * 12) + (-11) = 1

                   

                  A diferença de meses ficaria 1. Pelo o que entendi funcionaria no seu caso.

                   

                  Abraços

              • Re: Ajuda em Relatório

                Bom dia.

                 

                Nesse caso não teria como pegar a diferença e jogar em dias, depois converter os dias em meses ? Acredito que dessa forma ele não iria se perder na hora de virar o ano.

                 

                Att.

                 

                Carlos.

                  • Re: Re: Ajuda em Relatório
                    Raphael Pacheco

                    Bom dia Carlos.

                    Como eu preciso das faixas de inadimplência por meses e não por dias eu fiz da seguinte maneira:

                     

                    If(IsNum(DTVENCTO), If(MonthStart($(#DATA_BASE_CRC)) <= AddMonths(MonthStart(DTVENCTO),0),

                           'A VENCER',

                            If(MonthStart($(#DATA_BASE_CRC)) = AddMonths(MonthStart(DTVENCTO),1),

                             '30 DIAS',

                              If(MonthStart($(#DATA_BASE_CRC)) = AddMonths(MonthStart(DTVENCTO),2),

                              '60 DIAS',

                               If(MonthStart($(#DATA_BASE_CRC)) = AddMonths(MonthStart(DTVENCTO),3),

                               '90 DIAS',

                                If(MonthStart($(#DATA_BASE_CRC)) = AddMonths(MonthStart(DTVENCTO),4),

                                '120 DIAS',

                                 If(MonthStart($(#DATA_BASE_CRC)) = AddMonths(MonthStart(DTVENCTO),5),

                                 '150 DIAS',

                                  If(MonthStart($(#DATA_BASE_CRC)) = AddMonths(MonthStart(DTVENCTO),6),

                                  '180 DIAS',

                                   If(MonthStart($(#DATA_BASE_CRC)) <= AddMonths(MonthStart(DTVENCTO),7),

                                   'PERDA NO MES',

                                    If(MonthStart($(#DATA_BASE_CRC)) >= AddMonths(MonthStart(DTVENCTO),1),

                                    'PERDA',

                                    )

                                   )

                                  )

                                 )

                                )

                               )

                              )

                             )

                            )

                    ,DTVENCTO

                    )

                                  as [Faixa de Inadimplência],

                     

                    Primeiro verifico se a data de vencimento me retorna um número, pois em uma etapa anterior do script eu verifico se o vencimento caiu em um final de semana e se foi no último dia do mês, sendo assim estes registros não vem com valor numeral.

                    depois verifico as faixas de inadimplência.

                    Como a nossa inadimplência segue até a faixa de seis meses, o restante eu considero como perda do mês (180 a 210) e perda (acima de 210).