Ir para conteúdo
  • Cadastre-se

dev botao

DataHora Finalizacao de Transacao CliSiTef


Hetosoft Sistemas
Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 770 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

Bom dia.

 

Estamos tendo problema com os relatórios de transações com clientes que são de fuso horário diferente do de Brasília.

As transações efetuadas entre as 23:00:00 e 23:59:59 são sempre finalizadas com o próximo dia, mesmo eu definindo a propriedade "ACBrTEFD1.TEFCliSiTef.DataHoraFiscal :=" antes de iniciar a transação.

Acontece que ao Finalizar a transação, existe uma validacao que obtem a DataHora do Comprovante de Transação (que sempre está no horário de Brasília), causando esse problema.

Seria possível adicionar uma propriedade ou outra ferramenta para usar sempre o "Now" como DataHora da finalização? Segue abaixo o trecho do código em questão:

unit ACBrTEFDCliSiTef;

linha: 1162
  if Assigned(Resp) and (Resp.DataHoraTransacaoComprovante > (date - 3)) then
  begin
     // Leu com sucesso o arquivo pendente.
     // Transações com mais de três dias são finalizadas automaticamente pela SiTef
     DataStr := FormatDateTime('YYYYMMDD',Resp.DataHoraTransacaoComprovante);
     HoraStr := FormatDateTime('HHNNSS',Resp.DataHoraTransacaoComprovante);
  end
  else
  begin
     DataStr := FormatDateTime('YYYYMMDD',Now);
     HoraStr := FormatDateTime('HHNNSS',Now);
  end;

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
1 hora atrás, Juliomar Marchetti disse:

Estaria alterando o que retorna do tef e isso está errado ou não?

Então, o suporte do CliSitef (Oclesio Marcilho) nos disse que a "responsabilidade" da DataHora é da SoftwareHouse. Que deveríamos informar a DataHora no Fuso -03:00 na "fSiTefAPI.FinalizaFuncaoSiTefInterativo( )", assim como fazemos na  "fSiTefAPI.IniciaFuncaoSiTefInterativo()".

O componente tem a propriedade DataHoraFiscal que é respeitada na IniciaFuncao, mas não é usada na FinalizaFuncao. No Log fica assim:
-- 02/02 15:49:59:711 - *** IniciaFuncaoSiTefInterativo. Modalidade: 0 Valor: 9,85 Documento: 1200734 Data: 20220202 Hora: 154959 Operador:  Restricoes: [10]{TipoTratamento=4}
-- 02/02 15:51:14:062 - *** FinalizaTransacaoSiTefInterativo. Confirma: SIM Documento: 1200734 Data: 20220202 Hora: 165058

 

Toda transação fica como se tivesse levado 1 hora entre o início e o fim da transação.

Link para o comentário
Compartilhar em outros sites

  • Fundadores
  • Solution

Olá @hetoandrade.. eu acho que a correção necessária, é justamente remover do IF a verificação de date-3

De acordo com o manual do SiTef, o valor de  DataFiscal, e HoraFiscal, informados no método FinalizaFuncaoSiTefInterativo, deve ser o mesmo valor usado em IniciaFuncaoSiTefInterativo

Citar

Exemplo: Uma venda realizada pela função IniciaFuncaoSiTefInterativo, passando como parâmetros Funcao 0, Valor 10,00, Cupom Fiscal 12345, Data Fiscal 20150101, Hora Fiscal 121500. Na confirmação da transação, a função FinalizaFuncaoSiTefInterativo deve ser chamada utilizando os seguintes parâmetros: Confirma 1, Cupom Fiscal 12345, Data Fiscal 20150101, Hora Fiscal 121500, ParamAdic como vazio/NULL, já que não há dados adicionais.

Experimente comentar a segunda parte do IF

 if Assigned(Resp) {and (Resp.DataHoraTransacaoComprovante > (date - 3))} then
  begin
     // Leu com sucesso o arquivo pendente.
     // Transações com mais de três dias são finalizadas automaticamente pela SiTef
     DataStr := FormatDateTime('YYYYMMDD',Resp.DataHoraTransacaoComprovante);
     HoraStr := FormatDateTime('HHNNSS',Resp.DataHoraTransacaoComprovante);
  end
  else
  begin
     DataStr := FormatDateTime('YYYYMMDD',Now);
     HoraStr := FormatDateTime('HHNNSS',Now);
  end; 

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Bom dia, obrigado pela resposta.

Então... Nesse caso, Resp tem valor atribuído, então continuaria executando o trecho abaixo:

DataStr := FormatDateTime('YYYYMMDD',Resp.DataHoraTransacaoComprovante);

A propriedade Resp.DataHoraTransacaoComprovante, carrega o valor sempre do horário de Brasília.

Quando a function TACBrTEFDCliSiTef.FazerRequisicao é chamada, ela chama a função da ApiSitef "IniciaFuncaoSiTefInterativo", passando como parametro a DataHoraFiscal (que eu posso definir no componente durante a transação, ou posso deixar sem atribuir valor, que nesse caso retorna Now) com horário de MT. 

Função que define a DataHoraFiscal no "IniciaFuncaoSiTefInterativo"

 function TACBrTEFDCliSiTef.GetDataHoraFiscal: TDateTime;
begin
  if (csDesigning in Owner.ComponentState) then
     Result := fDataHoraFiscal
  else
     if fDataHoraFiscal = 0 then
        Result := Now
     else
        Result := fDataHoraFiscal;
end;

 

Então ao meu ver, no meu caso, eu precisaria na FinalizaTranacaoSitefInterativo informar ou o valor da propriedade DataHoraFiscal (que foi informada na Inicia), ou informar o Now novamente (que vai dar uns segundinhos de diferença)

Editado por hetoandrade
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Mas DataHoraTransacaoComprovante, é a informação retornada pelo SiTef, referente a essa transação que acabou de ocorrer... 

Porque não seria correto, usar esse valor ?  Ele está retornando algo diferente dos valores informados na chamada de IniciaFuncaoSiTefInterativo ?

Porém como o "DataHoraFiscal", é sempre opcional.. creio que seria possível, modificar os fontes, para sempre usar ele, preferivelmente, caso esteja informado...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

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