Jump to content

dev botao

Impressão da NFC-e em uma linha justificado


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

Recommended Posts

Olá, gostaria de sugerir uma nova opção para a impressão da NFC-e, quando o componente ACBr estiver configurado para imprimir os itens em uma linha. Fiz alguns testes aqui e ficou bem legal. O motivo da minha sugestão, é porque da forma que está, só funciona bem para fonte tamanho 7, se o cliente quiser usar fonte 6 por exemplo, apenas diminui a fonte, mas não ocupa o espaço a mais que tem disponível, onde na verdade poderia estar mostrando mais caracteres na descrição do item.

A ideia principal é criar no componente uma opção para configurar a quantidade de caracteres que deseja imprimir na linha, pois pode variar de acordo com o tamanho de margem e tamanho da fonte, dessa forma ficaria bem flexível. No meu caso, fiz um teste utilizando fonte 6 e esta nova configuração, utilizaria 49 caracteres. O que fiz no código fonte, além de criar o parâmetro, foi dividir a linha do item em 3 partes:

1ª parte seria o SEQ, 2ª parte vai ser o código do produto e descrição (fiz desta forma porque pode estar configurado para imprimir o código do produto ou código de barras - EAN) e na 3ª parte os valores.

O SEQ no caso cai ser sempre fixo, vai utilizar 3 caracteres e 1 espaço em branco para separar. Os valores (un, qtde, valor e total), pode variar, então nessa parte, vai usar o que for necessário. E a 2ª parte, o que fica no meio, vai ocupar o que tiver de caracteres disponíveis, sendo que se ficar menor, vai preencher com brancos, para que a linha toda fique sempre com a mesma quantidade de caracteres. Veja no anexo como ficou a impressão e veja a seguir como ficou o código fonte:

procedure TACBrNFeDANFCeFortesFr.FormataTextoItemParaUmaLinha(out LinhaItem: string);
var
  UmProd: TProd;
  CaracteresCodigoDescricao: integer;
  LinhaItemSeq, LinhaItemCodigoDescricao, LinhaItemValores: string;
begin
  UmProd := ACBrNFeDANFCeFortes.FpNFe.Det.Items[fNumItem].Prod;

  LinhaItemSeq := IntToStrZero(UmProd.nItem, 3) + ' ';
                        
  LinhaItemValores := ' ' + ACBrNFeDANFCeFortes.FormatarQuantidade(UmProd.QCom, False) + ' ' + Trim(UmProd.uCom) +
                      ' X ' + ACBrNFeDANFCeFortes.FormatarValorUnitario(UmProd.VUnCom) + ' ' +
                      FormatFloatBr(UmProd.vProd);

  if ACBrNFeDANFCeFortes.QuantidadeCaracterLinhaItem > 0 then
  begin
      CaracteresCodigoDescricao := ACBrNFeDANFCeFortes.QuantidadeCaracterLinhaItem - Length(LinhaItemSeq) - Length(LinhaItemValores);
      LinhaItemCodigoDescricao  := PadRight(copy(ACBrNFeDANFCeFortes.ManterCodigo(UmProd.cEAN, UmProd.cProd) + ' ' + UmProd.xProd, 1, CaracteresCodigoDescricao), CaracteresCodigoDescricao, ' ');

      LinhaItem                 := LinhaItemSeq + LinhaItemCodigoDescricao + LinhaItemValores;
  end
  else begin
      LinhaItem := LinhaItemSeq +
                   ACBrNFeDANFCeFortes.ManterCodigo(UmProd.cEAN, UmProd.cProd) + ' ' + '[DesProd]' +
                   LinhaItemValores;

      LinhaItem := AjustarDescricaoAteTamanhoMaximo(UmProd, LinhaItem);
  end;
end;

Seque em anexo também os fontes alterados.

Agradeço se puderem avaliar a minha sugestão, lembrando que esta alteração não irá interferir em nada no que já funciona, pois por padrão a nova propriedade virá zerada e não executará o código que criei.

 

nfc-e fonte 6 (antes alteração).jpg

nfc-e fonte 6 (após alteração).jpg

ACBrNFeDANFEClass.pas ACBrDANFCeFortesFr.pas

Link to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.