Ir para conteúdo
  • Cadastre-se

dev botao

Implementar Suporte A Bematech Mp-4200 Th No Acbrnfedanfeescpos


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

Recommended Posts

Nunca usei acentos em impressoras fiscais... por mim, no caso dessas não-fiscais colocava também uma função pra remover esses acentos e estava tudo resolvido  :-P

 

Será que no Delphi 2010 o comportamento do Result ficou igual ao Return do Java? Quando um Return é feito no Java ele interrompe o restante da execução (sai da função). Coloca um debug nesse Result := text e veja se quando ele executado o fluxo continua até o "if MarcaImpressora", etc.

function TACBrNFeDANFeESCPOS.CodificaStringESCPOS(text:AnsiString): AnsiString;
begin
  Result := text;

  //codifica linhas de texto com UTF-8 para evitar erros de acentuaÁ„o na Bematech
  if MarcaImpressora = iBematech then
      Result := UTF8Encode(text)
end;

WRMedeiros

Focus

Link para o comentário
Compartilhar em outros sites

Sim debugando ele entra dentro do if.. o mais estranho fazendo assim saí os acentos na impressão. =/

 

 AssignFile(F, 'COM5:');
  Rewrite(F);
  Writeln(F,  UTF8Encode('IMPESSÃO FISCAL ELETRÔNICA'));
  Writeln(F,  '-------------------------------');
  CloseFile(F);

Thiago Balbino

Analista de Sistemas Programador

email: [email protected]

Muriaé - MG

 

Link para o comentário
Compartilhar em outros sites

Mas mudando pra AnsiString ainda precisa de codificar como UTF-8?

 

Se puder, anexa o código na mensagem.

 

Eu deixei do mesmo jeito que você postou o código ou seja ainda codifica para UTF8. Só alterei o tipo de dados da variável FLinhaCmd por isso não postei o código.

Porem revendo aqui em 2 lugares ainda não sai acentuação, veja.

post-473-0-88533100-1415969457_thumb.jpg

Thiago Balbino

Analista de Sistemas Programador

email: [email protected]

Muriaé - MG

 

Link para o comentário
Compartilhar em outros sites

Bom dia senhores.

 

Fiz a implementação para Daruma DR700. No anexo envio o código do componente e uma foto do NFCe impresso.

 

Observe que a acentuação saiu correto, como também o QRCode, no entanto algumas linhas estão quebrando (descrição do item em outras impressoras é feito em apenas 1 linha)... na parte do pagamento a impressora aceita o comando de expandido, imprime a letra maior, mas quebra.

 

Enfim, precisa de alguns retoques. Poderia ir direto na linha de pagamento e remover alguns espaços, mas nas outras impressoras não houve necessidade de fazer isso, talvez seja algo na configuração da margem (no manual fala sobre isso), provavelmente errei alguma coisa, se puderem ajudar, agradeço.

 

De qualquer forma vou continuar trabalhando, qualquer novidade aviso.

post-24-0-13592700-1416148242_thumb.jpg

ACBrNFeDANFeESCPOS.pas

  • Curtir 1

WRMedeiros

Focus

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Sugestões: 

 

- Trocar o nome "Inscrição Estadual" no cabeçalho para "IE", já que com inscrições com 20 digitos mais o nome completo ultrapassam a largura da Daruma.

- Quebrar a linha após o texto "Consulte pela chave de acesso em" e "Procotolo de Autorização" que tem o mesmo problema e desta forma fica numa estética melhor.

- Usar a largura "3" no QR-Code na Daruma, ele gera um código menor, e acima do mínimo especificado no Manual de Integração.

- Criar uma variável que controle a largura do papel para cada modelo.

 

Fiz alteração também na impressão dos itens, para deixar os campos melhor tabulados, aumentando e diminuindo o campo descrição conforme necessário. Acho que o ideal seria fazer a impressão em duas linhas para não haver truncamento excessivo na descrição.

 

Segue a minha unit com as alterações.

ACBrNFeDANFeESCPOS.pas

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

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

Muito bom, acredito que o nLargPapel que você propôs resolve o problema das quebras das linhas.

 

Chegar em casa vou fazer uns testes com a impressora.

 

No caso, essas sugestões que você mencionou (tamanho do QRCode, etc.), foram feitas ou é algo para trabalharmos?

 

No demo que a Daruma me enviou realmente o QRCode era bem maior, fiz o ajuste pra ficar um pouco menor, mas esqueci de verificar essas exigências feitas pelo SEFAZ.

 

