Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Membros Pro
Postado

Bom dia pessoal, estamos com dois clientes que só possuem ECF TH FI Bematech 4000.

Em praticamente todos os caixas estamos enfrentando alguns problemas intermitentes de falha de comunicação e alguns erros estranhos com os ECFs. 

Em um terceiro cliente temos o mesmo ECF sendo utilizado a mais de 6 meses sem problema algum.

 

Efetuei uma pesquisa detalhada no fórum sobre a MP-4000 na tentativa de obter algum esclarecimento sobre esses erros.

 

Seguem:

 

1) O primeiro problema reportado foi que o cliente não consegue emitir a Redução Z no mesmo dia. Ele precisa esperar até o dia posterior para poder emitir o mesmo. E isso ocorre somente no momento da emissão do Z. No log encontrei:

-- 18:30:47:687 DataMovimento
                TX -> [STX][ENQ][NUL][FS]#[ESC]Z[NUL]
   18:30:47:812 RX <- [22][18][20][NUL][NUL][NUL][NUL]
-- 18:30:47:812 DataHoraSB
                TX -> [STX][ENQ][NUL][FS]#[WAK]P[NUL]
   18:30:47:937 RX <- [4][NUL][NUL][NUL][NUL]
-- 18:30:47:937 
                TX -> [STX][ENQ][NUL][FS]#A[128][NUL]
   18:30:48:062 RX <- [NUL][NUL][NUL][NUL][NUL]
-- 18:30:48:062 
                TX -> [STX][ENQ][NUL][FS]#[ESC]Z[NUL]
   18:30:48:187 RX <- [22][18][20][NUL][NUL][NUL][NUL]
-- 18:30:48:187 
                TX -> [STX][ENQ][NUL][FS]#[23]V[NUL]
   18:30:48:312 RX <- [22][18][20][24][20][20][NUL][NUL][NUL][NUL]
-- 18:30:48:312 
                TX -> [STX][ENQ][NUL][FS]#[TAB]H[NUL]
   18:30:48:437 RX <- [18]C[NUL][NUL][NUL][NUL]
-- 18:30:48:437 
                TX -> [STX][WAK][NUL][FS][BS]001243001243R[202][STX]
   18:30:48:812 RX <- [NUL][NUL][NUL][NUL]H ALVARENGA MATERIAIS PARA CONSTRUCAO LTDA         AV.PINTO COBRA,1525 - SAO JOSE CEP:37550-000            POUSO ALEGRE - MG - TEL:(35)3423-6468                                          [ETX]CNPJ:
-- 18:30:48:812 MF Adicional
                TX -> [STX][ENQ][NUL][FS]#(g[NUL]
Bematech EnviaComando_ECF: ACK = 49 Falha: 1
   18:30:50:921 RX <- 
----------------- ERRO -----------------
Erro ao enviar comandos para a Impressora Bematech 
----------------------------------------

-- 18:30:50:921 
----------------- ERRO -----------------
Impressora Bematech não está em linha
----------------------------------------

-- 18:30:53:921 Estado
                TX -> [STX][ENQ][NUL][FS]#[WAK]P[NUL]
   18:30:55:687 RX <- [4][NUL][NUL][NUL][NUL]
-- 18:30:55:687 
                TX -> [STX][ENQ][NUL][FS]#A[128][NUL]
   18:30:55:812 RX <- [NUL][NUL][NUL][NUL][NUL]
-- 18:30:55:812 
                TX -> [STX][ENQ][NUL][FS]#[ESC]Z[NUL]
   18:30:55:937 RX <- [22][18][20][NUL][NUL][NUL][NUL]
-- 18:30:55:937 
                TX -> [STX][ENQ][NUL][FS]#[23]V[NUL]
   18:30:56:062 RX <- [22][18][20][24][20]![NUL][NUL][NUL][NUL]
-- 18:30:58:171 Estado
                TX -> [STX][ENQ][NUL][FS]#[WAK]P[NUL]
   18:30:58:359 RX <- [4][NUL][NUL][NUL][NUL]
-- 18:30:58:359 
                TX -> [STX][ENQ][NUL][FS]#A[128][NUL]
   18:30:58:546 RX <- [NUL][NUL][NUL][NUL][NUL]
-- 18:30:58:546 
                TX -> [STX][ENQ][NUL][FS]#[ESC]Z[NUL]
   18:30:58:750 RX <- [22][18][20][NUL][NUL][NUL][NUL]
-- 18:30:58:750 
                TX -> [STX][ENQ][NUL][FS]#[23]V[NUL]
   18:30:58:937 RX <- [22][18][20][24][20]$[NUL][NUL][NUL][NUL]

2) O ECF tenta fechar um relatório gerencial, mas no fluxo não temos nenhum relatório sendo impresso:

-- 21:21:37:570 Estado
                TX -> [STX][ENQ][NUL][FS]#[WAK]P[NUL]
   21:21:37:710 RX <- [4][NUL][NUL][NUL][NUL]
-- 21:21:37:710 
                TX -> [STX][ENQ][NUL][FS]#A[128][NUL]
   21:21:37:835 RX <- [NUL][NUL][NUL][NUL][NUL]
-- 21:21:37:835 
                TX -> [STX][ENQ][NUL][FS]#[ESC]Z[NUL]
   21:21:37:960 RX <- [BS][18][20][NUL][NUL][NUL][NUL]
-- 21:21:37:960 
                TX -> [STX][ENQ][NUL][FS]#[23]V[NUL]
   21:21:38:101 RX <- [BS][18][20]!![18][NUL][NUL][NUL][NUL]
-- 21:22:15:681 LeituraX
                TX -> [STX][4][NUL][FS][ACK]"[NUL]
   21:22:20:306 RX <- [NUL][NUL][NUL][NUL]
-- 21:22:20:306 NumCCF
                TX -> [STX][ENQ][NUL][FS]#7v[NUL]
   21:22:20:431 RX <- [NUL][18]G[NUL][NUL][NUL][NUL]
-- 21:22:20:431 NumCupom
                TX -> [STX][4][NUL][FS][30]:[NUL]
   21:22:20:556 RX <- [NUL][19][148][NUL][NUL][NUL][NUL]
-- 21:22:20:556 NumGNF
                TX -> [STX][ENQ][NUL][FS]#[7]F[NUL]
   21:22:20:681 RX <- [NUL][NUL]P[NUL][NUL][NUL][NUL]
-- 21:22:20:681 NumGRG
                TX -> [STX][ENQ][NUL][FS]#6u[NUL]
   21:22:20:806 RX <- [NUL][NUL]"[NUL][NUL][NUL][NUL]
-- 21:22:20:806 NumCDC
                TX -> [STX][ENQ][NUL][FS]#4s[NUL]
   21:22:20:931 RX <- [NUL][NUL][NUL][NUL][NUL][NUL]
-- 21:22:23:010 Estado
                TX -> [STX][ENQ][NUL][FS]#[WAK]P[NUL]
   21:22:23:150 RX <- [4][NUL][NUL][NUL][NUL]
-- 21:22:23:150 
                TX -> [STX][ENQ][NUL][FS]#A[128][NUL]
   21:22:23:275 RX <- [NUL][NUL][NUL][NUL][NUL]
-- 21:22:23:275 
                TX -> [STX][ENQ][NUL][FS]#[ESC]Z[NUL]
   21:22:23:400 RX <- [BS][18][20][NUL][NUL][NUL][NUL]
-- 21:22:23:400 
                TX -> [STX][ENQ][NUL][FS]#[23]V[NUL]
   21:22:23:541 RX <- [BS][18][20]!!X[NUL][NUL][NUL][NUL]
-- 21:22:29:150 FechaRelatorio
                TX -> [STX][4][NUL][FS][30]:[NUL]
   21:22:29:291 RX <- [NUL][19][148][NUL][NUL][NUL][NUL]
-- 21:22:29:291 
                TX -> [STX][4][NUL][FS][NAK]1[NUL]
   21:22:29:338 RX <- [NUL][SOH]e[NUL]
----------------- ERRO -----------------
Erro retornado pela Impressora: Bematech

Sem relatório gerencial

----------------------------------------

-- 21:22:29:338 NumCCF
                TX -> [STX][ENQ][NUL][FS]#7v[NUL]
   21:22:29:479 RX <- [NUL][18]G[NUL][NUL][NUL][NUL]
-- 21:22:29:479 NumCupom
                TX -> [STX][4][NUL][FS][30]:[NUL]
   21:22:29:604 RX <- [NUL][19][148][NUL][NUL][NUL][NUL]
-- 21:22:29:604 NumGNF
                TX -> [STX][ENQ][NUL][FS]#[7]F[NUL]
   21:22:29:729 RX <- [NUL][NUL]P[NUL][NUL][NUL][NUL]
-- 21:22:29:729 NumGRG
                TX -> [STX][ENQ][NUL][FS]#6u[NUL]
   21:22:29:854 RX <- [NUL][NUL]"[NUL][NUL][NUL][NUL]

3) É enviado para o ECF duas vezes o comando de fechar o relatório gerencial:

-- 14:48:29:308 LinhaRelatorioGerencial( "[CR][LF][CR][LF][CR][LF]", 0 )
                TX -> [STX][7][NUL][FS][20][LF][LF][LF]N[NUL]
   14:48:29:562 RX <- [NUL][NUL][NUL][NUL]
-- 14:48:29:562 LinhaRelatorioGerencial( "[CR][LF][CR][LF]", 0 )
                TX -> [STX][ACK][NUL][FS][20][LF][LF]D[NUL]
   14:48:29:749 RX <- [NUL][NUL][NUL][NUL]
-- 14:48:29:749 FechaRelatorio
                TX -> [STX][4][NUL][FS][30]:[NUL]
   14:48:29:883 RX <- [NUL][20][19][NUL][NUL][NUL][NUL]
-- 14:48:29:883 
                TX -> [STX][4][NUL][FS][NAK]1[NUL]
   14:48:32:783 RX <- [NUL][NUL][NUL][NUL]
-- 14:48:35:214 FechaRelatorio
                TX -> [STX][4][NUL][FS][30]:[NUL]
   14:48:35:354 RX <- [NUL][20][19][NUL][NUL][NUL][NUL]
-- 14:48:35:354 
                TX -> [STX][4][NUL][FS][NAK]1[NUL]
   14:48:35:401 RX <- [NUL][SOH]e[NUL]
----------------- ERRO -----------------
Erro retornado pela Impressora: Bematech

Sem relatório gerencial

----------------------------------------

-- 14:48:35:401 NumCCF
                TX -> [STX][ENQ][NUL][FS]#7v[NUL]
   14:48:35:526 RX <- [NUL][18]t[NUL][NUL][NUL][NUL]
-- 14:48:35:526 NumCupom
                TX -> [STX][4][NUL][FS][30]:[NUL]
   14:48:35:651 RX <- [NUL][20][19][NUL][NUL][NUL][NUL]
-- 14:48:35:651 NumGNF
                TX -> [STX][ENQ][NUL][FS]#[7]F[NUL]
   14:48:35:776 RX <- [NUL][NUL]H[NUL][NUL][NUL][NUL]
-- 14:48:35:776 NumGRG
                TX -> [STX][ENQ][NUL][FS]#6u[NUL]
   14:48:35:901 RX <- [NUL][NUL][25][NUL][NUL][NUL][NUL]

Gostaria da opinião de vocês sobre o assunto na tentativa de esclarecer o que pode estar ocorrendo para eu poder contornar essa situação para o cliente. Desde já agradeço.

  • Consultores
Postado

1) No log não parece estar sendo chamado o comando da Redução Z. Se estiver, o timeout pode estar muito baixo. Tente aumentar ele. Aqui no fórum tem algumas dicas para isso.

2) O comando de fechar relatório foi chamado. Muito difícil ele não estar em algum lugar do código. Tente verificar os eventos do ACBrECF. Ou talvez algum comando para corrigir o estado do ECF, já que o comando anterior parece fazer referência a isso.

3) Mesmo caso anterior.

 

Sugiro pegar o aplicativo de exemplo (ECFTeste) e testar com ele a impressão da Redução Z. Só por desencargo de consciência.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Membros Pro
Postado

Antes de chamar a função:

ecf.AcbrEcf.ReducaoZ(0);

Eu seto as seguintes propriedades no componente ACBrECF:

ecf.AcbrEcf.TimeOut       := 60;
ecf.AcbrEcf.ReTentar      := False;
ecf.AcbrEcf.ExibeMensagem := False;

Será que os valores das propriedades acima estaria influenciando em algo?

  • Consultores
Postado

Antes de chamar a função:

ecf.AcbrEcf.ReducaoZ(0);

Eu seto as seguintes propriedades no componente ACBrECF:

ecf.AcbrEcf.TimeOut       := 60;
ecf.AcbrEcf.ReTentar      := False;
ecf.AcbrEcf.ExibeMensagem := False;

Será que os valores das propriedades acima estaria influenciando em algo?

Acho que não. Você poderia postar o log completo da redução Z? Se possível testar com o ECFTeste seria bom.

 

E os outros casos você chegou a procurar pelos eventos do ACBrECF ou algum lugar no seu aplicativo que trata/corrige o estado do ECF?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Membros Pro
Postado

Estou adicionando os logs do nosso sistema e o gerado pelo ECFTeste. Pelo ECFTeste eu consegui emitir a redução Z neste cliente.

 

Em outro cliente com a MP-4000 consigo emitir a redução z normalmente pelo nosso sistema.

 

Sobre o erro de fechamento do relatório vou refazer os testes amanhã. Agradeço.

LOGECF03_20141217.TXT

LOGECF03_20141217_ACBR-ECFTESTE.TXT

  • Fundadores
Postado

O ACBrECF chama o comando de Fechar o Relatório Gerencial ou CDC internamente e em situações pontuais... mas de forma controlada...

 

Ou seja... ele não deixa o Exception vazar... veja:

 

 


procedure TACBrECFBematech.CancelaCupom;
........
  if TemRel then
  begin
     try
       FechaRelatorio ;   { Fecha relatorio se ficou algum aberto (só por garantia)}
     except   // Exceçao silenciosa, pois a Impressora pode nao estar em Estado
     end ;    // de Relatorio.
  end ;
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.

  • Membros Pro
Postado (editado)

Entendo. Então no log a linha:

-- 17:27:39:281 FechaRelatorio
                TX -> [STX][4][NUL][FS][30]:[NUL]
   17:27:39:406 RX <- [22]a[137][NUL][NUL][NUL][NUL]
-- 17:27:39:453 
                TX -> [STX][4][NUL][FS][NAK]1[NUL]
   17:27:39:500 RX <- [NUL][SOH]e[NUL]
----------------- ERRO -----------------
Erro retornado pela Impressora: Bematech

Sem relatório gerencial

----------------------------------------

Não causaria nenhum problema a princípio, correto?

 

Comparando os logs do cliente que funciona normalmente com a MP-4000 e com o do cliente que não consegue emitir a redução Z eu obtive:

 

- ECF NORMAL:

-- 21:43:10:500 MF Adicional
                TX -> [STX][ENQ][NUL][FS]#(g[NUL]
   21:43:10:640 RX <- BE091410100011218171[NUL][NUL][NUL][NUL]
-- 21:43:10:640 NumVersao
                TX -> [STX][ENQ][NUL][FS]#[11]J[NUL]
   21:43:10:765 RX <- [NUL][SOH][NUL][NUL][NUL][NUL]

- ECF COM PROBLEMA DE EMISSÃO DO Z:

-- 17:29:25:578 MF Adicional
                TX -> [STX][ENQ][NUL][FS]#(g[NUL]
Bematech EnviaComando_ECF: ACK = 58 Falha: 1
   17:29:27:687 RX <- 
----------------- ERRO -----------------
Erro ao enviar comandos para a Impressora Bematech 
----------------------------------------

-- 17:29:27:687 
----------------- ERRO -----------------
Impressora Bematech não está em linha
----------------------------------------

Não consegui encontrar o comando 'ReducaoZ' que aparece no ECFTeste, apenas o comando 'MF Adicional'.

 

Daniel, em relação aos logs da Redução Z, você teria alguma opinião do que poderia estar ocorrendo?

Editado por Intelliware
Postado

Bom dia  a todos

 Amigo vc ja comparou o SISTEMA OPERACIONAL que esta no cliente que esta funcionando tudo correto e o que esta com problema se for o mesmo vc ja verificou dll do fabricante se são as mesmas versões nos dois clientes , verificar tmb se sua aplicação esta sendo executada  como administrador, sao dicas que aconteceu comigo e quando fui analizar era dll do fabricante desatualizada e sem registrar

 

 

Grato

 

Deignerba

  • Fundadores
Postado

O problema parece estar na chamada do método LeituraMemoriaFiscalSerial...

 

Aparentemente o componente está concluindo a leitura antes de todos os dados serem enviados do ECF...

 

E com isso, o ECF fica indisponível para os próximos comandos... (por isso os erros de Transmissão e ECF fora de linha)

 

Vou debugar essa rotina e verificar o que está ocorrendo...

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.

  • Fundadores
Postado

O problema ocorre porque neste ECF, há um caracter [ETX] (ou #3) programado no Cabeçalho...
 

   17:51:04:406 RX <- [NUL][NUL][NUL][NUL]H ALVARENGA MATERIAIS PARA CONSTRUCAO LTDA         AV.PINTO COBRA,1525 - SAO JOSE CEP:37550-000            POUSO ALEGRE - MG - TEL:(35)3423-6468                                          [ETX]CNPJ:

 

O protocolo da Bematech diz que no caso de Leituras pela Serial, onde a quantidade de dados a serem retornados é variável, o ETX sinaliza como Fim de Transmissão..
 

 

No caso de “R” no parâmetro 3, o recebimento será da seguinte forma:
A    impressora    enviará    ACK    após    receber    o    comando    seguido    dos    dois    bytes    de    STATUS,    [sT1]    [sT2].    Após
tratá-lo,    enviará    os    dados    em    formato    ASCII,    terminando    com    ETX    (03h).

 

Por isso o ACBrECF encerra a leitura da Serial, porém o ECF ainda está enviando dados...

 

A correção proposta nesse Patch (em anexo), é manter o ACBrECF aguardando por 1 segundo, para ter certeza de que não há mais nada a ser lido na Serial

Index: ACBrECFBematech.pas
===================================================================
--- ACBrECFBematech.pas    (revision 7944)
+++ ACBrECFBematech.pas    (working copy)
@@ -1057,7 +1057,11 @@
      if (Length(Retorno) >= 2) and (copy(Retorno,1,2) <> #0+#0) then  // Retornou Erro, não virá ETX
         Result := True
      else
-        Result := (pos(ETX, RightStr(Retorno,6)) > 0)
+      begin
+        Result := (pos(ETX, RightStr(Retorno,6)) > 0) ;
+        if Result then
+           Result := not fpDevice.Serial.CanReadEx(1000);  // Aguarda por 1 seg sem dados
+      end;

Poderia aplicar o Patch e verificar se o problema é corrigido ?

 

 

ACBrECFBematech.pas.patch.zip

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

  • Membros Pro
Postado

Blz Daniel, vou adicionar a correção aqui e já colocar no cliente e acompanhar. Assim que tiver um retorno eu posto se o problema foi corrigido. Agradeço.

  • Fundadores
Postado

Obrigado... O Log mostra que houve um intervalo de 8 segundos para concluir o comando da LeituraMemoriaFiscalSerial... Provavelmente essa correção está penalizando ele em 2 segundos (pois existem dois ETX na resposta)

 

Mas funcionou como o esperado... o comando LeituraMemoriaFiscalSerial foi concluído com sucesso

 

A correção já está no SVN

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

  • 2 semanas depois ...
  • 1 mês depois ...
Postado (editado)

Bom dia,

 

estou com problemas na alteração citada acima enviada na revisão 7977.

O erro ocorreu ao recuperar o valor da DataHoraSB.

Voltei para a maneira antiga e não apresentou erros, apesar de nos logs aparecerem a linha ACK = 6 Falha: 0 várias vezes.

 

Impressora do Cliente

  • Bematech MP-4000 TH FI
  • Conexão: USB
  • Conversor: BematechVirtualSerialPort_x64_v3.0.0.3.

 

Anomalias estranhas nos Logs

  • ACK = 6 Falha: 0

 

Já analisei os tópicos abaixo devido a conexão com a bematech

 

 

No momento meu código está assim:

     begin        Result := (pos(ETX, RightStr(Retorno,6)) > 0) ;
        //if Result then
           //Result := not fpDevice.Serial.CanReadEx(1000);  // Aguarda por 1 seg sem dados
      end;

O que pode se fazer quanto a isso?

 

 

Obs: nos logs alterei algumas informações pessoais do cliente.

LogDataHoraSB_Erro.txt

LogDataHoraSB_OK.txt

Editado por Luiz Paulo

Saudações,
Luiz Paulo Ferrari

Postado

No meu ver, entramos num dilema.

 

Se comentar essas 2 linhas resolve o meu problema, mas volta o problema citado anteriormente nesse tópico.

Se deixar esse duas linhas resolve o problema do tópico, mas não funciona no meu e talvez em outros que se deparem essa situação.

 

Agora o que pode ser feito para beneficiar a maioria dos usuários dos Fontes ACBr?

 

Eu simplesmente deixar comentado em meus fontes e deixar como está ou subir uma alteração para o SVN que possa de alguma maneira abraçar as duas situações?

Saudações,
Luiz Paulo Ferrari

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