Ir para conteúdo
  • Cadastre-se

EddieBR

Membros
  • Total de ítens

    103
  • Registro em

  • Última visita

Posts postados por EddieBR

  1. 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;
    
    

  2. No VeSPague é o seguinte:

    Caso o client deles reinicie (queda de energia, travamentos, etc), as transações pendentes não podem ser canceladas "automaticamente".

    As transações precisam ser canceladas pelo comando ADM. Eu uso da seguinte forma:

    Removi o CancelarTransacoesPendentesClass do metodo Inicializar do componente, e no lugar eu chamo um metodo que criei que faz o seguinte:

    Varre os arquivos de backup do TEF, monta uma mensagem, exibe ao operador, e entra em um loop de envios de ADM até que o ADM retorno que não existem mais transações pendentes.

    Se voce apenas enviar um NCN ou CNC a transação NÃO É TRATADA.

    Resumindo: Se o client deles não fechar... vc pode enviar NCN ou CNC (que é o q o CancelarTransacoesPendentes faz), caso contrario, apenas via comando ADM (solicitando inclusive usuário e senha do estabelecimento).

    Eu mudei para o background a pouco tempo, tenho algumas coisas que mudei no componente para me atender melhor, problema está em conseguir tempo para organizar um pouco o código e enviar para o pessoal adaptar.

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