45 Replies Latest reply: Mar 30, 2017 8:25 AM by MARIO SOARES RSS

    Divergência de valores

    Douglas Schmitt

      Boa tarde,

       

      Estou com um problema que não estou conseguindo identificar o porque acontece.

       

      Tenho o código abaixo:

      [Estornos]:

      LOAD [Filial Tit. Movimentação Bancária]&'|'&[Prefixo Tit. Movimentação Bancária]&'|'&[Número Tit. Movimentação Bancária]&'|'&[Parcela Tit. Movimentação Bancária]&'|'&[Tipo Tit. Movimentação Bancária]&'|'&[Cliente/Fornecedor Tit. Movimentação Bancária]&'|'&[Loja Tit. Movimentação Bancária]&'|'&[Sequência Movimentação Bancária] as [ChaveEstornoFiltro]   

      FROM

      [E:\BI-PRD\4.Dados\Transformados\Fatos\FINAN_MovimentacaoBancaria.qvd] (qvd)

      Where [Cod. Tipo Movimentação Bancária] = 'ES';

       

      Tabela:

      LOAD

        *

      FROM

      [E:\BI-PRD\4.Dados\Transformados\Fatos\FINAN_MovimentacaoBancaria.qvd] (qvd)

      Where

        Not Exists ([ChaveEstornoFiltro],[Filial Tit. Movimentação Bancária]&'|'&[Prefixo Tit. Movimentação Bancária]&'|'&[Número Tit. Movimentação Bancária]&'|'&[Parcela Tit. Movimentação Bancária]&'|'&[Tipo Tit. Movimentação Bancária]&'|'&[Cliente/Fornecedor Tit. Movimentação Bancária]&'|'&[Loja Tit. Movimentação Bancária]&'|'&[Sequência Movimentação Bancária])

       

      Drop Table Estornos;

       

      A ideia deste código é pegar todos os estornos e depois excluir da Tabela quem tem essa Chave (que possui estorno).

      Ao rodar apenas esta parte do código, tudo funciona.

       

      E depois tenho um código que pega e cria registros até o saldo ser zerado ou até hoje. (Através deste tópico: Re: Criar registros diários)

       

      O problema está que se uso este "Not Exists" o resultado é esse:

      2017-03-28 - 001.png

      A coluna "teste" é o cálculo ValorLiquidoTitulo - TotalValorMovimentacao, mas como 470,67 - 470,67 resulta em 5,6843418860808e-014 ??


      Mas se eu remover a parte do Not Exists da Tabela, tudo funciona normal: (Os valores de movimentação são diferentes pois sem o Not Exists ele está considerando estornos também)

      2017-03-28 - 002.png


      Alguém tem alguma ideia do que pode ser isto?

        • Re: Divergência de valores
          MARIO SOARES

          Amigo, tente;

          Expressão para o campo teste:

          Column(1)-Column(2)
          
            • Re: Divergência de valores
              Douglas Schmitt

              Mario,

              O problema está no script mesmo, porque lembra que você me ajudou a criar no outro tópico? Então o campo SaldoDevedor fica mostrando 5,6843418860808e-014 e criando registros até hoje e não parando quando o saldo é 0, pois segundo ele 470,67 - 470,67 não é 0 haha

                • Re: Divergência de valores
                  Fábio Nakashigue

                  Douglas tem como postar um exemplo?

                  Não entendi muito bem pq você está fazendo esta estrutura do not exists.

                    • Re: Divergência de valores
                      Douglas Schmitt

                      Faço o Not Exists porque quando tem um título estornado, na tabela ficam 2 registros iguais só que apenas um tem o Tipo Movimentação = 'ES', mas preciso apagar os 2.

                       

                      Exemplo:

                       

                      Chave          Valor          Receb/Pag     Tipo

                      ChaveA1     200             Recebimento     NOR

                      ChaveA1     200             Pagamento        ES

                      ChaveA2     400             Recebimento     MOT

                      ChaveA3     100             Recebimento     NOR


                      Neste caso, preciso excluir os 2 registros que tenham a "ChaveA1".

                    • Re: Divergência de valores
                      MARIO SOARES

                      Amigo, estranho sua expressão da coluna "teste" ter apresentado este resultado;

                      Haja vista que as colunas dos cálculos apresentados na tabela estão ok;

                      Favor, não deixe de testar a expressão que te falei, me retorna com o resultado;

                      A função Collumn() utiliza o que é apresentado na tabela no seu caso, os números interno da função é a ordem das expressão;

                      Se as colunas ValorLiquidoTitulo e TotalValorMovimentacao não está como expressões, transforma-os;


                      Esta com problemas com o script que havia te passado? Ou ficou após ter incluido o seu script com Not Exists()?


                       

                        • Re: Divergência de valores
                          Fábio Nakashigue

                          Mario,

                           

                          Acredito que o problema dele não seja nada relacionado ao exists. E sim a casas decimais, no caso funciona sem o exists pq ele busca a tabela completa com tabela de estornos, pois o valor no segundo caso o campo totalvalormovimentacao vai para 1412. Poderiamos fazer um teste com floor no script.

                            • Re: Divergência de valores
                              MARIO SOARES

                              Por padrão, vejo que quando formatado os campos numéricos, se necessário, o sistema arredonda os campos decimais no tipo round(); *Pelo menos no Qlik Sense, creio que o mesmo para Qlikview.

                              Mas a questão é que no resultado do campo "teste" temos 5,68... Ou seja, uma diferença considerável para ser por conta de arredondamento das casas decimais.

                            • Re: Divergência de valores
                              Douglas Schmitt

                              É que o problema não ficou apenas na tabela, depois do Not Exists ele "bagunçou" o script:

                              2017-03-28 - 003.png

                              Quando ele deveria zerar o saldo, começou a colocar aquele valor 5,6843418860808e-014.

                                • Re: Divergência de valores
                                  MARIO SOARES

                                  Após inclusão do seu script... Foi gerado uma chave sintética?

                                  • Re: Divergência de valores
                                    MARIO SOARES

                                    Pode publicar seu script?

                                      • Re: Divergência de valores
                                        Douglas Schmitt

                                        Não gerou chave sintética.

                                        Segue em anexo o script.

                                          • Re: Divergência de valores
                                            MARIO SOARES

                                            Amigo;

                                             

                                            Percebi que no script que havia feito para você;

                                            Faltou você manter a fonte de dados da tabela "temp_Extrato" e do Left Join (temp_Extrato) iguais;

                                             

                                            Então, segue para substituir;

                                             

                                            Left Join (temp_Extrato)  
                                            //Dados da fonte  
                                            NoConcatenate Load  
                                              ChaveTitulo,  
                                              DataMovimentacao As Data,  
                                              ValorMovimentacao;  
                                            LOAD   
                                            ChaveTitulo, DataMovimentacao, ValorMovimentacao  
                                            Resident PreviaTitulosInadimplentes
                                            Where ChaveTitulo = 'MVN|003498|FT|   |01|050813'; 
                                            
                                            DROP TABLE PreviaTitulosInadimplentes;  
                                            

                                             

                                            A fonte de dados para a tabela "temp_Extrado" você utilizou a tabela PreviaTitulosInadimplentes utilizando Residente, e onde encontrei os filtros faltantes. Incluir o Resident no Left Join também para manter a mesma estrutura de dados e remanejei o DROP TABLE PreviaTitulosInadimplentes para após o Left Join.

                                             

                                            Sobre o Exists;

                                            Percebi que é criado tabelas "Estornos" e "Tabela", e excluído em seguida, sem utilização no script,

                                            Mas o filtro poderia ser feito assim:

                                             

                                            //De, ORIGINAL:

                                            [Estornos]:
                                            LOAD [Filial Tit. Movimentação Bancária]&'|'&[Prefixo Tit. Movimentação Bancária]&'|'&[Número Tit. Movimentação Bancária]&'|'&[Parcela Tit. Movimentação Bancária]&'|'&[Tipo Tit. Movimentação Bancária]&'|'&[Cliente/Fornecedor Tit. Movimentação Bancária]&'|'&[Loja Tit. Movimentação Bancária]&'|'&[Sequência Movimentação Bancária] as [ChaveEstornoFiltro]   
                                            FROM
                                            [E:\BI-PRD\4.Dados\Transformados\Fatos\FINAN_MovimentacaoBancaria.qvd] (qvd)
                                            Where [Cod. Tipo Movimentação Bancária] = 'ES';
                                            
                                            Tabela:
                                            LOAD
                                              *
                                            FROM
                                            [E:\BI-PRD\4.Dados\Transformados\Fatos\FINAN_MovimentacaoBancaria.qvd] (qvd)
                                            Where
                                              Not Exists ([ChaveEstornoFiltro],[Filial Tit. Movimentação Bancária]&'|'&[Prefixo Tit. Movimentação Bancária]&'|'&[Número Tit. Movimentação Bancária]&'|'&[Parcela Tit. Movimentação Bancária]&'|'&[Tipo Tit. Movimentação Bancária]&'|'&[Cliente/Fornecedor Tit. Movimentação Bancária]&'|'&[Loja Tit. Movimentação Bancária]&'|'&[Sequência Movimentação Bancária]); 
                                            

                                             

                                            //Para:

                                             

                                            Tabela:
                                            LOAD * FROM [E:\BI-PRD\4.Dados\Transformados\Fatos\FINAN_MovimentacaoBancaria.qvd] (qvd)
                                              Where [Cod. Tipo Movimentação Bancária] <> 'ES';
                                            

                                             

                                            Mas não encontrei utilidade com o restante do script;

                                              • Re: Divergência de valores
                                                Douglas Schmitt

                                                É que estava dando um exit script logo depois do Drop Table PreviaTitulosInadimplentes, então nem chegava a rodar o left join, pois assim ele já mostra o valor errado (5,6843418860808e-014) e nao 0.

                                                 

                                                Sobre o filtro, faço daquela maneira pois como expliquei mais acima, tenho a seguinte situação:

                                                Chave          Valor          Receb/Pag     Tipo

                                                ChaveA1     200             Recebimento     NOR

                                                ChaveA1     200             Pagamento        ES

                                                ChaveA2     400             Recebimento     MOT

                                                ChaveA3     100             Recebimento     NOR


                                                Neste caso, preciso excluir os 2 registros que tenham a "ChaveA1".

                                                E com teu código vou excluir apenas quem tem o Tipo 'ES' e o primeiro registro, que a chave é a mesma vai permanecer.

                                                  • Re: Divergência de valores
                                                    MARIO SOARES

                                                    O script não está finalizando com sucesso? Toda a estrutura?

                                                    Tenta da forma que coloquei, pois inclui NoConcatenate logo depois do Left Join;

                                                    Se não rodar o Left Join corretamente, certamente dará erro;

                                                    • Re: Divergência de valores
                                                      MARIO SOARES

                                                      Mas na sua lógica, as tabelas "Estornos" e "Tabela" não estão conversando com o restante da estrutura;


                                                      O que defini exatamente a regra para excluir os registros? Para podermos criar um algorítimo necessário para atender os critérios.

                                                        • Re: Divergência de valores
                                                          Douglas Schmitt

                                                          Rodei seu teste sem o exit script e deu o seguinte erro:

                                                           

                                                          Combinação de prefixos inválida

                                                          Left Join (temp_Extrato) 

                                                           

                                                          NoConcatenate

                                                          Load 

                                                            ChaveTitulo, 

                                                            DataMovimentacao As Data, 

                                                            ValorMovimentacao

                                                           

                                                          Sobre estornos e a tabela, realmente, depois de tantos testes que fiz, neste que postei esqueci de linkar haha

                                                          Mas a ideia é a seguinte:

                                                           

                                                          Criar a "Estornos" pra pegar e montar ChaveEstornoFiltro, com todos os registros do tipo "ES".

                                                          Após isto leio a tabela de movimentações, que chamei de "Tabela" onde estas chaves "ChaveEstornoFiltro" não existem, assim tenho uma tabela sem os estornos. E partir dessa tabela gostaria de utilizar a sua lógica para criação do histórico. Mas aparece este valor maluco no "SaldoDevedor"

                                                            • Re: Divergência de valores
                                                              MARIO SOARES

                                                              Amigo, vamos tratar este erro primeiro sem o Exists;

                                                              Segue script:

                                                              Obs.: Estou considerando suas seções Main 2 e Main;

                                                              Alterei algumas coisas.

                                                               

                                                              Main 2:

                                                               

                                                              $(Include=..\1.config\config_geral.txt);
                                                              
                                                              PreviaTitulosInadimplentes:
                                                              LOAD
                                                                ChaveTitulosReceber as 'ChaveTitulo',
                                                                [Data Emissão Título a Receber] as 'DataEmissao',
                                                                [Data Vencimento Título a Receber] as 'DataVencimento',
                                                                numsum(num([Valor Título a Receber]),num(-[Valor IRRF Título a Receber])) as 'ValorLiquidoTitulo'
                                                              FROM
                                                              [E:\BI-PRD\4.Dados\Transformados\Fatos\FINAN_TitulosReceber.qvd] (qvd)
                                                              Where Not Match([Tipo Título a Receber],'CF-','CS-','IR-','PI-','AB-')
                                                              And [Data Emissão Título a Receber] >= makedate($(vAnoFinan),01,01);
                                                              
                                                              Left Join(PreviaTitulosInadimplentes)
                                                              LOAD
                                                                ChaveTitulosReceber as 'ChaveTitulo',
                                                                [Data Movimentação Bancária] as 'DataMovimentacao',
                                                                sum([Valor Movimentação Bancária]) as 'ValorMovimentacao'
                                                              FROM
                                                              [E:\BI-PRD\4.Dados\Transformados\Fatos\FINAN_MovimentacaoBancariaSemEstorno.qvd] (qvd)
                                                              GROUP BY ChaveTitulosReceber, [Data Movimentação Bancária];
                                                              
                                                              

                                                               

                                                              Main:

                                                               

                                                              SET vTabelaTrf  = 'TitulosInadimplentes';
                                                              
                                                              temp_Extrato:
                                                              NoConcatenate
                                                              //Preenchendo_Intervalos_Datas 
                                                              LOAD 
                                                                ChaveTitulo,  DataEmissao,  DataVencimento,  TotalValorMovimentacao, 
                                                                [ValorLiquidoTitulo],
                                                                ValorLiquidoTitulo-TotalValorMovimentacao  as teste,
                                                                IterNo() As 'Dia', 
                                                                Date(DataEmissao + IterNo() - 1,'DD/MM/YYYY') As 'Data' 
                                                              While DataEmissao + IterNo() - 1 <= If(MaxDataMov<=DataVencimento, DataVencimento, 
                                                                If(TotalValorMovimentacao<ValorLiquidoTitulo, Today(), MaxDataMov)); 
                                                              //Agrupamento 
                                                              LOAD 
                                                                ChaveTitulo, 
                                                                Only(DataEmissao) As 'DataEmissao', 
                                                                Only(DataVencimento) As 'DataVencimento', 
                                                                Max(DataMovimentacao) As 'MaxDataMov', 
                                                                Sum(ValorMovimentacao) As 'TotalValorMovimentacao',
                                                                Only([ValorLiquidoTitulo]) As 'ValorLiquidoTitulo' 
                                                              Group By ChaveTitulo; 
                                                              //Dados da fonte 
                                                              LOAD 
                                                              ChaveTitulo, DataEmissao, DataVencimento, DataMovimentacao, ValorMovimentacao, ValorLiquidoTitulo
                                                              Resident PreviaTitulosInadimplentes
                                                              Where ChaveTitulo = 'MVN|003498|FT|   |01|050813';
                                                              
                                                              Left Join (temp_Extrato) 
                                                              //Dados da fonte 
                                                              Load 
                                                                ChaveTitulo, 
                                                                DataMovimentacao As 'Data', 
                                                                ValorMovimentacao; 
                                                              LOAD  
                                                              ChaveTitulo, DataMovimentacao, ValorMovimentacao 
                                                              Resident PreviaTitulosInadimplentes
                                                              Where ChaveTitulo = 'MVN|003498|FT|   |01|050813';
                                                              
                                                              DROP TABLE PreviaTitulosInadimplentes; 
                                                                 
                                                              $(vTabelaTrf): 
                                                              NoConcatenate Load 
                                                                ChaveTitulo as 'ChaveTitulosReceber',
                                                                ChaveTitulo&'|'&Year([Data])&'|'&Month([Data])&'|'&Day([Data]) as 'ChaveLinkTable',  
                                                                DataEmissao, 
                                                                DataVencimento, 
                                                                TotalValorMovimentacao, 
                                                                ValorLiquidoTitulo, 
                                                                Dia as 'Dia Inadimplência', 
                                                                Data as 'Data Inadimplência',
                                                                ValorMovimentacao, 
                                                                Rangesum( 
                                                                    If(ChaveTitulo = Previous(ChaveTitulo), 
                                                                    rangesum(ValorMovimentacao, Peek(ValorMovAcumulado)) 
                                                                      , ValorMovimentacao) 
                                                                ) As 'ValorMovAcumulado', 
                                                              
                                                                [ValorLiquidoTitulo]-Rangesum( 
                                                                    If(ChaveTitulo = Previous(ChaveTitulo), 
                                                                    Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado)) 
                                                                      , ValorMovimentacao) 
                                                                ) As 'SaldoDevedor', 
                                                                   
                                                                If( 
                                                                    Rangesum( 
                                                                        if(ChaveTitulo = Previous(ChaveTitulo), 
                                                                            Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado)) 
                                                                        , ValorMovimentacao) 
                                                                    ) 
                                                                      < ValorLiquidoTitulo, 
                                                                  'Devedor', 
                                                                  'Não Devedor' 
                                                                ) As 'Situação Cliente Inadimplência',
                                                                If(( 
                                                                    Rangesum( 
                                                                        if(ChaveTitulo = Previous(ChaveTitulo), 
                                                                            Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado)) 
                                                                        , ValorMovimentacao) 
                                                                    ) 
                                                                      < ValorLiquidoTitulo) And Data > DataVencimento, 
                                                                  'Inadimplente', 
                                                                  'Não Inadimplente' 
                                                                ) As 'Situação Inadimplência'       
                                                              Resident temp_Extrato Order By ChaveTitulo, Data Asc; 
                                                              
                                                              Drop Table temp_Extrato;
                                                                      , ValorMovimentacao) 
                                                                ) As 'SaldoDevedor', 
                                                                   
                                                                If( 
                                                                    Rangesum( 
                                                                        if(ChaveTitulo = Previous(ChaveTitulo), 
                                                                            Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado)) 
                                                                        , ValorMovimentacao) 
                                                                    ) 
                                                                      < ValorLiquidoTitulo, 
                                                                  'Devedor', 
                                                                  'Não Devedor' 
                                                                ) As 'Situação Cliente Inadimplência',
                                                                If(( 
                                                                    Rangesum( 
                                                                        if(ChaveTitulo = Previous(ChaveTitulo), 
                                                                            Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado)) 
                                                                        , ValorMovimentacao) 
                                                                    ) 
                                                                      < ValorLiquidoTitulo) And Data > DataVencimento, 
                                                                  'Inadimplente', 
                                                                  'Não Inadimplente' 
                                                                ) As 'Situação Inadimplência'       
                                                              Resident temp_Extrato Order By ChaveTitulo, Data Asc; 
                                                              
                                                              Drop Table temp_Extrato;
                                                              
                                                              
                                                                • Re: Divergência de valores
                                                                  Douglas Schmitt

                                                                  Assim ele funciona sem problema nenhum.

                                                                  Agora só preciso tirar as chaves dos tipo de movimentações ES, por isso fiz aquilo do Not Exists..

                                                                    • Re: Divergência de valores
                                                                      MARIO SOARES

                                                                      Isso já é um avanço;

                                                                      Pois estava apresentando erro no Left Join

                                                                      • Re: Divergência de valores
                                                                        MARIO SOARES

                                                                        Me passa o trecho do script do Exists com a lógica e com as associações com as outras partes dos script que faltou.

                                                                          • Re: Divergência de valores
                                                                            Douglas Schmitt

                                                                            A lógica é a seguinte:

                                                                             

                                                                            No inicio do script criar a seguinte tabela TabelaMovimentacoes com o script abaixo.

                                                                             

                                                                            E após isto, no seu código substituir tudo que utiliza o FINAN_MovimentacaoBancaria.qvd pelo Resident TabelaMovimentacoes, porque assim teria uma tabela com as movimentações sem estornos.

                                                                             

                                                                            Estornos:

                                                                            LOAD [Filial Tit. Movimentação Bancária]&'|'&[Prefixo Tit. Movimentação Bancária]&'|'&[Número Tit. Movimentação Bancária]&'|'&[Parcela Tit. Movimentação Bancária]&'|'&[Tipo Tit. Movimentação Bancária]&'|'&[Cliente/Fornecedor Tit. Movimentação Bancária]&'|'&[Loja Tit. Movimentação Bancária]&'|'&[Sequência Movimentação Bancária] as [ChaveEstornoFiltro] 

                                                                            FROM

                                                                            [E:\BI-PRD\4.Dados\Transformados\Fatos\FINAN_MovimentacaoBancaria.qvd] (qvd)

                                                                            Where [Cod. Tipo Movimentação Bancária] = 'ES';

                                                                             

                                                                            TabelaMovimentacoes:

                                                                            LOAD

                                                                              *

                                                                            FROM

                                                                            [E:\BI-PRD\4.Dados\Transformados\Fatos\FINAN_MovimentacaoBancaria.qvd] (qvd)

                                                                            Where

                                                                              Not Exists ([ChaveEstornoFiltro],[Filial Tit. Movimentação Bancária]&'|'&[Prefixo Tit. Movimentação Bancária]&'|'&[Número Tit. Movimentação Bancária]&'|'&[Parcela Tit. Movimentação Bancária]&'|'&[Tipo Tit. Movimentação Bancária]&'|'&[Cliente/Fornecedor Tit. Movimentação Bancária]&'|'&[Loja Tit. Movimentação Bancária]&'|'&[Sequência Movimentação Bancária]);

                                                                             

                                                                            Drop Table Estornos;

                                                                            • Re: Divergência de valores
                                                                              Douglas Schmitt

                                                                              Mario,

                                                                               

                                                                              Hoje até tentei mudar a lógica para desconsiderar os estornos, fiz da seguinte maneira:

                                                                               

                                                                              [TabelaTemp]:

                                                                              LOAD

                                                                                *,

                                                                                [Filial Tit. Movimentação Bancária]&'|'&[Prefixo Tit. Movimentação Bancária]&'|'&[Número Tit. Movimentação Bancária]&'|'&[Parcela Tit. Movimentação Bancária]&'|'&[Tipo Tit. Movimentação Bancária]&'|'&[Cliente/Fornecedor Tit. Movimentação Bancária]&'|'&[Loja Tit. Movimentação Bancária]&'|'&[Sequência Movimentação Bancária] as [ChaveEstornoFiltro]   

                                                                              FROM

                                                                              [E:\BI-PRD\4.Dados\Transformados\Fatos\FINAN_MovimentacaoBancaria.qvd] (qvd)

                                                                              Where ChaveTitulosReceber = 'MVN|003498|FT|   |01|050813';

                                                                               

                                                                              Left Join

                                                                               

                                                                              LOAD

                                                                                [Filial Tit. Movimentação Bancária]&'|'&[Prefixo Tit. Movimentação Bancária]&'|'&[Número Tit. Movimentação Bancária]&'|'&[Parcela Tit. Movimentação Bancária]&'|'&[Tipo Tit. Movimentação Bancária]&'|'&[Cliente/Fornecedor Tit. Movimentação Bancária]&'|'&[Loja Tit. Movimentação Bancária]&'|'&[Sequência Movimentação Bancária] as [ChaveEstornoFiltro],

                                                                                1 as [Estorno ?]

                                                                              FROM

                                                                              [E:\BI-PRD\4.Dados\Transformados\Fatos\FINAN_MovimentacaoBancaria.qvd] (qvd)

                                                                              Where [Cod. Tipo Movimentação Bancária] = 'ES'

                                                                              AND ChaveTitulosReceber = 'MVN|003498|FT|   |01|050813';

                                                                               

                                                                              [Tabela]:

                                                                              NoConcatenate

                                                                              LOAD

                                                                                *

                                                                              Resident TabelaTemp

                                                                              Where [Estorno ?] <> 1;

                                                                               

                                                                              Drop Table TabelaTemp;

                                                                               

                                                                              E depois sigo o teu script usando a "Tabela" no lugar do QVD de movimentações bancárias.

                                                                              O problema que deu a mesma coisa, o SaldoDevedor fica em 5,... e não 0.

                                                                               

                                                                              O estranho é que se eu coloco um objeto de texto com o código:

                                                                              =sum(ValorLiquidoTitulo)-sum(TotalValorMovimentacao)

                                                                              O resultado é 5,...

                                                                               

                                                                              Mas se coloco um objeto de texto com o código:

                                                                              =NUM(sum(ValorLiquidoTitulo)-sum(TotalValorMovimentacao),'#.##0,00')

                                                                              O resultado é 0,00

                                                                                • Re: Divergência de valores
                                                                                  MARIO SOARES

                                                                                  Estou achando que deva ter algo errado no campo ValorLiquidoTitulo gerado no script.

                                                                                  E imagino que os valores do campo [Valor IRRF Título a Receber] deve ter várias casas decimais.

                                                                                  Mas estranho o valor ser '5,..', ou seja, uma diferença considerável para ser só por conta das casas decimais.


                                                                                  Faz o seguinte,

                                                                                  Substitui no script

                                                                                  numsum(num([Valor Título a Receber]),num(-[Valor IRRF Título a Receber])) as 'ValorLiquidoTitulo'

                                                                                  por

                                                                                  Round( Rangesum([Valor Título a Receber],-[Valor IRRF Título a Receber]),'0,01') as 'ValorLiquidoTitulo'


                                                                                  A função Numsum() é obsoleta;

                                                                                  A função Rangesum() também altera o campo para 0 caso não encontre número, que é bom para o seu caso.

                                                                                    • Re: Divergência de valores
                                                                                      Douglas Schmitt

                                                                                      Coloquei tudo o que é valor no script para num(CAMPO,'#.##0,00').

                                                                                      Ele até colocou o saldo zerado, mas como é apenas a máscara ele não entendeu que o SaldoDevedor ficou 0 e continuou criando registros até hoje.

                                                                                      2017-03-29 - 001.png

                                                                                       

                                                                                      Fiz o teu teste de substituir a linha por:

                                                                                      Round( Rangesum([Valor Título a Receber],-[Valor IRRF Título a Receber]),'0,01') as 'ValorLiquidoTitulo'

                                                                                      Porém também não funcionou.

                                                                                       

                                                                                      Para testar também, substitui essa linha por:

                                                                                      [Valor Título a Receber] as 'ValorLiquidoTitulo'

                                                                                      Para descartar que o problema fosse no [Valor IRRF Título a Receber] e mesmo assim continuou a criar registros.

                                                                                       

                                                                                       

                                                                                      O que ainda não consegui entender é como apenas retirar quem é Estorno buga todo o resto do script

                                                                                        • Re: Divergência de valores
                                                                                          MARIO SOARES

                                                                                          Estou achando que esteja tirando algo a mais, necessário para o valor de 'ValorLiquidoTitulo'  atingir o valor de

                                                                                          'TotalValorMovimentacao', se isso não ocorrer, é como o cliente ainda estivesse devendo, ou seja, ainda deve correr os dias para até completar o saldo devedor;

                                                                                          Veja que em While eu deixei uma lógica para tratar isso:

                                                                                           

                                                                                          While DataEmissao + IterNo() - 1 <= If(MaxDataMov<=DataVencimento, DataVencimento,  
                                                                                            If(TotalValorMovimentacao<ValorLiquidoTitulo, Today(), MaxDataMov)); 
                                                                                          



                                                                                          Perceba que se 'TotalValorMovimentacao' for menor que 'ValorLiquidoTitulo', continuará a trazer a data até hoje;


                                                                                          Sua exceção do estorno está com algum erro de lógica de negócio, investigue para tratar corretamente esta regra.

                                                                                            • Re: Divergência de valores
                                                                                              MARIO SOARES

                                                                                              Talvez seja melhor tratar esta exceção com set analysis.

                                                                                                • Re: Divergência de valores
                                                                                                  Douglas Schmitt

                                                                                                  Mario,

                                                                                                  Peguei o teu script e coloquei no Inline os valores da minha base (1 título com 2 movimentações) e ele está se perdendo nos valores.

                                                                                                  Consegue dar uma olhada?

                                                                                                  Acho que assim facilita pra você.

                                                                                                   

                                                                                                  Edit:

                                                                                                  Testei alterando só os valores de centavos (200,67 e 470,67) para 200,68 470,68 e 200,65 470,65 funcionou, porém se colocar 200,67 470,67 ou 200,66 470,66 não funciona.

                                                                                                  Qual a bruxaria? haha

                                                                                                    • Re: Divergência de valores
                                                                                                      MARIO SOARES

                                                                                                      Amigo;

                                                                                                      Consegui resolver, segue:

                                                                                                      Substitua na parte //Agrupamento;;

                                                                                                      De:

                                                                                                        Sum(ValorMovimentacao) As 'TotalValorMovimentacao', 

                                                                                                      Por:

                                                                                                        Round(Sum(ValorMovimentacao),'0,01') As 'TotalValorMovimentacao', 
                                                                                                      

                                                                                                       

                                                                                                      O erro ocorre somente quando existe casas decimais no campo 'ValorMovimentacao';

                                                                                                      Estranho que fiz vários testes, formatando com Num()..., no frond-end ficava normal com Num() no script, mas mesmo assim, na parte //Preenchendo_Intervalos_Datas estava apresentando erro na condição If() no While, não retornando -1(True/Verdadeiro) para os valores iguais para TotalValorMovimentacao=ValorLiquidoTitulo;


                                                                                                      Enfim... Não existe mais de duas casas decimais, porém forcei um arredondamento "imaginário" e funcionou.

                                                                                                      Pois TotalValorMovimentacao(470,67) > ValorLiquidoTitulo(470,67) estava retornando verdadeiro.

                                                                                                      Primeira vez que vejo esta situação estranha.

                                                                • Re: Divergência de valores
                                                                  mauro ponte

                                                                  Douglas tente o seguinte script:

                                                                   

                                                                  [Estornos]:

                                                                  LOAD [Filial Tit. Movimentação Bancária]&'|'&[Prefixo Tit. Movimentação Bancária]&'|'&[Número Tit. Movimentação Bancária]&'|'&[Parcela Tit. Movimentação Bancária]&'|'&[Tipo Tit. Movimentação Bancária]&'|'&[Cliente/Fornecedor Tit. Movimentação Bancária]&'|'&[Loja Tit. Movimentação Bancária]&'|'&[Sequência Movimentação Bancária] as [ChaveEstornoFiltro]  

                                                                  FROM

                                                                  [E:\BI-PRD\4.Dados\Transformados\Fatos\FINAN_MovimentacaoBancaria.qvd] (qvd)

                                                                  Where [Cod. Tipo Movimentação Bancária] = 'ES';

                                                                   

                                                                  Tabela:

                                                                  LOAD

                                                                     [Filial Tit. Movimentação Bancária]&'|'&[Prefixo Tit. Movimentação Bancária]&'|'&[Número Tit. Movimentação           Bancária]&'|'&[Parcela Tit. Movimentação Bancária]&'|'&[Tipo Tit. Movimentação Bancária]&'|'&[Cliente/Fornecedor           Tit. Movimentação Bancária]&'|'&[Loja Tit. Movimentação Bancária]&'|'&[Sequência Movimentação Bancária] as           [ChaveEstornoFiltro] ,

                                                                       *

                                                                  FROM

                                                                  [E:\BI-PRD\4.Dados\Transformados\Fatos\FINAN_MovimentacaoBancaria.qvd] (qvd);


                                                                  store Tabela indo E:\BI-PRD\4.Dados\Transformados\Fatos\Tabela.qvd;


                                                                  Drop Table Tabela;


                                                                  Tabela:

                                                                  Load

                                                                            *

                                                                  FROM

                                                                  [E:\BI-PRD\4.Dados\Transformados\Fatos\Tabela.qvd] (qvd)

                                                                  where not exists([ChaveEstornoFiltro]);

                                                                   

                                                                  Drop Table Estornos;