5 Replies Latest reply: Mar 22, 2017 4:12 PM by MARIO SOARES RSS

    Criar registros diários

    Douglas Schmitt

      Tenho a tabela a seguir mas preciso criar um QVD histórico para saber se em determinado dia o título (ChaveTitulo) estava inadimplente ou não.

      O problema é que teria que criar dia a dia a partir da DataEmissao um registro até a data de hoje ou até que o Saldo ficasse 0.

         

      ChaveTituloDataEmissaoDataVencimentoDataMovimentacaoValorMovimentacaoAcumulado Valor MovValor Original TituloSaldo
      111AAA01/01/201610/01/201604/01/20162000200030001000
      111AAA01/01/201610/01/201607/01/201610021003000900
      222BBB05/02/201722/02/201720/02/20175005001000500
      222BBB05/02/201722/02/201722/02/20172507501000250
      222BBB05/02/201722/02/201724/02/2017250100010000

       

      Por exemplo:

      Título 111AAA teve seu último pagamento em 07/01/2016, então assim que passou o vencimento em 10/01/2016 deveria criar um registro por dia (até hoje ou até ficar com saldo 0) informando que o titulo está inadimplente e o saldo devedor.

      Título 222BBB deveria criar um registro somente do dia 23/02/17 que foi o dia que ficou inadimplente.

       

       

      É viável fazer esta criação diária ? Alguma ideia de como fazer o código ?

        • Re: Criar registros diários
          MARIO SOARES

          Amigo, segue;

           

          temp_Extrato:
          //Preenchendo_Intervalos_Datas
          LOAD
            ChaveTitulo,  DataEmissao,  DataVencimento,  TotalValorMovimentacao,
            [Valor Original Titulo], 
            IterNo() As 'Dia', 
            Date(DataEmissao + IterNo() - 1,'DD/MM/YYYY') As 'Data'
          While DataEmissao + IterNo() - 1 <= If(MaxDataMov<=DataVencimento, DataVencimento,
            If(TotalValorMovimentacao<[Valor Original Titulo], Today(), MaxDataMov));
          //Agrupamento
          LOAD
            ChaveTitulo,
            Only(DataEmissao) As 'DataEmissao',
            Only(DataVencimento) As 'DataVencimento',
            Max(DataMovimentacao) As 'MaxDataMov',
            Sum(ValorMovimentacao) As 'TotalValorMovimentacao',
            Only([Valor Original Titulo]) As [Valor Original Titulo]
          Group By ChaveTitulo;
          //Dados da fonte
          LOAD ChaveTitulo, DataEmissao, DataVencimento, DataMovimentacao, ValorMovimentacao, [Valor Original Titulo]
          FROM [lib://QLIK_SUPORTE/SUATABELA.QVD];
          
          Left Join (temp_Extrato)
          //Dados da fonte
          Load
            ChaveTitulo,
            DataMovimentacao As Data,
            ValorMovimentacao;
          LOAD ChaveTitulo, DataMovimentacao, ValorMovimentacao
          FROM [lib://QLIK_SUPORTE/SUATABELA.QVD];
          
          Tab_MovimentacaoDiaria:
          NoConcatenate Load
            ChaveTitulo,
            DataEmissao,
            DataVencimento,
            TotalValorMovimentacao,
            [Valor Original Titulo],
            Dia,
            Data,
            ValorMovimentacao,
            Rangesum(
                If(ChaveTitulo = Previous(ChaveTitulo),
                rangesum(ValorMovimentacao, Peek(ValorMovAcumulado))
                  , ValorMovimentacao)
            ) As 'ValorMovAcumulado',
          
            [Valor Original Titulo]-Rangesum(
                If(ChaveTitulo = Previous(ChaveTitulo),
                Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado))
                  , ValorMovimentacao)
            ) As 'SaldoDevedor',
               
            If(
                Rangesum(
                    if(ChaveTitulo = Previous(ChaveTitulo),
                        Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado))
                    , ValorMovimentacao)
                )
                  < [Valor Original Titulo],
              'Devedor',
              'Não Devedor'
            ) As 'SituacaoCliente'  
          Resident temp_Extrato Order By ChaveTitulo, Data Asc;
          
          Drop Table temp_Extrato;
          
          
          

           

          Substitua FROM [lib://QLIK_SUPORTE/SUATABELA.QVD] para o endereço correto dos dados.

            • Re: Criar registros diários
              Douglas Schmitt

              Mario,

               

              Obrigado pela ajuda, mas não funcionou.

               

              Peguei um título que o vencimento foi 18/01/2015 e ele teve 3 movimentações:

              20/01/2015 = 1.000

              22/01/2015 = 385,85

              22/01/2015 = 1656

               

              2017-03-22 - 001.png

               

              O valor do título é 2270,15 e a soma dos valores de movimentação da o total de 3041,85. Ou seja, no dia 22/01 o valor ultrapassou o valor do título, sendo assim está quitado.

               

              Neste exemplo o script deveria criar as seguintes linhas:

               

              DATA           MOVIMENTACAO      SALDO      SITUAÇÃO

              19/01/2015     0                               2270,15      Devedor

              20/01/2015     1.000                        1270,15       Devedor

              21/01/2015      0                              1270,15      Devedor

               

              A linha do dia 22/01 não é preciso criar pois o saldo fica menor que 0 (-771,70), assim informando que o cliente já pagou mais do que o valor total da fatura.

                • Re: Criar registros diários
                  MARIO SOARES

                  Amigo, algo errado no resultado do seu Left Join (temp_Extrato)

                  Fiz um teste aqui e deu certo, veja só

                   

                  temp_Extrato:
                  //Preenchendo_Intervalos_Datas
                  LOAD
                    ChaveTitulo,  DataEmissao,  DataVencimento,  TotalValorMovimentacao,
                    [Valor Original Titulo],
                    IterNo() As 'Dia',
                    Date(DataEmissao + IterNo() - 1,'DD/MM/YYYY') As 'Data'
                  While DataEmissao + IterNo() - 1 <= If(MaxDataMov<=DataVencimento, DataVencimento,
                    If(TotalValorMovimentacao<[Valor Original Titulo], Today(), MaxDataMov));
                  //Agrupamento
                  LOAD
                    ChaveTitulo,
                    Only(DataEmissao) As 'DataEmissao',
                    Only(DataVencimento) As 'DataVencimento',
                    Max(DataMovimentacao) As 'MaxDataMov',
                    Sum(ValorMovimentacao) As 'TotalValorMovimentacao',
                    Only([Valor Original Titulo]) As [Valor Original Titulo]
                  Group By ChaveTitulo;
                  //Dados da fonte
                  LOAD * Inline [
                  ChaveTitulo DataEmissao DataVencimento DataMovimentacao ValorMovimentacao 'Valor Original Titulo'
                  111AAA 18/03/2017 20/03/2017 19/03/2017 2000 3000
                  111AAA 18/03/2017 20/03/2017 21/03/2017 100 3000
                  222BBB 18/03/2017 20/03/2017 18/03/2017 500 750
                  222BBB 18/03/2017 20/03/2017 19/03/2017 250 750
                  333CCC 18/03/2017 20/03/2017 19/03/2017 500 1000
                  333CCC 18/03/2017 20/03/2017 20/03/2017 250 1000
                  333CCC 18/03/2017 20/03/2017 21/03/2017 250 1000
                  444DDD 18/03/2017 20/03/2017 19/03/2017 500 1000
                  444DDD 18/03/2017 20/03/2017 20/03/2017 250 1000
                  444DDD 18/03/2017 20/03/2017 21/03/2017 100 1000
                  ] (Delimiter Is ' ');
                  
                  
                  Left Join (temp_Extrato)
                  //Dados da fonte
                  Load
                    ChaveTitulo,
                    DataMovimentacao As Data,
                    ValorMovimentacao;
                  LOAD * Inline [
                  ChaveTitulo DataMovimentacao ValorMovimentacao
                  111AAA 19/03/2017 2000
                  111AAA 21/03/2017 100
                  222BBB 18/03/2017 500
                  222BBB 19/03/2017 250
                  333CCC 19/03/2017 500
                  333CCC 20/03/2017 250
                  333CCC 21/03/2017 250
                  444DDD 19/03/2017 500
                  444DDD 20/03/2017 250
                  444DDD 21/03/2017 100
                  ] (Delimiter Is ' ');
                  
                  
                  Tab_MovimentacaoDiaria:
                  NoConcatenate Load
                    ChaveTitulo,
                    DataEmissao,
                    DataVencimento,
                    TotalValorMovimentacao,
                    [Valor Original Titulo],
                    Dia,
                    Data,
                    ValorMovimentacao,
                    Rangesum(
                        If(ChaveTitulo = Previous(ChaveTitulo),
                        rangesum(ValorMovimentacao, Peek(ValorMovAcumulado))
                          , ValorMovimentacao)
                    ) As 'ValorMovAcumulado',
                  
                    [Valor Original Titulo]-Rangesum(
                        If(ChaveTitulo = Previous(ChaveTitulo),
                        Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado))
                          , ValorMovimentacao)
                    ) As 'SaldoDevedor',
                      
                    If(
                        Rangesum(
                            if(ChaveTitulo = Previous(ChaveTitulo),
                                Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado))
                            , ValorMovimentacao)
                        )
                          < [Valor Original Titulo],
                      'Devedor',
                      'Não Devedor'
                    ) As 'SituacaoCliente'    
                  Resident temp_Extrato Order By ChaveTitulo, Data Asc;
                  
                  Drop Table temp_Extrato;
                  
                  

                   

                  Você modificou algo a mais do que o endereço dos dados?