Ir para conteúdo
  • Cadastre-se

EddieBR

Membros
  • Total de ítens

    103
  • Registro em

  • Última visita

Tudo que EddieBR postou

  1. Complementando... o VeSPague não aceita CNC para transacoes pendentes apos o client ser reiniciado (reset do computador, ou fechar o client no tray). O cancelamento tem que ser feito pela funcao ADM (Administracao Pendente).
  2. 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;
  3. 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.