Ir para conteúdo
  • Cadastre-se

dev botao

TM-T81 SAT Código Barra[Resolvido]


luisArruda
Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 3080 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Boa tarde a todos.

Sei da existência de zilhões de outros posts do assunto, mas nenhum relacionado a TM-T81 (ela se comporta de uma forma um pouco diferente da T20 da EPSON - pelo visto).

Utilizo: Delphi 2010 + trunk2 (commit 10280) | Epson TM-T81 (USB)

Utilizando o componente ACBrSATExtratoESCPOS (ligado a um ACBrPosPrinter) para fazer a impressão pelo compartilhamento (\\localhost\epson), ele não imprime o código de barras no extrado do SAT, fica um espaço em branco mesmo.

Já testei em outra impressora i9- ELGIN e em uma TM-T20 - Epson configurada com o modelo ppEscPosEpson e o código de barras saiu normalmente.

Verifiquei com o pessoal da Epson o que poderia estar incorreto para esta impressora, e me foi passado um exemplo básico, no qual o código de barras é impresso:

procedure TForm1.Button1Click(Sender: TObject);
var impressora : TextFile;
begin
  Assignfile(impressora, '\\dev01\EPSON_USB');
  Rewrite(impressora);
  Writeln(impressora, #29#119#2); //Seta o tamanho do código de barras
  Writeln(impressora, #29#72#1); //Seta o tamanho do código de barras
  Writeln(impressora, 'CODE128C');
  Write(impressora, #29#107#73#13'{C'#35#15#07#61#09#90#08#00#01#41#59); //CODE128C
  Write(impressora, #10); //Line Feed - Imprime texto
  Write(impressora, #29#107#73#13'{C'#90#00#00#83#00#00#44#24#22#64#50); //CODE128C
  Write(impressora, #10); //Line Feed -
  CloseFile(impressora);
end;

Enquanto código da função ComandoCodBarras da unit ACBrEscPosEpson.pas:

1a Linha: #$1D'w'#2#$1D'h('#$1D'H'#0#$1D'kI'#$18'{B3515076109900800014159'

2a Linha: #$1D'w'#2#$1D'h('#$1D'H'#0#$1D'kI'#$18'{B9000008300004424226450'

 

Fora o código de barras os outros comandos estão funcionando perfeitamente (inclusive fiz os testes no exemplo do ACBrPosPrinter, fora o code128, ficou tudo bonito - Parabéns o/)

Agradeço desde já o auxilio

[]'s

Editado por luisArruda

Devemos ser a mudança que queremos ver

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Atualmente o ACBrSATExtratoEscPos usa o CODE128 e não o CODE128C

  FPosPrinter.Buffer.Add('<code128>'+copy(CFe.infCFe.ID,1,22)+'</code128>');
  FPosPrinter.Buffer.Add('<code128>'+copy(CFe.infCFe.ID,23,22)+'</code128>');

Isso porque quase nenhuma impressora suporta nativamente o CODE128C (que usa os Números em BCD)... Também notei que a maioria dos leitores tem dificuldades em processá-lo...

Anexe o Log gerado pelo TACBrPosPrinter... lá é registrado exatamente o que foi enviado para a Impressora

 

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

  • Fundadores

Por padrão está sendo traduzido para CODE128B

-- 22/10 08:36:27:516 - TraduzirTagBloco(<code128>, $-=+ABC123abc) -> [GS]w[ETX][GS]h2[GS]H[NUL][GS]kI[15]{B$-=+ABC123abc

Verifique se esse equipamento suporta esse padrão... Experimente mudar nos fontes para <code128c>

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

Como <code128c> ele consegue imprimir se o texto tiver até 12 caracteres (em anexo o log, um item com 12 e outro com 13),

mas com o código abaixo ele imprime até 22 caracteres

Write(impressora, #29#107#73#13'{C'#35#15#07#61#09#90#08#00#01#41#59);

 

log_correto.txt

Editado por luisArruda
Envio do arquivo log correto.

Devemos ser a mudança que queremos ver

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Apliquei modificações nos Fontes... que devem corrigir a impressão de CODE128c

Por favor atualize o SVN e teste com o PosPrinterTeste...

No ACBrSATExtratoEscPos ainda será necessário mudar a tag <code128> para <code128c>

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

Daniel, deu certo o 128c, ele conseguiu  imprimir até 24 caracteres.

Agora, acha possível essa implementação no ACBrSATExtratoEscPos, de uma forma que não atrapalhe as outras impressoras? talvez uma propriedade para informar o tipo do código de barras?

Devemos ser a mudança que queremos ver

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Sim... estou trabalhando nisso nesse momento... Acho que uma propriedade será o mais simples...

O ideal é que cada Classe saiba se ela suporta o 128c ou não... e se não suportar, ela converta do 128c para 128 automaticamente...

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

  • Fundadores

Aplicadas as seguintes modificações:

-- ACBrSATExtratoESCPOS --
[+] Adicionada a propriedade "ImprimeChaveEmUmaLinha: TAutoSimNao default rAuto"
    Se "rAuto", tenta a Impressão do CODE128 tipo C se o Modelo de impressora
    suportar.    (por: DSA)    

-- ACBrPosPrinter --
[*] Ajuste para correta impressão de CODE128c   (por: DSA)
    http://www.projetoacbr.com.br/forum/topic/25385-tm-t81-sat-código-barra/

[+] Adicionada a propriedade TagsNaoSuportadas: TStringList readonly.
    Permite verificar quais as tags o modelo selecionado não suporta.

-- ACBrEscPosEpson --
[*] Ajuste para considerar valor Default da largura da Barra como 2 (0=2)
    (por: DSA)

-- ACBrEscBematech, ACBrEscDiebold, ACBrEscDaruma --
[*] Ajustes para traduzir Tag de <code128a>, <code128b>, <code128c> para <code128>
[+] Adicionada <code128c> em TagsNaoSuportadas
    (por: DSA)

 

  • Curtir 1
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

Daniel, atualizei os componentes, pelo demo do ACBrPosPrinter sem precisar configurar nada mais, ele imprimiu correto, imprimiu o 128B (apenas 20 caracteres, mas sem problemas quanto a isso, pois a impressora suporta o 128b mesmo)

 

Agora no ACBrSATExtratoESCPOS como pode ser visto no log ( log_ImprimeChaveEmUmaLinha_rAuto.txt), ele enviou o 128c, mas não quebrou a linha de forma automática, por isso não imprimiu (só cabem 22 caracteres no 128c e o código tem 44)

Configurando a propriedade ImprimeChaveEmUmaLinha para rNao percebi que ele consegue dividir a linha, mas nesse caso é usado o 128b (que só aceita 20 caracteres, ele envia 22 - meio código de barra -  log_ImprimeChaveEmUmaLinha_rNao.txt

 

Se precisar de mais algum teste, só pedir.

[]'s

Editado por luisArruda

Devemos ser a mudança que queremos ver

Link para o comentário
Compartilhar em outros sites

  • Fundadores
  • Solution

O código 128c irá reduzir a metade dos caracteres... ou seja, uma chave de 44 caracteres, será convertida em 22 bytes no 128c

Por favor forneça um manual com as informações técnicas desse equipamento...

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

Daniel, atualizei o código e verifiquei a alteração que você fez, esta é a imagem do resultado: http://imgur.com/kEu5Ukr

Solicitei um manual técnico ao suporte da Epson, mas infelizmente eles me informaram não possuir tal documento.

Tomei a liberdade de alterar o ACBrSATExtratoESCPOS.pas, fiz a quebra das linhas e implementei no segundo código de barras do cancelamento a mesma lógica que você utilizou para passar o code128, o resultado http://imgur.com/6oa4oz7

Não estou conseguindo fazer o upload do .pas para você verificar (Você só tem permissão para fazer o uploade de 2mb.) vou tentar na próxima publicação.

Devemos ser a mudança que queremos ver

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Porque você modificou essa linha abaixo ? (esse IF parece interpretar errado)

  ChaveEmUmaLinha := (ImprimeChaveEmUmaLinha = rSim) or
                     ((ImprimeChaveEmUmaLinha = rAuto) and (Suporta128c = False));

 

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

Minha ideia foi só manter em uma linha caso a impressora não suporte 128c, 

IF linear com false é um problema mesmo... ou assim para forçar a divisão da linha com 128c, porque ele realmente não conseguiu imprimir esse código de barras.

ChaveEmUmaLinha := (ImprimeChaveEmUmaLinha = rSim) or
					(ImprimeChaveEmUmaLinha = rAuto);

if (Suporta128c = False) then
	ChaveEmUmaLinha := False

 

Devemos ser a mudança que queremos ver

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Qual o problema com o código original ?
 

  ChaveEmUmaLinha := (ImprimeChaveEmUmaLinha = rSim) or
                     ((ImprimeChaveEmUmaLinha = rAuto) and Suporta128c);

Suporta128c já é boolean

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

Daniel, você tem razão, acabei de testar o em um Elgin i9 o code128c (ela consegue imprimir os 44 caracteres sem quebrar a linha), então o código correto é como você implementou mesmo:

ChaveEmUmaLinha := (ImprimeChaveEmUmaLinha = rSim) or
                     ((ImprimeChaveEmUmaLinha = rAuto) and Suporta128c);

 

É alguma coisa da t81 o fato de não conseguir, vou implementar uma configuração no meu sistema mesmo para contornar essa impressora, em todo caso voltei como estava, deixei somente a implementação do segundo qrCode no cancelamento.

ACBrSATExtratoESCPOS.pas

Editado por luisArruda
  • Curtir 1

Devemos ser a mudança que queremos ver

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3080 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.