Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Fundadores
Postado

Joao e demais..

 

Por favor analisem o seguinte commit no "trunk2"
 

Data: 04/05/2015       (por: DSA)
-- ACBrDevice -- [*] Ajustes de Units para FMX
[+] Adicionado TCriticalSection para evitar chamadas concorrentes a escrita na
    porta do Device [*] Tipo: TACBrECFTipoCodBarra modificado para: TACBrTipoCodBarra
[+] Criada novas classes para processamento genérico de TAGs:
    TACBrTag, TACBrTags, TACBrTagProcessor.

-- ACBrECF -- [*] Modificado para usar o TACBrTagProcessor

-- ACBrECFClass, ACBrECFBematech, ACBrECFDaruma, ACBrECFEpson, ACBrECFFiscNet,
   ACBrECFSwedaStx, ACBrECFEscECF,  -- [*] Mecanismo de tradução de Tags ajustado para TACBrTagProcessor e ACBrConsts

-- ACBrPosPrinter --
[+] Criado novo componente: TACBrPosPrinter, que permite manipular Impressoras
    NAO fiscais, de bobina, usando a linguagem EscPos ou similares, por meio de
    TAGS no texto. Controla a formatação de caracteres Ex: Negrito, expandido,
    condensado, etc e a impressão de Cod.Barras e QRCode.
    Compatível com: ppEscPosEpson, ppEscBematech, ppEscDaruma

 

 

 

Estamos concluindo o Trunk2 e logo ele será o repositório oficial... Por favor analise os fontes: ACBrPosPrinter.pas,  ACBrEscPosEpson.pas, ACBrEscDaruma.pas, ACBrEscBematech.pas (todos na pasta: \trunk2\Fontes\ACBrSerial)

 

Ficará simples fazer impressão em Impressoras EscPOS.. sempre usando Tags.. veja um exemplo em "trunk2\Fontes\ACBrSAT\Extrato\EscPos\ACBrSATExtratoESCPOS.pas"

procedure TACBrSATExtratoESCPOS.GerarRodape(CortaPapel: Boolean = True; Cancelamento: Boolean = False);
var
  QRCode: AnsiString;
begin
  FPosPrinter.Buffer.Add('</fn></linha_simples>');
  if Cancelamento then
     FPosPrinter.Buffer.Add(ACBrStr('<n>DADOS DO CUPOM FISCAL ELETRÔNICO CANCELADO</n>'));

  FPosPrinter.Buffer.Add('</ce>SAT No. <n>'+IntToStr(CFe.ide.nserieSAT)+'</n>');
  FPosPrinter.Buffer.Add(FormatDateTimeBr(CFe.ide.dEmi + CFe.ide.hEmi));
  FPosPrinter.Buffer.Add(' ');
  FPosPrinter.Buffer.Add('<c>'+FormatarChaveAcesso(CFe.infCFe.ID)+'</fn>');
  FPosPrinter.Buffer.Add(' ');

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

  if ImprimeQRCode then
  begin
    QRCode := CalcularConteudoQRCode( CFe.infCFe.ID,
                                      CFe.ide.dEmi+CFe.ide.hEmi,
                                      CFe.Total.vCFe,
                                      Trim(CFe.Dest.CNPJCPF),
                                      CFe.ide.assinaturaQRCODE );

    FPosPrinter.Buffer.Add('<qrcode>'+QRCode+'</qrcode>');
  end;

  if CortaPapel then
    FPosPrinter.Buffer.Add('</corte_total>');
end;

O componente foi criado, levando em consideração as implementações nos fontes: do ACBrNFeDANFeESCPOS.pas, ACBrSATExtratoESCPOS.pas  e nos fontes do João

  • 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.

Postado

Joao e demais..

 

Por favor analisem o seguinte commit no "trunk2"

 

 

 

Estamos concluindo o Trunk2 e logo ele será o repositório oficial... Por favor analise os fontes: ACBrPosPrinter.pas,  ACBrEscPosEpson.pas, ACBrEscDaruma.pas, ACBrEscBematech.pas (todos na pasta: \trunk2\Fontes\ACBrSerial)

 

Ficará simples fazer impressão em Impressoras EscPOS.. sempre usando Tags.. veja um exemplo em "trunk2\Fontes\ACBrSAT\Extrato\EscPos\ACBrSATExtratoESCPOS.pas"

procedure TACBrSATExtratoESCPOS.GerarRodape(CortaPapel: Boolean = True; Cancelamento: Boolean = False);
var
  QRCode: AnsiString;
