Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Segue conforme solicitação a alguns amigos de como implementar ACBrTEFD em projetos sem o uso do ACBrECF

@Italo Jurisato JuniorPor gentileza, poderia "comitar" esse exemplo no trunk?


TEF.jpg

Considerações importantes

  • Esse demo não é indicado para quem usa o ACBrECF, pois já existe o Demo ACBrECFTeste, onde explorar o conjunto (ps: aconselho verificar o demo feito em lazarus pois o mesmo está completo o exemplo, em relação ao demo em Delphi.
  • Configurar o componente ACBrTEFD para [AutoFinalizarCupom = False] [MultiplosCartoes=True] [NumeroMaximoCartoes=3]
  • Foi utilizada uma lógica em emular o estados possíveis do ECF. (Enumerado:tEstadoEcfSimulado)
  • Estudar o evento ACBrTEFDComandaECF, ACBrTEFDInfoECF e ACBrTEFDComandaECFSubtotaliza onde os mesmo manipulam tEstadoEcfSimulado
    TEF2.jpg
  • Assinar os Eventos ACBrTEFDComandaECFAbreVinculadoACBrTEFDComandaECFImprimeVia ACBrTEFD1ExibeMsg 

Ambiente de Teste 

  • Teste realizado no sistema modular SitDemo-Sitef(Software Express)
  • Venda com múltiplos cartões
  • Venda em 2 formas de pagamento(Dinheiro + Cartão)

Extras

  • Método finalizarCupomNFCe existe um tratamento para emissão em (OFF-LINE Contingência) caso houver qualquer erro na emissão da mesma
  • Sequência na impressão(imprimer o NFCe > Posteriormente os Cupons Vinculados)
    1. Inicia Venda
    2. Informe o valor de pagamento e Selecione a forma de pagamento
    3. Armazena em Buffer as formas de pagamento
    4. Após a totalização das formas de pagamento haverá o enviar da NFCe ao SEFAZ Estadual
    5. imprime a NFCe e os Vinculados
    6. Finaliza a sequência com os EstadoEcfSimulado = Livre

Delphi - TEF.rar

  • Curtir 10
  • Obrigado 1

Warquia Pereira
Analista de Sistemas e Desenvolvedor

  • Consultores
Postado

Boa dia Warquia,

Passe para os demais membros da equipe para avaliarem a sua proposta no programa exemplo do componente ACBrNFe, que visa ajudar os desenvolvedores que desejam emitir a NFC-e.

Desde já muito obrigado pela colaboração.

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Moderadores
Postado (editado)

Ao compilar o projeto em Delphi 7 está dando erro. E a Unit5 contém lixo no início do nome e mesmo retirando, não compila. 

 

errotef.png

Editado por Gr@c@
  • Moderadores
Postado
1 minuto atrás, Juliomar Marchetti disse:

Bom dia!

será que fica Ok para todas as versões?

No Delphi 7 compilou. Simulei uma venda com cartão, outra com cartão e dinheiro e outra com multiplos cartões e a principio parece que tá ok. Fiz os testes com cartão de credito número digitado. Estou sem pinpad e sem impressora não fiscal, então não foi possivel testar tudo. Terei que aguardar os equipamentos para testar tudo. Mas esse demo será muito útil. 

  • Curtir 1
  • 2 semanas depois ...
  • Moderadores
Postado

Alguém conseguiu realizar as transações com o ACBrTEFD sem ECF como no exemplo? No meu está funcionando se tudo for 100% finalizado. Mas se houver um erro durante a emissão, ocorrem erros muito estranhos, por exemplo, faz a transação até "Transação OK. " mas em seguida dá erro de Transação não efetuada Favor reter cupom. 

 

 

  • Moderadores
Postado

Estou tendo problemas com o CliSiTEF neste ponto. 

Valor da NFCe = 40,00

Valor pago em cartão de crédito = 10,00

Valor pago em dinheiro = 30,00

Valor Saldo Restante = 10,00 (porque aqui considero que ainda não emiti o comprovante de TEF)

procedure TACBrTEFDClass.VerificarTransacaoPagamento(Valor: Double);
var
  SaldoAPagar : Double ;
begin
  Valor := RoundTo( Valor, -2);

  if (Valor <= 0) then
     raise EACBrTEFDErro.Create( ACBrStr( 'Valor inválido' ) );

  { Lendo o SubTotal do ECF }
  with TACBrTEFD(Owner) do
  begin
    if not (EstadoECF in ['V','P','N']) then
       raise EACBrTEFDErro.Create(
          ACBrStr('ECF deve estar em Estado de "Venda", "Pagamento" ou "Não Fiscal"') );

    SaldoAPagar := InfoECFAsDouble(ineSubTotal) ;
    SaldoAPagar := SaldoAPagar - InfoECFAsDouble(ineTotalAPagar,0);
    RespostasPendentes.SaldoAPagar := SaldoAPagar ;

    if TrocoMaximo <= 0 then
     begin
       if (Valor > RespostasPendentes.SaldoRestante ) then
          raise EACBrTEFDErro.Create( ACBrStr( 'Operação TEF deve ser limitada ao '+
                                           'Saldo restante a Pagar' ) );
     end
    else
     begin
       if CompareValue(Valor, RespostasPendentes.SaldoRestante + TrocoMaximo, 0.01) = GreaterThanValue then
          raise EACBrTEFDErro.Create( ACBrStr( 'Operação TEF permite '+
                                           'Troco Máximo de R$ '+FormatCurr('0.00',TrocoMaximo) ) );
     end ;

    if MultiplosCartoes and (NumeroMaximoCartoes > 0) and      // Tem multiplos Cartoes ?
       (RespostasPendentes.Count >= NumeroMaximoCartoes) then  // Já informou todos cartões ?
       raise EACBrTEFDErro.Create( ACBrStr( 'Multiplos Cartões Limitado a '+
             IntToStr(NumeroMaximoCartoes)+' operações.' ) );

    if Self is TACBrTEFDClassTXT then   // Limita Saldo Restante se for derivado de TEF discado
    begin
      if MultiplosCartoes and (NumeroMaximoCartoes > 0) and   // Tem multiplos Cartoes ?
         (Valor <> RespostasPendentes.SaldoRestante) and      // Valor é diferente do Saldo Restante a Pagar ?
         ((NumeroMaximoCartoes - RespostasPendentes.Count) <= 1) then  // Está no último cartão ?
         raise EACBrTEFDErro.Create( ACBrStr( 'Multiplos Cartões Limitado a '+
               IntToStr(NumeroMaximoCartoes)+' operações.'+sLineBreak+
               'Esta Operação TEF deve ser igual ao Saldo a Pagar' ) );
    end ;
  end;
end;

    SaldoAPagar := InfoECFAsDouble(ineSubTotal) ; ---> quando chega aqui está 10.00
    SaldoAPagar := SaldoAPagar - InfoECFAsDouble(ineTotalAPagar,0); ---> quando chega aqui já está -20.00
    RespostasPendentes.SaldoAPagar := SaldoAPagar ;

Então obtenho a resposta operação TEF deve ser limitada ao saldo restante a pagar

Meu evento InfoECF está assim

begin
   case Operacao of
     ineSubTotal :
       begin
         ASubTotal  := Total_VlrVenda - Total_VlrPago; (40.00-30.00) = 10.00
         RetornoECF := FloatToStr(ASubTotal);
         if estadoSimuladoEcf = tpsPagamento then
           RetornoECF := FloatToStr(0);
       end;
     ineTotalAPagar :
       RetornoECF := FloatToStr(Total_VlrPago); -----> 30.00
     ineEstadoECF :
       begin
         Case estadoSimuladoEcf of
           tpsLivre     : RetornoECF := 'L' ;
           tpsVenda     : RetornoECF := 'V' ;
           tpsPagamento : RetornoECF := 'P' ;
           tpsRelatorio : RetornoECF := 'R' ;
         else
           RetornoECF := 'O' ;
         end;
       end;
   end;
end;

 

  • Moderadores
Postado

O que causa esse tipo de erro ao gerar TEF?

- a transação ocorre com sucesso até a mensagem "TRANSACAO OK" no display

- Exception List index of bound ( o comprovante não imprime ) após comando ImprimirTransaçõesPendentes ----> já debuguei até esse ponto mas não consigo chegar ao erro

ao fechar o aplicativo e abrir novamente vem a mensagem na tela:

Transação TEF efetuada Favor reimprimir ultimo cupom NSU: 00000000013013 (Para Cielo utilizar os 6 ultimos digitos)

O fato é que às vezes dá certo, consigo finalizar a transação. Mas outras vezes não. 

 

Postado

Valeu demais pelo exemplo... já consegui fazer o tef com ele...

 

só uma dúvida básica... para imprimir o comprovante do tef no fast tem que fazer um report novo ? não dá para imprimir na sequencia da danfe ???
 

  • Curtir 2
  • 4 semanas depois ...
Postado
Em domingo, 6 de novembro de 2016 at 10:45, Eliomar0910 disse:

SADM, conseguiu fazer a impressão do comprovante TEF em impressora normal?

Fiz um report normal e peguei a imagem do comprovante do TEF para imprimir... não sei se é o procedimento normal, mas funcionou...
 

  • 5 meses depois ...
  • Moderadores
Postado
7 horas atrás, cledersoncaruaru disse:

tive esse problema ao copilar o exemplo, alguém sabe desse erro?

Você tem um valor inválido nas opções de compilação.

Vá em Project - Options - Delphi Compiler - Compiling e selecione uma das opções válidas no item Debug information.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

  • 1 mês depois ...
  • 2 semanas depois ...
Postado

amigo que disponibilizou o exemplo,

estou com o seguinte problema, 

adicionei o acbrposprinter, ta indo tudo legal, imprime a nfce e os comprovantes do tef,

o problema ocorre quando desligo a impressora durante a impressao dos comprovantes, ele fica dando erro de imipressao deseja tentar novamente? e fica em loop nesse erro enquanto escolher a opcao yes!

no debug o erro que causa o loop é acesso negado no acbrposprinter, 

 

alguma ideia de como corrigir?

 

Obrigado

Gabriel Rodrigues Da Costa Neto

Postado

Seguindo o manual de homologação essa mensagem deve aparecer nesse caso, se o usuário optar por "Yes/Sim" a aplicação entra em loop até que a impressora volte ao estado normal de trabalho ex: quando a troca de bobina, travamento ou até desligamento involuntário. Caso opte por "No/Não" a automação deve cancelar as transações pendente e assim saí naturalmente do Loop,
Vale lembrar que ainda não tem roteiro de homologação definida para NFCe, essa regra já é antiga desde das emissões em ECF.

Warquia Pereira
Analista de Sistemas e Desenvolvedor

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