Ir para conteúdo
  • Cadastre-se

wrmedeiros

Membros
  • Total de ítens

    225
  • Registro em

  • Última visita

  • Days Won

    1

Tudo que wrmedeiros postou

  1. Bom dia Thiago. Só estou conseguindo trabalhar na impressora a noite... mais tarde faço testes e retorno com as respostas. Aparentemente está tudo certo com a configuração da impressora (UTF8, BEMA/POS, etc.)... lembrando que o comando de conversão só é executado se a propriedade MarcaImpressora estiver definida como iBematech no componente ACBrESCPOS; Testei no Delphi 2006, você usa qual?
  2. André, Estou anexando o código do ACBrNFeDANFeESCPOS com os problemas de acentuação corrigidos. Resumo das alterações: Criei um método CodificaStringESCPOS para codificar em UTF8 todas as strings quando o modelo de impressora for Bematech; Alterei o cCmdPagCod/codepage para #8 (UTF-8); Na linha 203 onde é enviado um comando para imprimir a logomarca gravada na impressora, coloquei um IF para só enviar o comando L0E quando a impressora for Epson (TODO: futuramente implementar a impressão de logomarca quando usando Bematech); Testei os demais comandos (negrito, condensado, corte de papel, etc), e estão todos corretos. Tentei manter o estilo de código do projeto ACBr, mas pode ter ficado algo fora do padrão, fique a vontade para corrigir, fazer refactory na implementação, etc. Em breve começo os testes com Daruma e mando o código quando estiver pronto. ACBrNFeDANFeESCPOS.pas
  3. André, fiz o teste, os acentos continuam quebrados. Fiz o seguinte, voltei a impressora para UTF-8, e fiz um pequeno aplicativo no Delphi para fazer testes de conversão de encoding e consegui imprimir os acentos corretamente quando usei UTF8Encode. Algo assim: procedure TForm5.Print(); var F:TextFile; begin AssignFile(F, 'COM5'); Rewrite(F); WriteLn(F, UTF8Encode(Text)); //codifico o texto recebido em UTF-8 CloseFile(F); end; Dessa forma os acentos são corretamente, ou seja, poderíamos alterar o ACBrESCPOS incluindo essa instrução nas linhas que recebem dados do cliente, produtos, etc. Quanto ao problema do (LOE está na seguinte linha: FBuffer.Add(FLinhaCmd+chr(29)+'(L'+chr(6)+chr(0)+'0E '+chr(1)+chr(1)); // Imprimindo logo já gravado na memória Não encontrei no manual de programação da impressora esse comando L0E.. comentei esse trecho apartir do +chr(29) e o problema sumiu. Essa linha não é para a Epson?
  4. Esse aqui meu amigo: http://partners.bematech.com.br/2013/03/edicao-139-mp-4200-th-com-qr-code/
  5. Só pra registrar, acabo de falar com o suporte da Daruma, e a mesma não suporta ESC/POS. Teremos que implementar essas diferenças de cada modelo de impressora. SET de comandos da Daruma: http://bit.ly/18wYfO2 Peço desculpas por usar esse tópico (que é sobre Bematech) para falar sobre outros modelos de impressora. Acredito que para efeitos de histórico seria interessante mudar o título para "ACBrESCPOS - Impressoras Compatíveis" #sugestão
  6. André, obrigado pelo retorno. Só vou ter acesso a impressora a noite, irei fazer os testes e retorno pra você. Configurei a impressora com vários modelos de codepage (UTF-8, etc.), mas os acentos não são impressos (mesmo o Notepad++ configurado para UTF-8). Depois de muito teste descobri que fazendo um "echo çâéã > COM5" direto pelo MS-DOS funcionava... tentei descobrir qual codepage o MS-DOS usava, na internet dizem que é CP850, mas se pegar a saída do ECHO, jogar para um TXT, e abrir pelo Notepad++ ele avisa que se trata de codepage "ANSI". Codepage/Charset etc. não é muito minha praia, mas vou continua pesquisando e tentando contribuir de alguma forma.
  7. André, Só consegui imprimir acentos usando o codepage 850, só temos que ver como mandar isso para a impressora via Delphi (fiz testes pelo prompt e usando Notepad++). Screenshots estão anexados. Testei também a impressão do DANFE, e ficou igual ao do colega (LOE no início).
  8. Tchuck, você habilitou o modo BEMA/POS via "Bematech Tool"? André, fiz os testes com a última revisão usando a impressora Daruma DR-700e... no aplicativo de configuração da Daruma tem 2 set's de comandos, testei com os dois, mas o resultado não é muito bom (anexo). Fiz o teste com o modelo "Epson" na esperança que a Daruma tivesse seguido o padrão ESC/POS, mas saiu tudo quebrado... testei como "Bematech", mas o BEMA/POS é bem específico e já esperava que não funcionasse. Vou dar uma lida no material da Daruma e tentar implementar as alterações. Quanto a Bematech, vou ligá-la agora para fazer testes e em outra mensagem posto os resultados. Obrigado pela força.
  9. Eles me mandaram um aplicativo de exemplo, estou fazendo testes com ele, ainda não testei usando o ACBrESCPOS. Vou testar ainda essa semana e mantenho vocês informados.
  10. No aplicativo de configuração da Bematech é possível informar qual charset a ser utilizado para o set de comandos BEMA/POS. Estou com uma impressora dessas em casa, vou tentar fazer alguns testes, só não prometo para hoje.
  11. Você teve que mudar a configuração da impressora de ESC/POS para BEMA/POS no utilitário da Bematech, certo? Se fez isso, é bem provável que a impressão do QRCode deixe de funcionar. O set de comandos BEMA/POS é totalmente diferente do ESC/POS.
  12. Thiago, O meu também fica dessa forma, acredito que precisa de alguns ajustes na quantidade de caracteres por linha. O QRCode imprimiu certinho?
  13. Pessoal, Testei as alterações que André fez e está tudo OK. Já recebi a Daruma, tive alguma dificuldade para imprimir o QRCode (consegui imprimir, mas está pequeno)... o pessoal da Daruma ontem me enviou um exemplo em Delphi (sem DLL), vou fazer testes e quando estiver implementado no ACBr envio o código aqui pelo fórum.
  14. Nilton, Fugindo um pouco do tópico... na sua mensagem você comentou sobre as diferenças de conceitos de ECf e NFCe, concordo, realmente são muitas... tive esse mesmo confronto de "mundos diferentes" quando fui implementar NFe pela primeira vez em 2008 (o cliente tinha regime especial, e foi "convidado" a emitir NFe/SPED Fiscal/etc. nos pegando totalmente de surpresa). Em um vídeo que vi da Daruma (Claudenir) ele fala sobre isso, que muita gente opta por criar um novo aplicativo, ou módulo para implementar NFCe, etc., mas apesar de está ciente das dificuldades, estou tentando fazer tudo no mesmo aplicativo, e da forma mais transparente possível para o usuário (a operação do sistema em si até agora não mudou em nada, só o fato da impressora ser diferente e sair um QRCode no fim). Ontem consegui aprovar as transações com TEF, e fiz algumas pequenas adaptações no ACBrESC/POS para imprimir o comprovante. Depois vou ver se foi a melhor alternativa e disponibilizo o código para que a pessoal comente e sugira melhorias. Mais uma vez obrigado pela ajuda.
  15. Boa tarde Nilton. Pois é meu amigo, já vi muitos casos de fraudes nos cancelamentos (supervisor + operadora finalizavam cupom, recebiam o dinheiro do cliente, em seguida cancelavam o cupom), devido isso não gosto muito da ideia de "limpar" a tela e não registrar em lugar algum que aquilo ocorreu. No caso do NFCe, durante a digitação do cupom se algum item for cancelado, eu marco no banco para não mandar para o XML, mas deixo o registro no banco para fins de auditoria (supervisor que autorizou, hora, etc.). Já no caso do cupom inteiro ser cancelado, devido a questão da numeração da NFCe, fiquei na dúvida qual a melhor forma para proceder. Mas concordo com você, um número maior de inutilização ou cancelamento de NFCe pode também causar problemas. Vou verificar a possibilidade de cancelar o cupom atual, registrar em uma tabela de auditoria, mas manter a numeração disponível para o cupom seguinte... mas no caso do cupom já ter sido finalizado e gerado NFCe, não tem muito o que fazer, tem que cancelar mesmo. Obrigado pelas dicas amigo!
  16. Senhores, boa tarde! Como vocês estão tratando o cancelamento do cupom ATUAL (cancelamento no meio do cupom, antes de transmitir). Ex.: cliente no meio do cupom descobre que esqueceu a carteira e manda cancelar. Como o cupom não foi finalizado e enviado para o SEFAZ, não tem como cancelar a NFCe. A opção seria marcar o cupom como cancelado no banco e inutilizar a numeração. Uma outra opção seria limpar o documento atual (apagar tudo) mantendo a mesma numeração para uma nova venda, mas isso para efeitos de auditoria/controle de cancelamentos não é legal. Em resumo: o que acham da ideia de CANCELAR NFCe quando se tratar de "Documento anterior", e INUTILIZAR NUMERAÇÃO quando se tratar de "Documento atual"?
  17. Em breve o suporte para Daruma também será incluído no código. A impressora já está com o dono da empresa, mas ele esqueceu de me entregar ;( Testei o código de André (seleção de impressoras para impressão de QRCode) e funcionou perfeitamente.
  18. Marcelo, Estou fazendo alguns testes com a Bematech MP4200-TH (não fiscal), e após a aprovação do SEFAZ a impressora costuma imprimir tudo em pouco mais de 1 segundo (é muito rápido). No caso da Bematech tem um aplicativo de configuração onde você informa se prefere qualidade ou velocidade. No meu caso optei por velocidade, mas a qualidade é tranquilo (consigo ler o QRCode, etc. sem dificuldade). Lembrando que não estou usando nenhum gerador de relatórios (QuickReport, Fortes, etc.), estou usando o ACBrESC/POS
  19. Não estou no trabalho agora, mas dei uma analisada rápida [1] e ficou excelente. Obrigado André. http://svn.code.sf.net/p/acbr/code/trunk/Fontes/ACBrNFe2/ACBrNFeDANFeESCPOS.pas Chegar em casa testo com a impressora e retorno pra vocês. Quando receber a Daruma faço a alteração e submeto para que seja integrado ao código.
  20. De qualquer forma, os fontes ainda não estão prontos para serem submetidos ao repositório oficial. Decidi postar o trecho no qual mexi para que o pessoal pudesse dar opiniões. Observe que no bloco de comandos da Daruma não tem nada, só o IF mesmo. Sem falar que "reaproveitar" a propriedade "Impressora" não é uma boa prática, ficaria mais interessante se fosse criado algum tipo de "record" onde o usuário selecionasse "Daruma, Bematech, Epson", deixando a Epson como padrão para quem já está usando em produção (atualmente o componente só suporta Epson/DASCOM). Devo receber a impressora Daruma DR700 hoje ou amanhã, até o fim de semana implemento o QRCode também para esse modelo e submeto os fontes completos.
  21. Perfeito Juliomar. Quando chegar em casa faço cópia dos fontes e anexo nessa mesma thread. Obrigado pelo retorno.
  22. Desconsiderem esse último trecho onde informo que o componente sempre imprime 2 vias. Foi erro meu =) O componente automaticamente imprime quando a propriedade DANFE está configurada, e mesmo assim logo após o comando Enviar eu estava enviando o comando Imprimir, o que o ocasionava 2 impressões.
  23. Márcio, bom dia. Você está usando o ACBrESCPOS ou algum gerador de relatório? (QuickReport, Fortes, etc.) Se está usando ACBrESCPOS, a impressão é muito rápida (o suporte a QRCode submeti ontem para o grupo). De qualquer forma no aplicativo de configuração que acompanha a impressora é possível definir se prefere qualidade ou velocidade. Para velocidade o ideal é sempre usar ESC/POS, esses geradores de relatórios acredito que usam fontes TrueType, e devem ser bem mais lentas que as fontes nativas da impressora. Amanhã devo receber uma Daruma, e em breve o componente ESC/POS também irá suportar a mesma.
  24. Com os fontes atuais do ACBr (01/11/2014) o componente de NFe para QR não funciona (falta as propriedades FullJustify e XLColumn). Essas propriedades só estão presentes na versão 5.02.2 (que de acordo com o site do QuickReport[1] é a última versão compatível com Delphi 2006). Pelo que vi nos fontes essas propriedades sempre estão com valores defaults (XLColumn = 0 e FullJustify = False), para compilar com meu Delphi 2006 fiz as seguitnes alterações no Notepad++: Via Notepad++ -> Localizar -> Localizar em Arquivos Localizar: XLColumn = 0 Substituir por: (vazio) Filtros: *.dfm Pasta: C:\PROJETOS\ACBR\Fontes\ACBrNFe2 Basta clicar em "Substituir nos Arquivos" Em seguida repita o mesmo procedimento para o texto: FullJustify = False Tiver tempo vou atualizar para essa versão 5.02.2, mas isso costuma dar bastante trabalho no meu ambiente, pois uso o QRTee, que é bem chatinho de instalar (dependência com TeeChart, etc.). [1] http://www.quickreport.co.uk/fixes.aspx
  25. 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.
×
×
  • 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.

The popup will be closed in 10 segundos...