Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
Where [Cod. Tipo Movimentação Bancária] = 'ES';
Tabela:
LOAD
*
FROM
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:
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)
Alguém tem alguma ideia do que pode ser isto?
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.
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...).
Faz assim;
[ValorLiquidoTitulo]-Round(Rangesum(
If(ChaveTitulo = Previous(ChaveTitulo),
Rangesum(ValorMovimentacao, Peek(ValorMovAcumulado))
, ValorMovimentacao)
),'0,01') As 'SaldoDevedor',
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
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.
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.