10 Replies Latest reply: Aug 13, 2014 10:24 AM by ANDRE TONINI RSS

    Fluxo de Caixa - Saldo Acumulado

    ANDRE TONINI

      Boa tarde,    


                Pessoal, estou precisando de uma ajuda em um fluxo de caixa onde os saldos são compostos pelo Saldo Anterior + Entradas - Saídas = Saldo Final, porém se eu filtrar uma determinada data o saldo anterior busca sempre o saldo que fixei no script e não busca o saldo anterior a data que filtrei. Existe uma forma de deixar acumulado esse valor para que o saldo anterior não busque o valor original dele lá do script?

      LOAD * INLINE [

        BCC_CODIGO, SALDO_INICIAL

        11, 1620,00

      ];


      Segue abaixo script.

      Extrato Marcando 3 dias-OK.jpgExtrato Marcando 1 dia-Errado.png

      LOAD * INLINE [

        BCC_CODIGO, SALDO_INICIAL

        11, 1620,00

      ];

       

       

      //--- Bancos Movimentos ---//

      // ---- PEDIDO DE VENDA ---- //

      LOAD *,   

          YEAR(BCI_DATA) AS ANO,

          MONTH(BCI_DATA) AS MES,

          DAY(BCI_DATA) AS DIA,   

          DATE(BCI_DATA) AS DATA,   

          WEEK(BCI_DATA) AS SEMANA,   

          WEEKDAY(BCI_DATA) AS DIA_SEMANA;

       

       

      SQL SELECT

        BCI_CON_CODIGO AS BCC_CODIGO,

          BCI_COMPLEMENTO,

        BCI_VALOR,

        BCI_REGISTRO,

        BCI_DC,

        // ENTRADA

          CASE

                 WHEN BCI_DC = '1'

                 THEN (BCI_VALOR)

                 ELSE

                    0

                 END

                 AS VALOR_ENTRADA,

        // SAIDA

          CASE

                 WHEN BCI_DC = '-1'

                 THEN (BCI_VALOR)

                 ELSE

                    0

                 END

                 AS VALOR_SAIDA,

                 BCI_DATA

      FROM BANCOS_MOVIMENTOS_ITENS WHERE BCI_DATA > '31.01.2014';

       

       

      //--- Bancos / Contas ---//

      SQL SELECT

        BCC_NUMERO,

        BCC_CODIGO

      FROM BANCOS_CONTAS;

       

       

      LOAD * INLINE [

      BCC_CODIGO,BCC_NUMERO,Nome_Conta

      11,11000,Banco Brasil 11000-0

      ];

        • Re: Fluxo de Caixa - Saldo Acumulado
          Aderlan Rodrigues

          Olá André, tudo bem?

           

          Você precisa fazer a "ligação" entre essas informações.

           

          Observe que no seu script você tem apenas o saldo, você precisa dizer quando foi esse saldo, logo, ao escolher a data aparecerá o valor correspondente.

           

          Abraço.

            • Re: Re: Fluxo de Caixa - Saldo Acumulado
              ANDRE TONINI

              Oi Aderlan, td ótimo e vc?

               

                      Certo, realmente não fiz a ligação entre a data e saldo inicial LOAD * INLINE, porém se Eu definir a data desse saldo inicial a expressão que tenho como SD. INICIAL não funciona.

              If(IsNull(Above(Sum(VALOR_ENTRADA - VALOR_SAIDA))),

                    SALDO_INICIAL,

                      Above([SALDO DIA]))

               

                      Anexo postei o .qvw se puder me dar uma nova dica lhe agradeço muito.

               

                    Um abraço

               

                    André Tonini

                • Re: Re: Fluxo de Caixa - Saldo Acumulado
                  Felipe Dutra

                  André,

                  teste se estas expressões te atendem:

                   

                  //SD. INICIAL

                  If(BCC_CODIGO <> Above(BCC_CODIGO),

                        SALDO_INICIAL + If(DATA = Min({1}TOTAL <BCC_CODIGO> DATA), 0, Sum({$<DATA={"<$(=Max(DATA))"}>}TOTAL <BCC_CODIGO> VALOR_ENTRADA - VALOR_SAIDA)),

                        Rangesum(Above([SD. INICIAL]), Above(Sum(VALOR_ENTRADA - VALOR_SAIDA)))

                  )

                   

                   

                  //SALDO DIA

                  Sum(VALOR_ENTRADA - VALOR_SAIDA) + [SD. INICIAL]

                   

                  Abs,

                  Felipe

                  • Re: Re: Re: Fluxo de Caixa - Saldo Acumulado
                    Aderlan Rodrigues

                    Olá André,

                     

                    Talvez a dica do Felipe funcione, mas na minha opinião, você precisa acertar o modelo antes de tentar qualquer expressão.

                     

                    No arquivo que você anexou, a ligação está sendo feita somente pelo codigo, você precisa "dizer" em que dia aquele saldo inicial, então, ao escolher o dia diferente daquele o valor na coluna "saldo inicial" será diferente, talvez zero.

                    Então, a partir dai, entra os cálculos, seja no script (recomendado) ou no objeto.

                     

                    Exemplo:

                    LOAD CO,
                        DA,
                        (NumSum(SI, peek('SI'))+EN)-SA as SI,
                        EN,
                        SA;
                    LOAD * INLINE [
                    CO,DA,SI,EN,SA
                    11,1/6/14,1600,0,0
                    11,2/6/14,,10,0
                    11,3/6/14,,0,20];
                    
                    

                     

                    CO DA SI EN SA
                    111/6/14160000
                    112/6/141610100
                    113/6/141590020

                     

                    Abraço.

                      • Re: Re: Re: Re: Fluxo de Caixa - Saldo Acumulado
                        ANDRE TONINI

                        Bom dia Aderlan, td bem?

                         

                        Acabei precisando deixar de lado esse assunto do Extrato, por alguns dias, mas agora essa semana pretendo solucionar.
                        Realmente estou "apanhando" para conseguir filtrar determinada data em que apresente o saldo inicial (que é o saldo final do último dia) + entrada - saída = saldo final do dia.

                        Acredito que seja a forma como estou tratando a minha expressão o problema.
                        1) No mês de fevereiro defini um saldo inicial correspondente ao dia desse saldo.
                        1 Filtro Mês Fevereiro.jpg

                         

                        2) Agora se eu tentar utilizar o calendário acima, para saber o saldo do dia 25/02/2014 por exemplo ele aparece como saldo inicial zero.

                        25022014.jpg

                         

                        3) Se eu tentar filtrar o mês de março/2014 no calendário acima não está buscando o saldo final como saldo, para 03/2014.
                        SALDO_MES.jpg

                         

                        Caso possa me ajudar desde já agradeço, pois com certeza é alguma falha que estou cometendo e não sei atualmente como resolver!

                         

                        Anexo segue .qvw caso seja útil.

                         

                        Abraço,

                         

                        André Tonini

                          • Re: Re: Re: Re: Fluxo de Caixa - Saldo Acumulado
                            Aderlan Rodrigues

                            Fala André, tudo bem, graças a Deus.

                             

                            Então, o teu modelo de dados está com problema, tem muita chave sintética, isso pode lhe atrapalhar, convém eliminar essas chaves em primeiro lugar, isso resultará em uma tabela onde você poderá trabalhar os dados com o comando resident, com o exemplo que passei a cima.

                             

                            Observe que quando usa os comandos no objeto, faz com que os cálculos fique responsivo aos filtros, nesse caso, é interessante que os cálculos sejam feitos no script, para quando usar os filtros, o resultado seja o mesmo.

                             

                            Abraço.

                    • Re: Fluxo de Caixa - Saldo Acumulado
                      Pablo Labbe

                      Olá André,

                       

                        Sua demanda é o caso clássico em que se calcula o saldo inicial no script e não no layout. Sugiro você dar uma olhada neste outro post  Razão Contábil que vai te dar uma idéia de como calcular o saldo em script.

                       

                      Abraço,

                       

                      pablolabbe

                        • Re: Fluxo de Caixa - Saldo Acumulado
                          ANDRE TONINI

                          Olá Pablo, tudo bem?
                          Segui sua orientação, porém não sei se entendi - como segue abaixo o script, mas ao carregar ocorre um erro de que coloca que existe nome de campos iguais, mas não identifiquei no LOAD * INLINE campos com mesma descrição!

                          erro_carga.png

                           

                           

                           

                          SET ThousandSep='.';

                          SET DecimalSep=',';

                          SET MoneyThousandSep='.';

                          SET MoneyDecimalSep=',';

                          SET MoneyFormat='R$ #.##0,00;-R$ #.##0,00';

                          SET TimeFormat='hh:mm:ss';

                          SET DateFormat='DD/MM/YYYY';

                          SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';

                          SET MonthNames='jan;fev;mar;abr;mai;jun;jul;ago;set;out;nov;dez';

                          SET DayNames='seg;ter;qua;qui;sex;sáb;dom';

                           

                          ODBC CONNECT TO Microsys;

                           

                          //--- Bancos Movimentos ---//

                          LOAD *,   

                              YEAR(BCI_DATA) AS ANO,

                              MONTH(BCI_DATA) AS MES,

                              DAY(BCI_DATA) AS DIA,   

                              DATE(BCI_DATA) AS DATA,   

                              WEEK(BCI_DATA) AS SEMANA,   

                              WEEKDAY(BCI_DATA) AS DIA_SEMANA;

                           

                          SQL SELECT

                            BCI_CON_CODIGO AS BCC_CODIGO,

                              BCI_COMPLEMENTO,

                            BCI_VALOR,

                            BCI_REGISTRO,

                            BCI_DC,

                            // ENTRADA

                              CASE

                                     WHEN BCI_DC = '1'

                                     THEN (BCI_VALOR)

                                     ELSE

                                        0

                                     END

                                     AS VALOR_ENTRADA,

                            // SAIDA

                              CASE

                                     WHEN BCI_DC = '-1'

                                     THEN (BCI_VALOR)

                                     ELSE

                                        0

                                     END

                                     AS VALOR_SAIDA,

                                     BCI_DATA

                          FROM BANCOS_MOVIMENTOS_ITENS WHERE BCI_DATA > '31.01.2014';

                           

                           

                          //--- Bancos / Contas ---//

                          SQL SELECT

                            BCC_NUMERO,

                            BCC_CODIGO

                          FROM BANCOS_CONTAS;

                           

                          // ---- Saldo Inicial ---- //

                          LOAD *, [SALDO_INICIAL]-VALOR_ENTRADA+VALOR_SAIDA+alt(peek('Saldo Atual'),0) as 'Saldo Atual';

                          LOAD *, if(isnull(previous([SALDO_ANTERIOR])),[SALDO_ANTERIOR],0) AS [SALDO_INICIAL];

                           

                          LOAD * INLINE [

                          BCC_CODIGO,BCC_NUMERO,Nome_Conta          ,SALDO_INICIAL,SALDO_ANTERIOR, VALOR_ENTRADA, VALOR_SAIDA, BCI_DATA

                          11        ,11000     ,Banco Brasil 11000-0,'1.620,53'   , '0,00'       , '0,02'       , '0,01'      ,'04/02/2014 00:00:00'

                          ];

                        • Re: Fluxo de Caixa - Saldo Acumulado
                          Pablo Labbe

                          André,

                           

                          O problema está aqui

                           

                          // ---- Saldo Inicial ---- //

                          3º  LOAD *, [SALDO_INICIAL]-VALOR_ENTRADA+VALOR_SAIDA+alt(peek('Saldo Atual'),0) as 'Saldo Atual';

                          2º LOAD *, if(isnull(previous([SALDO_ANTERIOR])),[SALDO_ANTERIOR],0) AS [SALDO_INICIAL];

                           

                          1º LOAD * INLINE [

                          BCC_CODIGO,BCC_NUMERO,Nome_Conta          ,SALDO_INICIAL,SALDO_ANTERIOR, VALOR_ENTRADA, VALOR_SAIDA, BCI_DATA

                          11        ,11000     ,Banco Brasil 11000-0,'1.620,53'   , '0,00'       , '0,02'       , '0,01'      ,'04/02/2014 00:00:00'

                          ];

                           

                          No 2º load você criou um novo campo e está usando o * trazendo todos os campos do load anterior inclusive o campo original que tem o mesmo nome.

                           

                          Sugiro fazer o seguinte ajuste para resolver o problema de execução do script:

                           

                          3º  LOAD *, [SALDO_INICIAL_AJUSTADO]-VALOR_ENTRADA+VALOR_SAIDA+alt(peek('Saldo Atual'),0) as 'Saldo Atual';

                          2º LOAD *, if(isnull(previous([SALDO_ANTERIOR])),[SALDO_ANTERIOR],0) AS [SALDO_INICIAL_AJUSTADO];

                           

                          1º LOAD * INLINE [

                          BCC_CODIGO,BCC_NUMERO,Nome_Conta          ,SALDO_INICIAL,SALDO_ANTERIOR, VALOR_ENTRADA, VALOR_SAIDA, BCI_DATA

                          11        ,11000     ,Banco Brasil 11000-0,'1.620,53'   , '0,00'       , '0,02'       , '0,01'      ,'04/02/2014 00:00:00'

                          ];

                           

                          Abraço,

                           

                          pablolabbe