Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Boa tarde amigos.

 

Estou fazendo algumas rotinas para controle dos cupons fiscais emitidas pelo meu sistema.

 

Estou fazendo testes com possíveis erros relacionados ao momento de Efetuar o Pagamento, para isso criei uma rotina no evento "ErrorEfetuaPagamento".

 

Nos meus testes, fiz o erro acontecer nesse momento(informei no sistema um tipo de pagamento não existente na impressora), o componente gerou a exceção mas não entrou no evento "ErrorEfetuaPagamento".

 

Existe alguma outra configuração que devo fazer, ou algo que deva considerar sobre este evento e os outros eventos de erro?

 

Obrigado.

  • Fundadores
Postado

Por favor poste o Log gerado na operação... os fontes parecem corretos... veja:

procedure TACBrECF.EfetuaPagamento
.......
  try
    Tratado := False;
    fsECF.EfetuaPagamento( CodFormaPagto, Valor, Observacao, ImprimeVinculado,
                           CodMeioPagamento );
  except
     if Assigned( fOnErrorEfetuaPagamento ) then
        fOnErrorEfetuaPagamento(Tratado);

     if not Tratado then
        raise;
  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.

Postado

Bom Dia Daniel Simões, segue o log:


--------------------------------------------------------------------------------
ATIVAR - 27/03/15 08:22:12:850 - Modelo: Sweda - Porta: COM2 - TimeOut: 3
         Device: BAUD=9600 DATA=8 PARITY=N STOP=1 HANDSHAKE=DTR/DSR MAXBANDWIDTH=0
--------------------------------------------------------------------------------

-- 08:22:12:851 
                TX -> [ESC].271}
   08:22:12:972 RX <- .+C00112703150223CN000000000025803980000002100000000000000000000000000000000000000000000000000000000000000000000000000000142I  }
-- 08:22:12:972 
                TX -> [ESC].27G}
   08:22:13:188 RX <- .+C001G000000000005000500001.000000000002580398000000000000000000000000000000000000000000000000000000000000                    }
-- 08:22:13:188 
                TX -> [ESC].27H}
   08:22:13:391 RX <- .+C001H00000000000000000001 01.00.01    00050021000000000011000142000000000223000000000000000000000000000258039800000000000000 }
-- 08:22:13:391 Estado
                TX -> [ESC].28}
   08:22:13:603 RX <- .+0000000CREDUCAO 00N000000000000000000000000!2703150822N                                   001NN000000000000000000000000SNNN0 }
-- 08:22:13:603 IdentificaOperador(1)
                TX -> [ESC].23}
   08:22:13:809 RX <- .+P550.+0000}
-- 08:22:13:810 Estado
                TX -> [ESC].28}
   08:22:14:010 RX <- .+0000000CREDUCAO 00N000000000000000000000000!2703150822N                                   001NN000000000000000000000000SNNN0 }
-- 08:22:14:011 TestaPodeAbrirCupom
                TX -> [ESC].28}
   08:22:14:206 RX <- .+0000000CREDUCAO 00N000000000000000000000000!2703150822N                                   001NN000000000000000000000000SNNN0 }
-- 08:22:14:206 AbreCupom( , ,  )
                TX -> [ESC].17}
   08:22:15:125 RX <- .+0001}
-- 08:22:15:125 
                TX -> [ESC].28}
   08:22:15:283 RX <- .+0001000P VENDAS 17N000000000000000000000000!2703150822N                                   001NN000000000000000000000000SNNN0 }
-- 08:22:15:283 NumCupom
                TX -> [ESC].27H}
   08:22:15:498 RX <- .+C001H00000000000000000001 01.00.01    00050021000000000011000143000000000224000000000000000000000000000258039800000000000000 }
-- 08:22:15:532 Estado
                TX -> [ESC].28}
   08:22:15:703 RX <- .+0001000P VENDAS 17N000000000000000000000000!2703150822N                                   001NN000000000000000000000000SNNN0 }
-- 08:22:15:703 VendeItem( 759 , LEITE DANONE CORPUS DESNATADO TP 1LT , FF , 1 , 4,19 , 0 , UN , % , D , -1 )
                TX -> [ESC].01759          0001000000004190000000000419~LEITE DANONE CORPUS DESF  NATADO TP 1LT UN}
   08:22:15:901 RX <- .+0002}
-- 08:22:15:901 Subtotal
                TX -> [ESC].28}
   08:22:16:121 RX <- .+0002001P VENDAS 01N000000000419000000000419!2703150822N                                   001NN000000000419000000000000SNNN0 }
