Ir para conteúdo
  • Cadastre-se

dev botao

TefApiCliSitef processar transacoes pendentes na inicializacao


Ver Solução Respondido por Daniel Simoes,

Recommended Posts

  • Membros Pro
Postado

ola, estou iniciando a minha homologacao no tef clisitef,  na sequencia 15 onde trata de transacoes pendentes não consegui fazer com que o acbr cofirme automaticamente a transação pendente na inicializacao.

 

como reproduzir:

primeiro precisa ter uma transacao pendente do sitdemo, marcar as configuracoes no acbr para cofirmar as transacoes automaticamente; pendencia na inicializacao = processar pendentes;

simulei no demo do acbr e o resultado foi o mesmo, depois que o acbr coleta as transacoes pendentes do sitdemo usando a operacao 130, quando chega na procedure VerificarTransacoesPendentes do arquivo ACBrTefApiComum.pas 

 

procedure TACBrTEFAPIComum.VerificarTransacoesPendentes;
var
  i: Integer;
  MsgErro: String;
begin
  GravarLog('VerificarTransacoesPendentes');
  for i := 0 to RespostasTEF.Count-1 do
  begin
    UltimaRespostaTEF.Assign(RespostasTEF[i]);
    if UltimaRespostaTEF.Confirmar then    // Transação requer Confirmação ?
    begin
      if not UltimaRespostaTEF.CNFEnviado then    // Ainda não enviou a Terceira Perna ?
      begin
        MsgErro := Format( ACBrStr(sACBrTEFAPITransacaoPendente),
                           [UltimaRespostaTEF.Rede, UltimaRespostaTEF.NSU] );
        ProcessarTransacaoPendente( MsgErro );
      end;
    end
  end;
end;

na linha grifada o valor da propriedade esta sempre False

e eu acho que o probelma esta no codigo a seguir no arquivo ACBrTefApiCliSitef.pas:

 

procedure TACBrTEFAPIClassCliSiTef.CarregarRespostasPendentes(
  const AListaRespostasTEF: TACBrTEFAPIRespostas);
var
  i, j: Integer;
  CupomFiscal, NumIdent, DataFiscal, HoraFiscal: String;
  ValorTransacao: Double;
  RespTEFPendente: TACBrTEFResp;
  InfValor: TACBrInformacao;
begin
  AListaRespostasTEF.CarregarRespostasDoDiretorioTrabalho;
  i := 0;
  while i < AListaRespostasTEF.Count do
  begin
    RespTEFPendente := AListaRespostasTEF[i];
    if not RespTEFPendente.CNFEnviado then   // Transações não confirmadas, serão carregadas abaixo, pelo comando 130
      AListaRespostasTEF.ApagarRespostaTEF(i)
    else
      Inc(i);
  end;

  // Solicita do TEF respostas pendentes
  ExecutarTransacaoSiTef(CSITEF_OP_ConsultarTrasPendente, 0);
  i := fpACBrTEFAPI.UltimaRespostaTEF.LeInformacao(210, 0).AsInteger; // Total number of pending issues
  if (i = 0) then
    Exit;

  // Varre o Log, e carrega em AListaRespostasTEF
  with fpACBrTEFAPI.UltimaRespostaTEF do
  begin
    i := 1;
    CupomFiscal := Trim(LeInformacao(160, i).AsString);
    while NaoEstaVazio(CupomFiscal) do
    begin
      NumIdent := Trim(LeInformacao(161, i).AsString);
      DataFiscal := Trim(LeInformacao(163, i).AsString);
      HoraFiscal := Trim(LeInformacao(164, i).AsString);
      ValorTransacao := LeInformacao(1319, i).AsFloat;

      RespTEFPendente :=  TACBrTEFRespCliSiTef.Create;
      InfValor := TACBrInformacao.Create;
      try
        RespTEFPendente.Conteudo.GravaInformacao(899,100,'CRT');
        RespTEFPendente.Conteudo.GravaInformacao(899,102, CupomFiscal);
        RespTEFPendente.Conteudo.GravaInformacao(899,500, NumIdent);
        RespTEFPendente.Conteudo.GravaInformacao(105,000, DataFiscal + HoraFiscal);
        InfValor.AsFloat := ValorTransacao;
        RespTEFPendente.Conteudo.GravaInformacao(899,103, InfValor);

        RespTEFPendente.Finalizacao := CupomFiscal;
        RespTEFPendente.DocumentoVinculado := CupomFiscal;

        j := AListaRespostasTEF.AdicionarRespostaTEF(RespTEFPendente); // Cria Clone interno
        AListaRespostasTEF.Items[j].NSU := '';
        AListaRespostasTEF.Items[j].CNFEnviado := False;
        AListaRespostasTEF.Items[j].Confirmar := True;

      finally
        InfValor.Free;
        RespTEFPendente.Free;
      end;

      inc(i);
      CupomFiscal := Trim(LeInformacao(160, i).AsString);
    end;
  end;