Obrigado por compartilhar.

Editado por welkson

WRMedeiros

Focus

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Todas as propostas que fiz acima já estão no fonte que anexei.

 

O manual estipula um tamanho mínimo do QR-Code de 25 x 25 mm. 

 

Sobre a largura do papel, estava vendo o tool da Daruma tem opção de configurar a largura, nos modelos H e M chega a 52 caracteres no tamanho normal. Talvez o ideal seja criar uma propriedade configurável pelo usuário.

Editado por BigWings
  • Curtir 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

Aproveitando o post, fiz alguns testes usando contingência, e observei que no ESC/POS não sai a observação que a NFCe foi enviada em modo off-line.

 

Nos testes que fiz com QuickReport é impresso a seguinte mensagem: "NF-E NÃO ENVIADA PARA SEFAZ".

 

No caso do TEF, vocês estão colocando os dados retornados pelo Sitef no campo observação/informações complementares?

WRMedeiros

Focus

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Estou tentando enviar o comando #27 #229 para a Daruma para obter as configurações dela, entre elas o número de colunas, tabela de comandos e página de código. Consegui fazer com outros componentes de comunicação serial (VaComm), mas com o ACBr não estou sabendo fazer.

 

Como obter o retorno da impressora depois de enviar o comando?

  ACBrNFeDANFeESCPOS1.Device.Porta := 'COM1';

  ACBrNFeDANFeESCPOS1.Device.Ativar;
  try
    ACBrNFeDANFeESCPOS1.Device.EnviaString(#27#229);
    Memo1.Lines.Add(ACBrNFeDANFeESCPOS1.Device.LeString(100, 10));
  finally
    ACBrNFeDANFeESCPOS1.Device.Desativar;
  end;

Este código dá timeout, independente do tempo que coloco como parametro na LeString()

 

---

 

Consegui:

  ACBrNFeDANFeESCPOS1.Device.Porta := 'COM1';

  ACBrNFeDANFeESCPOS1.Device.Ativar;
  try
    ACBrNFeDANFeESCPOS1.Device.EnviaString(#27#229);
    Memo1.Lines.Add(ACBrNFeDANFeESCPOS1.Device.Serial.RecvPacket(100));
  finally
    ACBrNFeDANFeESCPOS1.Device.Desativar;
  end;

Editado por BigWings
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Sugestões: 

 

- Trocar o nome "Inscrição Estadual" no cabeçalho para "IE", já que com inscrições com 20 digitos mais o nome completo ultrapassam a largura da Daruma.

- Quebrar a linha após o texto "Consulte pela chave de acesso em" e "Procotolo de Autorização" que tem o mesmo problema e desta forma fica numa estética melhor.

- Usar a largura "3" no QR-Code na Daruma, ele gera um código menor, e acima do mínimo especificado no Manual de Integração.

- Criar uma variável que controle a largura do papel para cada modelo.

 

Fiz alteração também na impressão dos itens, para deixar os campos melhor tabulados, aumentando e diminuindo o campo descrição conforme necessário. Acho que o ideal seria fazer a impressão em duas linhas para não haver truncamento excessivo na descrição.

 

Segue a minha unit com as alterações.

Obrigado pela contribuição, elas foram analisadas e enviadas ao SVN.
djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link para o comentário
Compartilhar em outros sites

  • Moderadores

quando eu imprimo carregando um xml imprime tudo certinho QRCode os dados, mas quando eu imprimo pelo componente os dados sai tudo torto no cupom eu estou usando o componente Virtual

Poste um exemplo de como está fazendo quando o problema acontece.
djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link para o comentário
Compartilhar em outros sites

Estou tentando rodar minha aplicação hj e estou com um problema referente a linha abaixo do ACBrNFeDANFeESCPOS

448     cCmdCodeBarCODE39    := ConfigurarBarrasBematech( GS + 'k' + EOT );

a variável EOT não esta declarada, fiz uma varredura e vi que o EOT não esta declarado em lugar nem um e na ACBrConsts ele nãos e encontra junto ao bloco no qual ele pertence que seria 

EOT = #04 ;

conforme manual da bematech

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Pra mim está, provavelmente vc não atualizou todas as pastas.

const
  {* Unit ACBrBase *}
  ACBR_VERSAO = '0.9.0a';
  NUL = #00 ;
  SOH = #01 ;
  STX = #02 ;
  ETX = #03 ;
  EOT = #04 ;
...
djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link para o comentário
Compartilhar em outros sites

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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.