begin
  FPosPrinter.Buffer.Add('</fn></linha_simples>');
  if Cancelamento then
     FPosPrinter.Buffer.Add(ACBrStr('<n>DADOS DO CUPOM FISCAL ELETRÔNICO CANCELADO</n>'));

  FPosPrinter.Buffer.Add('</ce>SAT No. <n>'+IntToStr(CFe.ide.nserieSAT)+'</n>');
  FPosPrinter.Buffer.Add(FormatDateTimeBr(CFe.ide.dEmi + CFe.ide.hEmi));
  FPosPrinter.Buffer.Add(' ');
  FPosPrinter.Buffer.Add('<c>'+FormatarChaveAcesso(CFe.infCFe.ID)+'</fn>');
  FPosPrinter.Buffer.Add(' ');

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

  if ImprimeQRCode then
  begin
    QRCode := CalcularConteudoQRCode( CFe.infCFe.ID,
                                      CFe.ide.dEmi+CFe.ide.hEmi,
                                      CFe.Total.vCFe,
                                      Trim(CFe.Dest.CNPJCPF),
                                      CFe.ide.assinaturaQRCODE );

    FPosPrinter.Buffer.Add('<qrcode>'+QRCode+'</qrcode>');
  end;

  if CortaPapel then
    FPosPrinter.Buffer.Add('</corte_total>');
end;

O componente foi criado, levando em consideração as implementações nos fontes: do ACBrNFeDANFeESCPOS.pas, ACBrSATExtratoESCPOS.pas  e nos fontes do João

Legal ficou bem bacana vou baixar para testar.

João Paulo F. Bellucci

Analista e Programador

Postado

Daniel ficou muito legal a ideia parabéns!

Não consegui fazer compilar com esse fontes, devo estar fazendo alguma coisa de errado, depois vou tentar com mais tempo.

Se tiver alguma dica de como compilar esse trunk2 agradeço.

 

Analisando o código verifiquei alguns problemas que passei aqui e vou te passar.

 

function TACBrEscBematech.ComandoQrCode(ACodigo: AnsiString): AnsiString;
var
  cTam1, cTam2: Integer;
begin
  if (Length(ACodigo) > 255) then
  begin
    cTam1 := Length(ACodigo) mod 255;
    cTam2 := Length(ACodigo) div 255;
  end
  else
  begin
    cTam1 := Length(ACodigo);
    cTam2 := 0;
  end;
 
  with fpPosPrinter.ConfigQRCode do
  begin
    Result := GS  + 'kQ' + // Codigo QRCode
              ETX + chr(12) +
              chr(LarguraModulo) + chr(ErrorLevel) +
              chr(cTam1) + chr(cTam2) + ACodigo;
  end;
end;

 

Sempre quando concatenar um AnsiString não é saudável deixar por conta da linguagem a conversão, pois o comando chr() retorna string e ao concatenar AnsiString com String o Delphi não esta fazendo legal isso, tive problemas na hora de fazer a homologação das impressoras aqui, e tinha hora que o qrCode não funcionava e verifiquei que o problema estava no comando chr() que vinha lixo dependendo do valor. Para solucionar deixei explicito a conversão AnsiString(chr()).

 

[]s

João Paulo F. Bellucci

Analista e Programador

  • Fundadores
Postado

Compreendido... o problema deve ocorrer principalmente nas versões mais novas do Delphi...

 

HUmm... temos vários pontos desses... mas com "FindInFiles" é tranquilo para justar...

 

Para usar o "Trunk2", é necessária uma instalação Limpa do ACBr... No Trunk2 há quebra de código... Ou seja, aproveitamos para remover propriedades não necessárias e efetuar outras correções que demandam alterações nos fontes...

 

Na pasta principal, há um PDF que descreve algumas das principais diferenças

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.

Postado

Fiz os teste segue as fotos das impressões em anexo.

 

A única que deu problema foi a Bematech TM-4000 TH.

Se você olhar os fontes que mandei ela tem tratamento especial para alguns código.

Obs: A TM-4000 TH não imprime qrCode então é normal que não funcionou.

 

function TACBrESCPOS.GetCodeBar(CodeBar: TACBrCmdESCPPOSCodeBar;
  Dados: String): AnsiString;
var
  CmdCodBar:AnsiString;
  nTam:Integer;
