Ir para conteúdo
  • Cadastre-se

dev botao

NFe - Formatação de valores (Qtde e Vl Unit) FortesReport


carlos_tedex
  • Este tópico foi criado há 2101 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Boa tarde,

Gostaria de sugerir a seguinte modificação para formatação dos campos Quantidade e Valor Unitário no DANFE do FortesReport. Pois tenho clientes que na mesma nota fiscal possuem produtos com 2, 3, ou mais casas decimais de acordo com a unidade de medida do produto. Por esse motivo essa formatação de mais de 2 casas decimais só deveria existir quando necessário.

No arquivo "ACBrNFeDANFeRL.pas" onde está:

sDisplayFormat = '###,###,###,##0.%.*d'

gostaria que fosse alterado para:

sDisplayFormat = '###,###,###,##0.00########';

 

Atualmente utilizo esses valores para atender todo tipo de operação de maneira geral:

ACBrNFeDANFeRL1.CasasDecimais._qCom      := 4;
ACBrNFeDANFeRL1.CasasDecimais._vUnCom := 10;

Conforme exemplos em anexo veja que da forma atual utilizando a quantidade de casas decimais acima o DANFE esta saindo assim "DANFE_ATUAL.PDF" e já com a unit modificada o mesmo respeitou a quantidade de casas decimais necessárias "DANFE_MODIFICADO.PDF"

 

 

DANFE_ATUAL.pdf

DANFE_MODIFICADO.pdf

32150807411612000116550010000008011095463651-nfe.xml

ACBrNFeDANFeRL.pas

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Gostei do seu sDisplayFormat :) .. vai QUASE com uma ideia de refatoração  para Danfe Fast Report.  onde  teremos a correção da  formatação dos milhares e decimais;

Segue imagem de teste com erros nos campos ( valor total , Base , Valor icms );

TestedeMilhares_e_decimas_Fast_Report.th

se fosse alterado os tipo (  integer  )

 CasasDecimais._qCom     := 4 
 CasasDecimais._vUnCom := 10;

para String;

  CasasDecimais._qCom     :=  '###,###,###,##0.0000###';
  CasasDecimais._vUnCom :=  '###,###,###,##0.00000######';

Talvez seja uma solução , mas....( Façam seus comentários para ajudar na tomada de decisão ) :)

 

 

 
  • Curtir 1
Equipe ACBr Henrique Leonardo
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Tecnólogo em processamento de dados

E-mail [email protected] - Skype : hleorj

Link para o comentário
Compartilhar em outros sites

Boa tarde Carlos,

Bem vinda sua sugestão. Também senti essa necessidade.
Pois tanto a quantidade como o valor unitário terão a formatação de casas decimais somente quando necessário.

Sua implementação deu este bom resultado como os anexos.

Antes

Antes.jpg

Depois

Depois.jpg

Ficou mais limpo a leitura dos valores de quantidade e valor unitário

Editado por denerbuzato
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Henrique,

Você acha que devemos deixar esses parâmetros como default ?

Se SIM, poderia por favor enviar as Units modificadas ?

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Daniel , estou desenvolvendo um outra solução , no componente ja temos toda a solução do problema.

Existe a Propriedade : CasasDecimais ( Tag , _Mask_qcom, _Mask_vUnCom , _qcom, _vUnCom )

fIFormatacao =  Tag ( 0 ou 1 )

FCasasDecimaisqCom = _qcom

FCasasDecimaisvUnCom  =_vUnCom

fMask_qCom = _Mask_qcom

 fMask_vUnCom = _Mask_vUnCom

cdsItens.FieldByName('QTDE').AsString         := FormatQuantidade( Prod.qCom);
cdsItens.FieldByName('VALOR').AsString        := FormatValorUnitario(  Prod.vUnCom);

Function TfrlDANFeRLRetrato.FormatQuantidade( dValor : Double ) : String;
begin
  case fIFormatacao of
    0 : Result := FormatFloatBr( dValor , format(sDisplayFormat,  [FCasasDecimaisqCom, 0]));
    1 : Result := FormatFloatBr( dValor , fMask_qCom);
  end;
end;


Function TfrlDANFeRLRetrato.FormatValorUnitario( dValor : Double ) : String;
begin
  case fIFormatacao of
    0 : Result := FormatFloatBr( dValor , format(sDisplayFormat, [FCasasDecimaisvUnCom, 0]));
    1 : Result := FormatFloatBr( dValor , fMask_vUnCom);
  end;
end;

 

Testando ..a solução;

 

Em Danfe Fast Report teremos a mesma solução um pouco diferente mas aregra sera a mesma

 

Function TACBrNFeFRClass.FormatQuantidade( dValor : Double ) : String;
begin
  case FDANFEClassOwner.CasasDecimais.tag of
    0 : Result := FormatFloatBr( dValor , format(sDisplayFormat, [FDANFEClassOwner.CasasDecimais._qCom, 0]));
    1 : Result := FormatFloatBr( dValor , FDANFEClassOwner.CasasDecimais._Mask_qCom);
  end;
end;


Function TACBrNFeFRClass.FormatValorUnitario( dValor : Double ) : String;
begin
  case FDANFEClassOwner.CasasDecimais.tag of
    0 : Result := FormatFloatBr( dValor , format(sDisplayFormat, [FDANFEClassOwner.CasasDecimais._vUnCom, 0]));
    1 : Result := FormatFloatBr( dValor , FDANFEClassOwner.CasasDecimais._Mask_vUnCom);
  end;
end;

Editado por hleorj
Equipe ACBr Henrique Leonardo
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Tecnólogo em processamento de dados

E-mail [email protected] - Skype : hleorj

Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...
Em 26/09/2015 at 15:22, hleorj disse:

Configurando a Solução para resolver o problema acima.

Usando.thumb.png.ec7850f5f674aa41fce5efa

 

 

 

 

 

 

Ola

Hoje surgiu uma situacao em que preciso setar o numero de casas decimais do _qCom em 5, mas soh permite ate 4 casas!

Existe a possibilidade de aumentar isso pra 5 ? sera que a legislacao permite isso?

Posso fazer alteracoes nos fontes e anexar eles aqui!

Abraços

Jair Carlos Müller

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2101 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.