Skip to content

fix(danfe): não quebrar valores longos no meio dos dígitos na tabela de produtos - #1713

Open
ccaiolopes wants to merge 1 commit into
ZeusAutomacao:masterfrom
ccaiolopes:bugfix/danfe-valores-longos-tabela-produtos
Open

fix(danfe): não quebrar valores longos no meio dos dígitos na tabela de produtos#1713
ccaiolopes wants to merge 1 commit into
ZeusAutomacao:masterfrom
ccaiolopes:bugfix/danfe-valores-longos-tabela-produtos

Conversation

@ccaiolopes

Copy link
Copy Markdown

Descrição

Na tabela "DADOS DOS PRODUTOS / SERVIÇOS", um valor mais largo que a célula em que é impresso cai em TextBlock.BreakLongText, que quebra a string caractere a caractere. Como os valores são formatados sem espaços, um total de sete ou mais dígitos é partido no meio dos dígitos.

O quadro "Cálculo do imposto" já trata esse caso encolhendo a fonte do campo (Campo.DesenharConteudo, com piso em Estilo.FonteTamanhoMinimo). A tabela de produtos não tinha tratamento equivalente.

Comportamento atual

Com vProd = 1991010.06 numa NF-e retrato, a coluna VALOR TOTAL imprime:

1.991.010,0
6

O número que aparece no impresso deixa de ser o número do documento — e a linha inteira ganha altura dupla.

Comportamento esperado

1.991.010,06

O valor cabe em uma única linha, como já acontece no quadro "Cálculo do imposto" da mesma nota.

A mudança

  1. TabelaColuna ganha AjustarFonteParaCaber (padrão false — nenhuma coluna existente muda de comportamento sem pedir).
  2. Tabela ganha ComColunaDeValor(...) e o método privado FonteDaCelula(...): numa coluna de valor, uma célula cujo conteúdo é indivisível (nenhum espaço) e mais largo que o espaço disponível é impressa com o corpo da fonte reduzido o suficiente para caber em uma linha. Há um piso de 4 pontos: abaixo dele o comportamento anterior (quebra) é preservado, para não imprimir algo ilegível.
  3. TabelaProdutosServicos declara as colunas numéricas (QUANTI., VALOR UNIT., VALOR TOTAL, B CÁLC ICMS, VALOR ICMS, VALOR IPI, ALIQ. ICMS, ALIQ. IPI) com ComColunaDeValor, nas duas orientações.

Colunas de texto — DESCRIÇÃO DO PRODUTO / SERVIÇO, por exemplo — continuam quebrando por palavra exatamente como antes.

Como reproduzir

Gerar o DANFE de um nfeProc com um item cujo vProd/vUnCom tenha sete ou mais dígitos na parte inteira (ex.: 1991010.06) e observar a coluna VALOR TOTAL.

Testes

dotnet build NFe.Danfe.PdfClown/NFe.Danfe.PdfClown.csproj -c Release — compila nos dois alvos (netstandard2.0 e net6.0) sem novos avisos nos arquivos alterados.

Conferência do impresso, com uma NF-e sintética de um item de 1.991.010,06, extraindo o texto do PDF gerado: antes da mudança a coluna VALOR TOTAL produzia dois desenhos de texto (1.991.010,0 e 6); depois, um só (1.991.010,06). Os demais campos do impresso ficam idênticos.

…de produtos

Na tabela "DADOS DOS PRODUTOS / SERVIÇOS", um valor mais largo que a célula cai
em TextBlock.BreakLongText, que corta caractere a caractere. Um total como
"1.991.010,06" é impresso como "1.991.010,0" numa linha e "6" na seguinte — o
número que o leitor enxerga deixa de ser o número do documento.

O quadro "Cálculo do imposto" já resolve isso encolhendo a fonte do campo
(Campo.DesenharConteudo); a tabela de produtos não tinha tratamento equivalente.

As colunas numéricas passam a ser declaradas com ComColunaDeValor, e uma célula
dessas colunas cujo conteúdo é indivisível (sem espaços) e mais largo que o
espaço disponível é impressa em fonte reduzida, em uma única linha. O piso de 4
pontos preserva o comportamento anterior nos casos extremos, e colunas de texto
continuam quebrando por palavra como antes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant