Ir para conteúdo
  • Cadastre-se

dev botao

Erro ao realizar teste desligamento computador com operação autorizada mas não finalizada (sitef)


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

Recommended Posts

ao realizar a homologação com Sitef, esbarramos num teste.

rotina do teste
 - realizar venda
 - credito
 - inserir cartao
 - digitar senha
 - quando aprovar e receber mensagem de retirar cartao (matar o processo simulando desligamento)

ao iniciar novamente o componente nao valida as operacoes pendentes..

chegamos no detalhe q o arquivo que é analisado para validar as pendencias "Acbr_xxx" é salvo na chamada apos executar o FinalizarChamadaAPI 
porem esse somente é chamado no finally da fpTEFAPIClass.EfetuarPagamento(
e essa so é concluida apos remover o cartao.

percebemos tambem que existe uma funcao da sitef q retorna a quantidade de pendentes porem ainda nao implementada


nao conseguimos contornar esse "detalhe", alguem ja passou por isso? conseguiu homologar? passou nesse teste?
alguem com a implementacao de rotina de retornar e tratar pendentes da sitef??
 

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...

Pra mim também está ocorrendo esse problema. O correto seria implementar na AcbrTefApi três funções da dll clisitef (já existem na dll):

função que retorna todas as transações pendentes do pdv;
função que retorna as transações pendentes do pdv por documento;
função que cancela as transações pelo documento;

sem isso vai ser dificil resolver. 

Link para o comentário
Compartilhar em outros sites

  • Moderadores
33 minutos atrás, LUCAS CARDOSO DA SILVA disse:

Pra mim também está ocorrendo esse problema. O correto seria implementar na AcbrTefApi três funções da dll clisitef (já existem na dll):

função que retorna todas as transações pendentes do pdv;
função que retorna as transações pendentes do pdv por documento;
função que cancela as transações pelo documento;

sem isso vai ser dificil resolver. 

 

Pelo que eu entendi, toda e qualquer implementação para o SITEF deve partir da comunidade!

Se puder implementar as funções sugeridas e submeter os fontes!

Posso ajudar nos testes e validações se precisar.

 

 

Link para o comentário
Compartilhar em outros sites

acabei q pra poder passar na homologacao fiz um "arranjo tecnico", como é testado somente o ultimo documento emitido, ao iniciar o processo de pagamento, salvo em registro o nr do documento e ao inicializar a aplicacao consulto se o ultimo documento esta pendente, por falta de tempo nao consegui dar sequencia no ajusto do componente, alterei algumas partes de funcoes e procedures, vou postar aqui as minhas anotacoes se ajudar, inicio do ano acredito estar mais disponivel e posso ajudar tbm nos ajustes e testes..

 

unit ACBrTEFAPICliSiTef;

tirar de dentro e colocar fora do repeat

TituloMenu := '' ;

quando vinha titulo no comando 4 nao mostrava no comando 21, pois TituloMenu := '' ;
eliminava o titulo

=============================================================

nit ACBrTEFAPICliSiTef;
funcao ContinuarRequisicaoSiTef;

tratamento do comando 30, incluido ajuste para aceitar o VOLTAR no formulario perguntar campo

30:  // Deve ser lido um campo cujo tamanho está entre TamMinimo e TamMaximo
           begin
             DefinicaoCampo.TipoCampo := TipoCampo;
             DefinicaoCampo.TituloPergunta := ACBrStr(Mensagem);
             DefinicaoCampo.TipoDeEntrada := tedTodos;
             DefinicaoCampo.TamanhoMaximo := TamanhoMaximo;
             DefinicaoCampo.TamanhoMinimo := TamanhoMinimo;
             DefinicaoCampo.MascaraDeCaptura := EmptyStr;

             Validado := True;
             TefAPI.QuandoPerguntarCampo(DefinicaoCampo, Resposta, Validado, Interromper);

             //ajuste para aceitar voltar nos formulario de solicitar informacao
             if((Interromper = False)and(Validado)and(Resposta = 'RetornarMenuAnterior'))then
             begin
                  Resposta := '';
                              Voltar := True;
             end else
                  RespCliSiTef.GravaInformacao(TipoCampo, Resposta);
           end;

============================================================================

na procedure quando perguntar campo passa valores quando for voltar

procedure TTef.QuandoPerguntarCampo(DefinicaoCampo: TACBrTEFAPIDefinicaoCampo; var Resposta: string; var Validado, Cancelado: Boolean);

//se nao for ok ou voltar trata como cancelado
      if((MR <> mrOK)and(MR <> mrRetry))then
      begin
          Cancelado := True;
        Validado := False;  // Não fizemos as validações de "DefinicaoCampo.ValidacaoDado", vamos deixar o ACBrTEFAPI validar
          Resposta := FormObtemCampo.Resposta;
      end else
      begin
          if(MR = mrRetry)then
        begin
            Cancelado := False;
          Validado     := True;
          Resposta     := 'RetornarMenuAnterior';
        end else
        begin
             Cancelado := False;
          Validado     := False;
          Resposta     := FormObtemCampo.Resposta;
        end;
      end;

=============================================================================================

unit ACBrTEFAPICliSiTef;

TACBrTEFAPIClassCliSiTef.FinalizarTransacao(

// CliSiTEF não usa Rede, NSU e Finalizacao
  DocumentoVinculado := '';
  Confirma := (AStatus in [tefstsSucessoAutomatico, tefstsSucessoManual]);
  i := fpACBrTEFAPI.RespostasTEF.AcharTransacao(Rede, NSU, CodigoFinalizacao);
  if (i >= 0) then
    DocumentoVinculado := fpACBrTEFAPI.RespostasTEF[i].DocumentoVinculado;

    //caso nao localize e tenha vindo rede sem nsu é pq foi chamado avulso com o DOCUMENTOVINCULADO no Rede
  if((Rede <> '')and(DocumentoVinculado = '')and(NSU = ''))then
      DocumentoVinculado := Rede;

  FinalizarTransacaoSiTef(Confirma, DocumentoVinculado);

=========================================================

desculpa a forma como compartilhei sem formatacao, é que mantenho as alteracoes por escrito caso atualize o componente e tenha q 

ajustar os detalhes manualmente

 

 

qqr coisa estou a disposicao para ajudar e testes

 

em relacao a tratar o ultimo documento pendente, ao abrir a aplicacao faco essa validacao

 

var ultimo := BackupDocumentoSitef_Ler; //leio registro com ultimo documento q foi inicializado o pagamento
      var estapendente := (TACBrTEFAPIClassCliSiTef(ObjetoTef.Acbr.TEF).TEFCliSiTefAPI.ObtemQuantidadeTransacoesPendentes(Now, AnsiString(ultimo)) > 0);

    if(estapendente)then
    begin
      TACBrTEFAPIClassCliSiTef(ObjetoTef.Acbr.TEF).FinalizarTransacao(ultimo,
                                                                      '',
                                                                      '',
                                                                      tefstsSucessoManual);

Link para o comentário
Compartilhar em outros sites

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

The popup will be closed in 10 segundos...