-- 08:22:16:121 SubtotalizaCupom( 0 ,  )
                TX -> [ESC].10}
   08:22:16:315 RX <- .+0003}
-- 08:22:16:315 Estado
                TX -> [ESC].28}
   08:22:16:521 RX <- .+0003001P VENDAS 10N000000000419000000000419!2703150822N                                   001NN000000000419000000000000SNNN0 }
-- 08:22:16:521 CarregaFormasPagamento
                TX -> [ESC].295}
   08:22:16:728 RX <- .+T0015S041500                     NDinheiro       SC. D[233]bito      SC. Cr[233]dito                                                 }
-- 08:22:16:728 
                TX -> [ESC].296}
   08:22:16:934 RX <- .+T0016NCheque         NTicket         NContra-Vale    NOutro          STEF            N               N                       }
-- 08:22:16:934 
                TX -> [ESC].29Q}
   08:22:17:143 RX <- .+T001QN               N               N               N               N               N                                       }
-- 08:22:17:143 
                TX -> [ESC].29R}
   08:22:17:346 RX <- .+T001RN               N               N               N                                                                       }

Obrigado.

Postado

Bom Dia.

 

O erro ocorre no seguinte trecho, dentro da procedure EfetuaPagamento:

  FPG := AchaFPGIndice( CodFormaPagto ) ;
  if FPG = nil then
     raise EACBrECFErro.Create( Format(ACBrStr(cACBrECFAchaFPGIndiceException), [ CodFormaPagto ])) ;

Ele nem chega a entrar no try, porque o erro que eu programei pra simular foi de "Forma de Pagamento Inválida".

 

Obrigado.

  • Fundadores
Postado

Mas esse caso é totalmente diferente... Observe que não há erros no Log...

 

Você está enviando uma Forma de Pagamento inválida, e o componente rejeita a mesma antes de tentar qq comunicação com o ECF... O que faz sentido, pois sabemos de antemão que não funcionará, já que ela não existe no ECF...

 

Você deve tratar isso na sua aplicação...  Não faz sentido você enviar o comando para uma Forma de Pagamento que não existe no ECF...

 

O ACBrECF tem métodos e propriedades (exemplo acima) que permite a você, na sua aplicação, tratar disso e não enviar o comando errado...

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.

Postado

Bom Dia.

 

Entendi, mas quando ele dá esse erro o cupom já foi inciado, já foi lançado o cabeçalho e os itens e, por conta do erro, não posso continuar o cupom, tenho que cancelá-lo por uma opção do menu. Não seria o caso de jogar os trechos do "AchaFPGIndice" e "ImprimeVinculado" para dentro do try?

 

Obrigado

  • Fundadores
Postado

Na minha opinião... não... pois você que está causando o erro...

Não é uma falha de comunicação com o ECF... ou uma violação de regra do Sw.Básico do ECF, como por exemplo, tentar efetuar um Pagamento após o Saldo a pagar ser zero...

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.

Postado

Entendo e analisando melhor concordo com você. Obrigado.

 

Uma última pergunta: existe alguma foram de eu verificar no ECF se o índice de pagamento que estou passando existe, antes mesmo de abrir o cupom?

 

Obrigado.

Postado

Obrigado Daniel.

 

Criei um código aqui pra verificar isso.

O código é este, caso alguém precise em algum momento de algo parecido com o que eu precisava:

function ExisteIndiceECF: Boolean;
var
  i, indice: integer;
  slFormasPagamento: TStringList;
begin
  Result:= True;
  slFormasPagamento:= TStringList.Create;

  with ACBrECF1 do
  begin
    CarregaFormasPagamento;
    for i:= 0 to FormasPagamento.Count - 1 do
      slFormasPagamento.Add(FormasPagamento[i].Indice);
  end;

  cdsTempMovimentos.First;
  for i:= 0 to cdsTempMovimentos.RecordCount - 1 do
  begin
    if not slFormasPagamento.Find(cdsTempMovimentosINDICE_TIPOPGTO_ECF.AsString, indice) then
      Result:= False;
    cdsTempMovimentos.Next;
  end;

  slFormasPagamento.Free;
end;

Se alguém tiver uma sugestão de melhora, fiquem a vontade.

 
Obrigado.
  • Fundadores
Postado

Seria mais simples fazer:

function ExisteIndiceECF( CodFormaPagto: String): Boolean;
Var
  FPG     : TACBrECFFormaPagamento ;
begin
  ACBrECF1.CarregaFormasPagamento;
  FPG := ACBrECF1.AchaFPGIndice( CodFormaPagto ) ;
  Result := (FPG <> nil);
end;
  • Obrigado 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.

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