Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
dairan73
Contributor III
Contributor III

Divergência de valores

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

(qvd)

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

Tabela:

LOAD

  *

FROM

(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?

Labels (1)
45 Replies
mario_sergio_ti
Partner - Specialist
Partner - Specialist

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.

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
dairan73
Contributor III
Contributor III
Author

E no SaldoDevedor, devo colocar o Round também, como no código abaixo?

  Round([ValorLiquidoTitulo]-Rangesum( 

      If(ChaveTitulo = Previous(ChaveTitulo), 

      Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado)) 

        , ValorMovimentacao) 

  ),'0,01') As 'SaldoDevedor',

Pergunto pois ele parou a criação na data máxima de movimentação, porém o SaldoDevedor ficou com aquele número estranho (5,68...).

mario_sergio_ti
Partner - Specialist
Partner - Specialist

Faz assim;

  [ValorLiquidoTitulo]-Round(Rangesum(

      If(ChaveTitulo = Previous(ChaveTitulo),

      Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado))

        , ValorMovimentacao)

  ),'0,01') As 'SaldoDevedor',

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
mario_sergio_ti
Partner - Specialist
Partner - Specialist

Ou no Left Join

Left Join (temp_Extrato)

//Dados da fonte

Load

  ChaveTitulo,

  DataMovimentacao As Data,

  Round(ValorMovimentacao,'0,01') as ValorMovimentacao;

Já deixa formatado para quando o campo for para a tabela Tab_MovimentacaoDiaria através do Resident temp_Extrato, já vai pronto

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
dairan73
Contributor III
Contributor III
Author

Funcionou!

Muito obrigado pela ajuda!

Bom que no final, não era nada no not exists ou na criação do script diário, mas sim um "bug" na formatação que resolvemos com o Round.

mario_sergio_ti
Partner - Specialist
Partner - Specialist

Que ótimo;

Só cuidado para ajustar a quantidade de casas decimais se caso existir mais de duas casas decimais no atributo ValorMovimentacao na fonte de dados.

Abraço.

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti