Ir para conteúdo
  • Cadastre-se

dev botao

Problema Ao Imprimir Ccd (Cupom Vinculado)


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

Recommended Posts

Pessoal bom dia !!

 

Estou com um problema ao imprimir CCD com impressão completa. (Impressora Bematech MP-4000, mas em clientes com Daruma tive o mesmo problema)

 

Exemplo do problema:

Realizei uma venda no cartão no valor de 12,50 na forma de pagamento cartão índice [03] no meu caso, logo em seguida mandei um comando para impressão do CCD, passando corretamente os parâmetros, carrego os comprovantes 1ª Via e 2ª Via e passo no método CupomVinculado, na primeira vez que executo imprimi corretamente, posteriormente em vendas subsequentes a impressão começa a viajar, seja com 1 ou mais cartões...

 

Em uma venda com 1 cartão deve sair, a via do cliente e do estabelecimento, na primeira vez imprime corretamente, posteriormente as vezes duplica a quantidade de vias na impressão (Como na imagem em anexo), na impressão linha a linha funciona corretamente, segue o código utilizado abaixo: (obs: No ECFTeste acontece o mesmo problema).

 

  Arq := TStringList.Create;
  Arq2:= TStringList.Create;
  Imp := TStringList.Create;
  try

    // Limpando as StringList
    Arq2.Clear;
    Arq.Clear;
    Imp.Clear;
   

     // Carregando o primeira via

    Arq.LoadFromFile(ExtractFilePath(Application.ExeName)+'Comprovantes SITEF\sitef1via.txt');

 

     // Carregando a segunda via
    Arq2.LoadFromFile(ExtractFilePath(Application.ExeName)+'Comprovantes SITEF\sitef2via.txt');

 

    // Adicionando na String de impressão primeira via
    Imp.AddStrings(Arq);

 

    // Adicionando na String de impressão segunda via
    Imp.AddStrings(Arq2);

 

     // limpando a Strings de

    Arq2.Clear;
    Arq.Clear;

    ACBrECF1.CupomVinculado(ACBrECF1.NumCOO,'03',12.50,Imp,1);

 

    // Limpando a String de impressão
    Imp.Clear;

  finally

    // Liberando os objetos da memoria
    FreeAndNil(Arq);
    FreeAndNil(Arq2);
    FreeAndNil(Imp);
  end;

 

Fiz uma depuração até o momento em que o comando é enviado ao equipamento e a String chega corretamente.

 

// Código da Classe ACBrECFBematech.pas

 

while Length( Linha ) > 0 do
     begin
        P := Length( Linha ) ;
        if P > MaxChars then    { Acha o fim de Linha mais próximo do limite máximo }
           P := PosLast(#10, LeftStr(Linha,MaxChars) ) ;

        Buffer := copy( Linha, 1, P)  ;
        Espera := Trunc( CountStr( Buffer, #10 ) / 4) ;

        AguardaImpressao := (Espera > 3) ;
        EnviaComando( #67 + Buffer, Espera ) ;

        Linha  := copy( Linha, P+1, Length(Linha) ) ;   // O Restante

 

Se alguém passou por isso e souber como resolver agradeço.

 

post-4944-0-37934100-1423500876_thumb.jp

post-4944-0-94515000-1423500918_thumb.jp

Editado por Mário Mesquita
Link para o comentário
Compartilhar em outros sites

  • Consultores

Nunca vi essa situação. Anexe o log do ACBrECF para análise.

[]'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.
Link para o comentário
Compartilhar em outros sites

EM Barbosa realizando testes aqui, notei que o problema só acontece quando estou usando comunicação direta USB, muito estranho...
Aí testei usando um cabo USB Serial não tive problemas nem na Bematech nem na Daruma...
Parece que a string fica bulferizada em algum lugar, porque depurei até o momento em que o comando era enviado para impressora e a String chegava corretamente, muito estranho vou ver se consigo algo a mais aqui...

No ACBrLog ele enviava a String errada para o comando na impressora. (Como no arquivo em anexo)
Mas obrigado pela ajuda.

acbrlog.txt

Link para o comentário
Compartilhar em outros sites

  • Consultores

Ficou parecendo mesmo que é um problema de comunicação. Não sei se é o que ocorre, mas pode ser que o componente não esteja recebendo um OK do ECF e daí tenta enviar novamente.

Veja essa parte abaixo onde o ACK é diferente de 6:

 

-- 09:56:20:860 LinhaCupomVinculado(                 CIELO[CR][LF]            VISA ELECTRON[CR][LF][CR][LF]      451412*********4722-06/19[CR][LF]1a VIA-CLIENTE           AUT=060013[CR][LF]DOC=060013  06/02/15     15:22 ONL-D[CR][LF]VENDA A DEBITO[CR][LF]VALOR:                  12,50[CR][LF] [CR][LF]Mensagem de[CR][LF]final de cupom![CR][LF] [CR][LF]                               (SiTef)[CR][LF][CR][LF]                CIELO[CR][LF]            VISA ELECTRON[CR][LF][CR][LF]      451412*********4722-06/19[CR][LF]2a VIA-ESTABELECIMENTO   AUT=060013[CR][LF]0020000080750001/PDV=24000002[CR][LF]DOC=060013  06/02/15     15:22 ONL-D[CR][LF]VENDA A DEBITO[CR][LF]VALOR:                  12,50[CR][LF] [CR][LF]Mensagem de[CR][LF]final de cupom![CR][LF] [CR][LF]    TRANSACAO AUTORIZADA COM SENHA[CR][LF]       EDERSON DE SOUZA SELVATI[CR][LF] [CR][LF]                               (SiTef)[CR][LF][CR][LF] )
                TX -> [sTX]][sTX][FS]C                CIELO[LF]            VISA ELECTRON[LF][LF]      451412*********4722-06/19[LF]1a VIA-CLIENTE           AUT=060013[LF]DOC=060013  06/02/15     15:22 ONL-D[LF]VENDA A DEBITO[LF]VALOR:                  12,50[LF] [LF]Mensagem de[LF]final de cupom![LF] [LF]                               (SiTef)[LF][LF]                CIELO[LF]            VISA ELECTRON[LF][LF]      451412*********4722-06/19[LF]2a VIA-ESTABELECIMENTO   AUT=060013[LF]0020000080750001/PDV=24000002[LF]DOC=060013  06/02/15     15:22 ONL-D[LF]VENDA A DEBITO[LF]VALOR:                  12,50[LF] [LF]Mensagem de[LF]final de cupom![LF] [LF]    TRANSACAO AUTORIZADA COM SENHA[LF]       EDERSON DE SOUZA SELVATI[LF] [LF][sTX]}
   09:56:21:216 RX <- ACK = 0 Falha: 0
                TX -> [sTX]][sTX][FS]C                CIELO[LF]            VISA ELECTRON[LF][LF]      451412*********4722-06/19[LF]1a VIA-CLIENTE           AUT=060013[LF]DOC=060013  06/02/15     15:22 ONL-D[LF]VENDA A DEBITO[LF]VALOR:                  12,50[LF] [LF]Mensagem de[LF]final de cupom![LF] [LF]                               (SiTef)[LF][LF]                CIELO[LF]            VISA ELECTRON[LF][LF]      451412*********4722-06/19[LF]2a VIA-ESTABELECIMENTO   AUT=060013[LF]0020000080750001/PDV=24000002[LF]DOC=060013  06/02/15     15:22 ONL-D[LF]VENDA A DEBITO[LF]VALOR:                  12,50[LF] [LF]Mensagem de[LF]final de cupom![LF] [LF]    TRANSACAO AUTORIZADA COM SENHA[LF]       EDERSON DE SOUZA SELVATI[LF] [LF][sTX]}
   09:56:21:452 RX <- ACK = 6 Falha: 1
   09:56:21:453 VerificaFimImpressao: Pedindo o Status (19)
   09:56:21:799 VerificaFimImpressao: ACK = 0 - Falhas = 0 - Erro: ESynaSerError Communication error 9997: Timeout during operation
   09:56:22:000 VerificaFimImpressao: Pedindo o Status (19)
   09:56:22:124 VerificaFimImpressao: ACK = 6, OK... Aguardando ST1 e ST2
   09:56:22:340 RX <- [NUL][NUL][NUL][NUL]

 

Não sei se vai fazer diferença, mas a configuração de timeout está muito baixa. Aumente para 10.

[]'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.
Link para o comentário
Compartilhar em outros sites

  • Solution

De fato aumentando o timeOut o problema parou de acontecer, mas com isso fico prejudicado em venda frenética ...
Então para solucionar, criei um timeOutVenda e um TimeOutPadrão nas configurações do sistema, para se trabalhar com venda frenética o ideal é q o timeOut esteja mais baixo.

 

Mas obrigado pela ajuda... Abraço.

Link para o comentário
Compartilhar em outros sites

  • Consultores

De fato aumentando o timeOut o problema parou de acontecer, mas com isso fico prejudicado em venda frenética ...

Então para solucionar, criei um timeOutVenda e um TimeOutPadrão nas configurações do sistema, para se trabalhar com venda frenética o ideal é q o timeOut esteja mais baixo.

 

Mas obrigado pela ajuda... Abraço.

Não deveria ficar prejudicado não. O TimeOut só faz efeito para esgotar o tempo de espera do ECF. Já faz algum tempo que estamos recomendando o TimeOut de 10 no mínimo e nunca tivemos problemas neste sentido. Pelo contrário, se o TimeOut for muito pequeno, o ACBrECF vai fazer mais tentativas do que pode ser necessário. Isso sim vai lhe prejudicar e pode ter efeitos colaterais indesejados.

 

Além disso, no caso de USB, é normal o tempo ser mais lento. Você adicionou mais uma camada na comunicação de duas vias.

[]'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.
Link para o comentário
Compartilhar em outros sites

Então foi até um tema de discussão aqui na empresa, entre eu e meu chefe...
Mas por incrível que pareça, quando aumentamos o timeOut temos problema com venda frenética, as vezes ó código é cortado e o sistema não consegue adicionar o produto na fila. Mas isso com um TimeOut mais alto, no caso 10, ao abaixamos o timeOut o sistema trabalha de maneira correta e consegue adicionar na fila e ir "despejando" aos poucos...

Por default trabalho com os seguintes propriedades...

  obj_ImpFiscal.PAFECF.ExibeMensagem := false;
  obj_ImpFiscal.PAFECF.Device.ProcessMessages := True;
 

E isso foi testado inclusive em comunicação serial direta...

Editado por Mário Mesquita
Link para o comentário
Compartilhar em outros sites

  • Consultores

Eu não recomendo ProcessMessages := True. Isso faz com que o Device execute um Application.ProcessMessages. Não deveria ser necessário a nenhuma aplicação utilizar esse método.

 

Se está perdendo códigos, então sua venda frenética não está implementada corretamente. Procure aqui no fórum sobre isso, já foi amplamente discutido.

 

Muitas pessoas acham que Application.ProcessMessages é um comando mágico que faz a aplicação não parecer congelada. Mas, isso está muito longe da verdade. Essa pergunta e suas respostas ajudam um pouco.

[]'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.
Link para o comentário
Compartilhar em outros sites

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