EddieBR
-
Total de ítens
103 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Posts postados por EddieBR
-
-
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;
-
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.
TEF V&S Pague via Background
em Dúvidas sobre TEF
Postado
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).