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);