begin
 
   Case CodeBar of
      cbEAN8    : CmdCodBar := FCmd.FCodeBarEAN8;
      cbEAN13   : CmdCodBar := FCmd.FCodeBarEAN13;
      cbSTD25   : CmdCodBar := FCmd.FCodeBarSTD25;
      cbINTER25 : CmdCodBar := FCmd.FCodeBarINTER25;
      cbCODE11  : CmdCodBar := FCmd.FCodeBarCODE11;
      cbCODE39  : CmdCodBar := FCmd.FCodeBarCODE39;
      cbCODE93  : CmdCodBar := FCmd.FCodeBarCODE93;
      cbCODE128 : CmdCodBar := FCmd.FCodeBarCODE128;
      cbUPCA    : CmdCodBar := FCmd.FCodeBarUPCA;
      cbCODABAR : CmdCodBar := FCmd.FCodeBarCODABAR;
      cbMSI     : CmdCodBar := FCmd.FCodeBarMSI;
   End;
 
   if ( FMarcaImpressora = iDaruma ) then begin
      Result := CmdCodBar + AnsiString(Dados) + FCmd.FCodeBarFim;
   end else if ( FMarcaImpressora = iBematech ) then begin
      if CodeBar in [cbCODE128,cbCODE93] then begin
         nTam   := Length(Dados);
         Result := CmdCodBar +
                   AnsiChar(Chr(nTam)) +
                   AnsiString(Dados);
      end else begin
         Result := CmdCodBar + AnsiString(Dados) + FCmd.FCodeBarFim;
      end;
   end else if ( FMarcaImpressora = iEpson ) then begin
      nTam  := Length(Dados)+2;
      Result := CmdCodBar +
                AnsiChar(Chr(nTam)) +
                #123 + #66 +
                AnsiString(Dados);
   end;
end;
 
[]s

 

post-9229-0-74979600-1430944083_thumb.jp

post-9229-0-50394100-1430944100_thumb.jp

post-9229-0-20658200-1430944118_thumb.jp

  • Curtir 1

João Paulo F. Bellucci

Analista e Programador

  • Fundadores
Postado

Oi Joao,

 

Muito obrigado pelos testes... Na Bematech, quais comandos não funcionaram ? (pode ser que esse modelo não suporte alguns dos comandos)

Verifique se diminuindo o parâmetro "ConfigBarras.Largura", os códigos funcionam...

 

A sintaxe de comando para Cod.Barras que estou usando, para EscPos (Epson/Bematech) é o método 2, onde sempre devemos informar o tamanho do Cod.Barras como parâmetro

 

O Teste de Página de Código teve sucesso ?

  • 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.

Postado

Oi Joao,

 

Muito obrigado pelos testes... Na Bematech, quais comandos não funcionaram ? (pode ser que esse modelo não suporte alguns dos comandos)

Verifique se diminuindo o parâmetro "ConfigBarras.Largura", os códigos funcionam...

 

A sintaxe de comando para Cod.Barras que estou usando, para EscPos (Epson/Bematech) é o método 2, onde sempre devemos informar o tamanho do Cod.Barras como parâmetro

 

O Teste de Página de Código teve sucesso ?

Oi Daniel,

 

Os comandos que não funcionaram foram: Alinhar a direita e os comandos para código de barras 39,128, CODABAR e MSI.

As configurações para páginas de código funcionaram sim tudo Ok.

 

[]s

João Paulo F. Bellucci

Analista e Programador

  • 3 semanas depois ...
Postado

Boa tarde.

Estou desenvolvendo as rotinas do SAT conforme o exemplo do ACBrSat com Dimep-SAT(Desenvolverdor) e uma impressora Daruma modelo DR700. Consigo através do exemplo consigo gerar o xml. O problema esta acontecendo na impressão do cupom, que não está gerando as imagens tanto no escopo quanto ExtratoFortes ambos não imprime o qrCode. Uma observação se eu uso o ExtratoFortes e pesso para visualizar o cupom está lindo, mostra tudo porém ao gerar o cupom não é impresso as imagens. Se alguem puder ajudar agradeço.

Postado

Daniel boa tarde.

Com satteste.exe usando o escopo imprimiu o qrcode e o código de barras ficou show. Oque eu deveo fazer. se no exemplo que estou utilizando não fiz nenhuma alteração.

 

  • Fundadores
Postado

Esse exemplo está usando os fontes do Trunk2

 

infelizmente o ACBrInstall ainda não está disponível para ele... Mas acredito que seja possível instalar os Packages manualmente

 

Eu uso Lazarus/FPC,... o Trunk2 já está ajustado para Lazarus...

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.

  • 2 semanas depois ...
Postado

Olá pessoal.

Minha impressão do extrato na Bematech MP 4200 TH USB está saindo como na imagem.

Estou usando ACBrSATExtratoESCPOS e ACBrPosPrinter, com modelo ppEscBematech.

As linhas estão bem desconfiguradas. O QRCode está muito grande e sai um (L0E no início de cada documento.

Alguém conseguiu resolver esses casso ?

Muito Obrigado.

 

Foto do Extrato: https://drive.google.com/a/mbd.com.br/file/d/0B_2ZmUKTHLCvU2p4V192V1ZfNUU/view?usp=sharing

  • Fundadores
Postado

O TACBrPosPrinter não está completamente ajustado a Bematech MP4200... fiquei de receber uma impressora deles, para ajustes...

 

Talvez usando o demo PosPrinterTeste.exe, seja mais simples de tentar achar os pontos que precisam ser corrigidos ou implementados

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.

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