Pessoal, segue minha rotina de tratamento de erros para o VeSPague que implementei para o modo background.
Se alguem puder analizar, modificar e colocar a rotina diretamente no componente, fique a vontade. Tempo aqui está bem apertado.
Uma breve explicacao do que eu fiz:
No procedure Inicializar ao inves de chamar o CancelarTransacoesPendentesClass, eu chamo minha procedure.
Ela le os arquivos de backup salvos pelo ACBR e forma uma string que sera exibida posteriormente ao operador.
Caso a mensagem seja exibida, a eu chamo o ADM de cancelamento dentro de um loop. Enquanto o retorno do client nao for que nao existem pendencias, a ADM é chamada novamente.
Isso seria para o caso de ter por ex 2 pendencias, e o operador tratar apenas 1.
procedure TACBrTEFDVeSPague.VerificarTransacoesPendentesClass;
Var
ArquivosVerficar : TStringList ;
ArqMask : String;
Retorno: Integer;
MsgPendencias: WideString;
begin
GravaLog( Name +' VerificarTransacoesPendentesClass ');
//exibe as pendencias
ArquivosVerficar := TStringList.Create;
MsgPendencias := EmptyStr;
try
ArquivosVerficar.Clear;
{ Achando Arquivos de Backup deste GP }
ArqMask := TACBrTEFD(Owner).PathBackup + PathDelim + 'ACBr_' + Self.Name + '_*.tef' ;
FindFiles( ArqMask, ArquivosVerficar, True );
{ Adicionando Arquivo de Resposta deste GP (se ainda não foi apagado) }
if FileExists( ArqResp ) then
ArquivosVerficar.Add( ArqResp );
{ Monta a mensagem de todos os arquivos encontrados }
if ArquivosVerficar.Count > 0 then
begin
MsgPendencias := 'Transações TEF a seguir estão PENDENTES:'+SLineBreak+SLineBreak;
end
;
while ArquivosVerficar.Count > 0 do
begin
if not FileExists( ArquivosVerficar[ 0 ] ) then
begin
ArquivosVerficar.Delete( 0 );
Continue;
end;
Resp.LeArquivo( ArquivosVerficar[ 0 ] );
{ Verificando se essa Resposta já foi cancela em outro arquivo }
MsgPendencias := MsgPendencias+'Rede: '+Resp.Rede+SLineBreak+'NSU: '+Resp.NSU+SLineBreak+'Valor: '+FloatToStrF(Resp.ValorTotal, ffCurrency, 18, 2)+SLineBreak+SLineBreak;
ArquivosVerficar.Delete( 0 );
end;
if MsgPendencias <> EmptyStr then
begin
MsgPendencias := MsgPendencias+'Favor realizar o DESFAZIMENTO no menu administrativo que será aberto a seguir.';
TACBrTEFD(Owner).DoExibeMsg( opmOK, MsgPendencias);
end
;
finally
ArquivosVerficar.Free;
end;
//verifica pendencias
if MsgPendencias <> EmptyStr then
begin
Retorno := 0;
while Retorno <> 1 do
begin
FazerRequisicao( fTransacaoPendente, 'ADM') ;
if RespVS.Servico = 'executar' then
begin
Retorno := RespVS.Retorno;
end
;
if RespVS.IsColeta then Retorno := 0;
if RespVS.GetParamString('mensagem') = 'Nao ha transacoes pendentes para este terminal.' then
begin
Retorno := 1;
end
;
// ShowMessage('Retorno: '+IntToStr(Retorno));
ProcessarResposta ; { Faz a Impressão e / ou exibe Mensagem ao Operador }
sleep(250);
end
;
if Retorno = 0 then Retorno := ContinuarRequisicao( True ) ; { True = Imprimir Comprovantes agora }
end
;
//apaga os arquivos de backup das pendencias
ArquivosVerficar := TStringList.Create;
try
ArquivosVerficar.Clear;
{ Achando Arquivos de Backup deste GP }
ArqMask := TACBrTEFD(Owner).PathBackup + PathDelim + 'ACBr_' + Self.Name + '_*.tef' ;
FindFiles( ArqMask, ArquivosVerficar, True );
{ Adicionando Arquivo de Resposta deste GP (se ainda não foi apagado) }
if FileExists( ArqResp ) then
ArquivosVerficar.Add( ArqResp );
{ Apaga todos os arquivos encontrados }
while ArquivosVerficar.Count > 0 do
begin
if not FileExists( ArquivosVerficar[ 0 ] ) then
begin
ArquivosVerficar.Delete( 0 );
Continue;
end;
DeleteFile( PWideChar(ArquivosVerficar[ 0 ]) );
ArquivosVerficar.Delete( 0 );
end;
finally
ArquivosVerficar.Free;
end;
end;