Jump to content

dev botao

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

Recommended Posts

Posted

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

  • Like 10
  • Thanks 1

Warquia Pereira
Analista de Sistemas e Desenvolvedor

  • Consultores
Posted

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.

  • Like 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
Posted (edited)

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

Edited by Gr@c@
  • Moderadores
Posted
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. 

  • Like 1
  • 2 weeks later...
  • Moderadores
Posted

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
Posted

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
Posted

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. 

 

Posted

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 ???
 

  • Like 2
  • 4 weeks later...
Posted
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 months later...
  • Moderadores
Posted
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 month later...
  • 2 weeks later...
Posted

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

Posted

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á 2478 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.