Ir para conteúdo
  • Cadastre-se

dev botao

Epson Tm-T900F (Escecf) - Problemas múltiplas formas de Pagamento


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

Recommended Posts

Boa tarde,

estou com o seguinte problema na ECF Epson convênio 09/09:

- Faço um cupom no valor de R$37,00

- Efetuo os pagamentos: (Dinheiro - RS10,00), (Cartão Débito - R$12,00), (Cartão Débito - R$15,00).

Os CCDs são impressos corretamente, porém sempre no último CCD o ACBr volta esta mensagem :

"Erro retornado pela Impressora: EPSON

Categoria: 16-Erro específico do Fabricante
Motivo: 11-Meio de pagamento não encontrado."

Percebi que o problema é quando utiliza Dinheiro + Cartão. A ECF se perde na sequência dos CCDs. No arquivo de resposta do ACBr ele grava, no caso exposto acima, 3 pagamentos. (Dinheiro - Sequência 1), (Cartão Débito - Sequência 2), (Cartão Débito - Sequência 3).

Quando estas informações são passadas para a ECF imprimir o Cupom Vinculado, o ACBr passa o primeiro Cartão Débito com sendo a sequência 2, que está correto, porém para a EPSON este cartão deve começar na sequência 1, onde ocorre o erro.

Procurando no fórum encontrei este tópico: Epson Tm-T800F (Escecf) - Problemas Com Comprovante Ccd, que é a mesma situação, porém aqui foi utilizado apenas Dinheiro e Um cartão. Se fizer com mais acontece o problema. Neste tópico o Daniel fez um Merge na Unit e resolveu o problema. Só que com mais de um cartão e dinheiro da problema.

Estou anexando o log. Alguém poderia me ajudar.

Ah, lembrando que para a Bematech do convênio 09/09 a forma como esta programado no ACBr funciona.

ACBrLog.txt

Link para o comentário
Compartilhar em outros sites

Daniel testei com a versão anexa, porém, continuou ocorrendo o problema conforme o anexo.

Eu desenvolvi uma maneira que resolveu o problema e pelos testes efetuados não prejudicou o andamento da Bematech 09/09.

procedure TACBrECFEscECF.AbreCupomVinculado(COO, CodFormaPagto,
   CodComprovanteNaoFiscal: String; Valor: Double);
Var
  Sequencia, NumPagtos, P : Integer ;
  APagto, CodPagto : String ;
  TemDinheiro: Boolean;

  procedure EnviaComandoCCD;
  begin
    with EscECFComando do
    begin
       CMD := 8;
       if (IsEpson) and (TemDinheiro) then	 								
         AddParamInteger(Sequencia -1)
       else
         AddParamInteger(Sequencia);	
       AddParamString(CodFormaPagto) ;
       AddParamInteger(1) ;   // Qtd Parcelas ??
       AddParamInteger(1) ;   // Num Parcela ??
       AddParamString(LeftStr(OnlyNumber(Consumidor.Documento),14)) ;
       AddParamString(LeftStr(Consumidor.Nome,30)) ;
       AddParamString(LeftStr(Consumidor.Endereco,79)) ;
    end;
    EnviaComando;
  end;

begin
  // Achando a Sequencia do Pagamento de acordo com o Indice //
  Sequencia := 1;
  TemDinheiro := False;
  try
    NumPagtos := RespostasComando.FieldByName('NumPagtos').AsInteger;
    if NumPagtos > 1 then
    begin
      repeat
        APagto := RespostasComando.FieldByName('Pagto'+IntToStr(Sequencia)).AsString;
        P := pos('|',APagto);
        CodPagto := Copy(APagto,1,P-1);
        if CodPagto = '1' then											
			TemDinheiro := True;				
        if CodPagto = CodFormaPagto then
        begin
          APagto := '*'+APagto;  // sinaliza que já usou;
          break;
        end ;

        Inc( Sequencia );
      until (Sequencia >= NumPagtos);
    end ;
  except
  end ;

  try
    EnviaComandoCCD;
  except
    On Exception do
    begin
      // Woraround para Epson, que em algumas situações não reconhece o Nu. de Sequencia corretamente
      if IsEpson and (EscECFResposta.CAT = 16) and (EscECFResposta.RET.ECF = 11) then
      begin
        Dec(Sequencia);
        EnviaComandoCCD;
      end
      else
        raise;
    end;
  end;
 
  //...  	
end;

Adicionei esta verificação na EnviaComandoCCD:

       if (IsEpson) and (TemDinheiro) then
         AddParamInteger(Sequencia -1)
       else
         AddParamInteger(Sequencia);

E verifico se tem uma condição em dinheiro nas formas de pagamento:

        if CodPagto = '1' then
          TemDinheiro := True;

Porque se tem dinheiro, significa que a minha sequência na ECF EPSON tem que começar da sequência 1.

ACBrLog.txt

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Não compreendia a sua sugestão... poderia por favor descrever qual é a sua abordagem ?

Há algum problema na Epson, em relação ao índice da Forma de pagamento, quando existe FPG com dinheiro ?

Aparente a sua correção funcionará apenas para esse cenário específico... (dinheiro primeiro) e poderá falhar, se houver mesclagem de Dinheiro e outras Formas de pagamento, em uma ordem diferente...

Há alguma informação da Epson em relação a isso ?

 

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.

Link para o comentário
Compartilhar em outros sites

Informação da Epson não encontrei a referente a esta situação. Porém, hoje da forma que está ocorre o erro que mencionei.

Se passar uma condição de pagamento dinheiro + uma cartão, no ACBr quando passar o cartão ele gera um exceção que é capturada pelo try except, onde é verificado se é Epson e decrementa um na sequência que é mandado para a ECF. Ou seja, dinheiro sequência 1, cartão sequência 2 (ocorre a exceção que é tratada e decrementada ficando cartão sequência 1).

Só que se tiver mais cartão esta abordagem não funciona e ocorre o erro. Foi seguindo esta linha de raciocínio que propus está solução. Nos testes que eu realizei, dinheiro sendo a primeira FPG e as próximas FPG sendo mescladas funciona. Porém, se o dinheiro não estiver nesta ordem pode gerar uma exceção realmente.

Tens outra abordagem para este caso?

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Compreendi melhor o que ocorre... A Epson não registra como "Sequencia", as Formas de Pagamento que não permitem Vinculado...

Apliquei uma correção que funcionará para todos os cenários (mesmo que dinheiro não seja a primeira Forma utilizada)... e não afetará os demais modelos....

[-] Método: "AbreCupomVinculado". Correção para Epson TM800F, que não considera
    as Formas de Pagamento que não permitem Vinculado, como sequencia de
    pagamento    (por: DSA)
[+] Método "GetNumUltimoItem". Implementado leitura dos registradores do ECF,
    para o Modelo Epson TM800F   (por: DSA)  

 

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

Link para o comentário
Compartilhar em outros sites

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