Ir para conteúdo
  • Cadastre-se

yan

Membros
  • Total de ítens

    2
  • Registro em

  • Última visita

Posts postados por yan

  1. On 01/11/2014 at 10:11 AM, welkson said:

    Pessoal,

     

    A Bematech respondeu o e-mail e consegui resolver o problema.

     

    Acredito que a solução ideal seria criar uma propriedade no componente TACBrNFeDANFeESCPOS para informar o padrão de QRCode deve ser impresso (já que no ESC/POS não tem um comando padronizado para imprimir QRCode, cada fabricante está fazendo do seu jeito).

     

    Como não sou expert em criação de componentes, reutilizei uma propriedade do componente que na minha análise (rápida) não está sendo utilizado: Impressora

     

    Se o campo estiver vazio, o componente vai considerar que a impressora ligada é uma Epson (set de comandos default), se o campo estiver preenchido com a string "Bematech" (acredito que seria mais interessante algum tipo de record: tQRCodeBematech, tQRCodeDaruma, etc.) o componente vai enviar o set de comandos do QRCode no padrão Bematech.

     

    Na segunda-feira devo receber uma Daruma DR700 que compramos para NFCe, vou fazer os testes, e se necessitar de ajustes irei fazer e disponibilizar nesse mesmo tópico.

     

    Para que a impressão seja feita corretamente é necessário configurar o set de comandos "ESC/POS" via aplicativo da Bematech (Bematech User Software).

    
    procedure TACBrNFeDANFeESCPOS.GerarRodape(CortaPapel: Boolean = True; Cancelamento: Boolean = False);
    var
      qrcode : string;
      cCaracter:AnsiString;
      i, cTam1, cTam2:Integer;
    begin
      FBuffer.Add(cCmdFonteNormal+'------------------------------------------------');
      FLinhaCmd := cCmdAlinhadoCentro+'Consulta via leitor de QR Code';
      FBuffer.Add(FLinhaCmd);
      FBuffer.Add(' ');
    
    
    
    
      qrcode := NotaUtil.GetURLQRCode( FpNFe.ide.cUF, FpNFe.ide.tpAmb,
                                       FpNFe.infNFe.ID,
                                       DFeUtil.SeSenao(FpNFe.Dest.idEstrangeiro <> '',FpNFe.Dest.idEstrangeiro, FpNFe.Dest.CNPJCPF),
                                       FpNFe.ide.dEmi,
                                       FpNFe.Total.ICMSTot.vNF, FpNFe.Total.ICMSTot.vICMS,
                                       FpNFe.signature.DigestValue ,
                                       TACBrNFe( ACBrNFe ).Configuracoes.Geral.IdToken,
                                       TACBrNFe( ACBrNFe ).Configuracoes.Geral.Token);
    
    
      //bematech
      if (FImpressora = 'Bematech') then
         begin
            //formato Bematech (http://partners.bematech.com.br/2014/09/imprimindo-qrcode-na-impressora-mp-4200-th/)
    
            //OBS: para que o QRCode seja impresso na Bematech é necessário instalar o firmware 1.6 ou superior (http://partners.bematech.com.br/2013/03/edicao-139-mp-4200-th-com-qr-code/)
            //     essa implementação utiliza o set de comandos ESC/POS. Para habilitar na impressora utilize o aplicativo "Bematech User Software", e na aba "Configurações Adicionais" selecione
            //     o tipo de comando "Esc/POS"
    
            for i := 1 to length(qrcode) do
                begin
                   cCaracter := cCaracter + Chr(Ord(qrcode[i]));
                end;
    
            if (length(qrcode) > 255) then
              begin
                 cTam1 := length(qrcode) mod 255;
                 cTam2 := length(qrcode) div 255;
              end
            else
              begin
                 cTam1 := length(qrcode);
                 cTam2 := 0;
              end;
    
            FLinhaCmd :=  #27 + #97 + #1 +             //esse código faz a centralização
                          #29 + #107 + #81 +           //esse é o do qr code
                          #3 + #8 +                    //aqui é o tamanho do QRCode
                          #8 + #1 +                    //dimensão (8)
                          Chr(cTam1) +                 //resto da divisão correspondente ao tamanho do texto / 255
                          Chr(cTam2) +                 //divisão correspondente ao tamanho do texto
                          cCaracter;                   //aqui começa o texto
    
         end
         
      else if (FImpressora = 'Daruma') then
         begin
    
         end
    
      else //default (Epson ESC/POS)
         begin
            //formato Epson ESC/POS
            FLinhaCmd := chr(29)+'(k'+chr(4)+chr(0)+'1A2'+chr(0)+
                         chr(29)+'(k'+chr(3)+chr(0)+'1C'+chr(4)+
                         chr(29)+'(k'+chr(3)+chr(0)+'1E0'+
                         chr(29)+'(k'+Int2TB(length(qrcode)+3)+'1P0'+qrcode+
                         chr(29)+'(k'+chr(3)+chr(0)+'1Q0';
         end;
    
    
      FBuffer.Add(FLinhaCmd);
    
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add(cCmdFontePequena+('Protocolo de Autorização:'+Trim(FpNFe.procNFe.nProt)+' '+DFeUtil.SeSenao(FpNFe.procNFe.dhRecbto<>0,DateTimeToStr(FpNFe.procNFe.dhRecbto),''))+cCmdFonteNormal);
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
      FBuffer.Add('');
    
      if CortaPapel then
         FBuffer.Add(cCmdCortaPapel);
    end;
    

    Acredito que o componente está ignorando algumas propriedades, como NumCopias, pois sempre sai 2 vias mesmo quando configurado para 1 (tentei com ViaConsumidor False mas o mesmo comportamento ocorre). Vou analisar com mais calma o código pra ver se acho onde está enviando essa segunda cópia.

    Amigo, salvou meu emprego :D, Parabéns pelo código e por compartilhar! funcionou perfeito a impressão aqui, estava com o mesmo problema de 255 caracteres. Muito Obrigado!!!!

  2. Pessoal bom dia,

    Estou passando pelo mesmo problema em DF (Emissor nao habilitado para emissao da NF-e). Segui todas as orientações descritas neste tópico:

    Estou testando em ambiente de homologação, UF = "DF", WS = "svrs", o CNPJ do cliente foi credenciado por mim, sexta feira passada (17/06/2016) como emitente de NFCE (NFE ele já tinha credenciado) mas mesmo seguindo as orientações aqui não deu certo:

    1. Se não enviar o idToken, existe validação dizendo que tem que ser informado.
    2. Se não enviar o Token (CSC), também existe validação falando que deve ser informado
    3. Até momento estava testando com o CSC gerado pelo SEFAZ DF do cliente, o que também dá a msg, testei então como idToken = "000001" e Token = "0123456789" e mesmo assim aparece a mensagem.

    Alguém conseguiu progredir com está validação? Alguma solução?

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