tag vFrete do item da nota

Delphi

08/10/2013

boa noite galera, estou emitindo NF-e com Acbr, vou citar um problema que esta acontecendo comigo, tenho uma nota com 3 itens, e na nota tem o valor de frete R$ 21,50, se eu dividir 21,50 / 3 = 7,166666666666667 para cada item no campo vFrete, porem no xml aparece o valor de 7,17 para cada item, porem se eu multiplicar 7,17 * 3 = 21,51, e o escritório de contabilidade do cliente esta reclamando por causa dessas diferenças de centavos, esse problema eu resolveria aumentando a quantidade de casas decimais do meu banco de dados, mas dai não valida o xml, pois só permite 2 casas decimais no campo vFrete, o que vocês estão fazendo neste tipo de situação.
Andre Ucella

Andre Ucella

Curtidas 0

Respostas

Marcos Oliveira

Marcos Oliveira

08/10/2013

André, bom dia! Você deverá fazer um tratamento na divisão. Primeiramente, trucar na segunda casa decimal (7,16). Depois disso, a diferença que der, no caso do exemplo dará dois centavos para menos, jogue no primeiro ou último item. Em resumo ficaria assim:
- Primeiro item: 7,16
- Segundo item: 7,16
- Terceiro item: 7,18.

Fecharia nos 21,50.

Att,

Marcos
GOSTEI 0
Andre Ucella

Andre Ucella

08/10/2013

Marcos bom dia, fiz da seguinte maneira abaixo :

//Calculando o frete

if edtfrete.Text <> '' then
begin
frete := Strtofloat( edtFrete.Text );
calc_frete := frete / ( QbuscaItens.RecordCount );
end

// Parametro do Update realizado no banco de dados com o truncamento

Var
X: Double;
Begin

X := 0;
X := Trunc(calc_frete * 100) /100;
.
.
.
dm.QConsulta.ParamByName('20').AsCurrency := X;

até ai blz, vamos supor que no exemplo de um frete no valor de R$ 21,50, estarei dividindo por 3, estaria dando 7,166666666666667, com o truncamento esta dando 7,16, porem esta sando este valor nos 3 itens, ai fica faltando ainda 0,02 centavos, como que faço para que o valor que falta seja somado no ultimo item ?
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

08/10/2013

André, você tem que ir acumulando o valor já dividido para os primeiros itens em alguma variável.
Exemplo:
- Item 1: 7,16
- Item 2: 7,16 + 7,16 = 14,32

No item 3, você pega o valor total (21,50) menos o valor já dividido e acumulado na variável (14,32) que vai ser igual a 7,18.
Você só precisa identificar qual é o último item para que isso funcione.

Att,

Marcos
GOSTEI 0
Andre Ucella

Andre Ucella

08/10/2013

Consegui aqui Marcos, no final do processo, somei o valor total do frete dos itens, fiz menos o valor do frente total, assim achando a diferença, e por ultimo dei um update no ultimo item da nota somando a diferença + o frete, deu certinho, muito obrigado pela dica.
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

08/10/2013

Falou André! Precisando, estamos aí...
GOSTEI 0
POSTAR