end;

apos adicioanr a resposata tef com a resposta pendente ele altera o objeto que veio por paramento com a diretiva const e essa alteracao nao permanece gravada!

 

 

  • Membros Pro
Postado

juliomar, percebi que o componente faz esse tratamento de forma interna, e agora um outro usuario me enviou oque ele fez para homologar, seque o topico:

 

com vi que o componente ja faz o tratamento interno nao tem porque eu fazer novamente este tratamento no meu sistema!!!

 

  • Curtir 1
  • Fundadores
Postado

@simons, O Problema ocorre no Assign abaixo

image.png

ele chama o método ConteudoToProperty no final

image.png

Que usa o número de vias, para saber se precisa ou não confirmar a transação

image.png

 

Como essa Resposta veio do comando 130, que retorna as transações pendentes, ela está sem a imagem dos comprovantes...

 

Já estou analisando, como corrigir o problema

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.

  • Membros Pro
Postado

@Daniel Simoes, agora funcionou a confirmação da transação que estava pendente, so ficou faltando alguma mensagem de que foi feito uma confirmacao para o operador saber que precisa fazer a reimpressao:

 

- A aplicação deverá exibir uma mensagem na tela, informando ao operador o status do tratamento da transação pendente

Exemplo de transação confirmada:

"Transação T.E.F. realizada com sucesso. Para reimpressão, favor solicitar o último cupom. No caso da Cielo, utilize apenas os 6 últimos dígitos.”

 

- Caso opte por cancelar a transação, não será gerado um comprovante T.E.F. para reimpressão. Além disso, no relatório de transações, o status da operação será registrado como CANC.PDV

  • Membros Pro
Postado

@Daniel Simoes, ola, tem mais um detalhe nesta questao do processar transacao pendente na inicializacao, o homologador do sitef no processo de pre-homologacao me disse que todas as transacoes de reimpressao, cancelamento, pendencias devem ter um novo numero de documento (identificador da transacao), e no caso da pendencia na inicializacao eu nao tenho como passar essa informacao ... ele sugere que coloque algo como data e hora da transacao tipo assim yyyymmddhhmmss, seria possivel efetuar mais essa alteracao ? 

  • Membros Pro
Postado

2- O parâmetro CupomFiscal não deve se repetir e nem ser nulo em NENHUMA ocasião, ele deve sempre ser alterado de acordo com novas transações. Cancelamento de vendas, reimpressões e o tratamento de pendências também são tratados como novas transações e, por isso, devem ter um CupomFiscal diferente da transação realizada.

 

18:40:30: (00000000.SE000001) CliSiTefI : IFSI (IniciaFuncaoSiTefInterativo) - hCliSiTefi = [1028cac0]
18:40:30: (00000000.SE000001) CliSiTefI : IFSI - Modalidade = 130
18:40:30: (00000000.SE000001) CliSiTefI : IFSI - Valor = [0,00]
18:40:30: (00000000.SE000001) CliSiTefI : IFSI - CupomFiscal (78b7d63c/0)

 

Outro exemplo:

 

18:40:33: (00000000.SE000001) CliSiTefI : IFSI (IniciaFuncaoSiTefInterativo) - hCliSiTefi = [1028cac0]
18:40:33: (00000000.SE000001) CliSiTefI : IFSI - Modalidade = 130
18:40:33: (00000000.SE000001) CliSiTefI : IFSI - Valor = [0,00]
18:40:33: (00000000.SE000001) CliSiTefI : IFSI - CupomFiscal (78b7d63c/0)

 

 

acima o retorno da pre-homologacao referente ao tratamento de transacoes pendentes na inicializacao.

  • Membros Pro
Postado

minha sugestao de alteracao:  procedure FazerRequisicaoSiTef       linha do arquivo: 332      DoctoStr := IfEmptyThen(fpACBrTEFAPI.RespostasTEF.IdentificadorTransacao, DataStr+HoraStr);

 

segue em anexo arquivo para avaliação.

ACBrTEFAPICliSiTef.pas

  • Curtir 2
  • Consultores
Postado
14 hours ago, simons said:

minha sugestao de alteracao:  procedure FazerRequisicaoSiTef       linha do arquivo: 332      DoctoStr := IfEmptyThen(fpACBrTEFAPI.RespostasTEF.IdentificadorTransacao, DataStr+HoraStr);

 

segue em anexo arquivo para avaliação.

ACBrTEFAPICliSiTef.pas 44.07 kB · 0 downloads

Bom dia!

Muito obrigado pela contribuição!

Foi criada a #TK-6379 para análise da mesma e parecer por parte da equipe de consultores.

Qualquer novidade será divulgada neste tópico.

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

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

The popup will be closed in 10 segundos...