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

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.

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

No objeto texto formate com a função NUM(Campo,'#.##0,00')

dairan73
Contributor III
Contributor III
Author

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

(qvd)

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

TabelaMovimentacoes:

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;

dairan73
Contributor III
Contributor III
Author

Só que ai vou estar "mascarando" o problema, visto que qualquer objeto em qualquer momento da aplicação que for utilizar tenho que colocar a máscara.. Será que não tem como colocar no script?

E outra, como o número é 5,..... e se eu coloco a máscara NUM(Campo,'#.##0,00') ele fica 0,00 ?

dairan73
Contributor III
Contributor III
Author

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

(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

(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

mario_sergio_ti
Partner - Specialist
Partner - Specialist

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.

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

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

mario_sergio_ti
Partner - Specialist
Partner - Specialist

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.

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

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

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

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