Ir para conteúdo
  • Cadastre-se

dev botao

Consulta Status do Serviço retornando hora errada para estados que usam SVRS e possuem Horario de Verão


Dream Sistemas
  • Este tópico foi criado há 2221 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

Encontrei um problema na função TratarResposta da Classe TNFeStatusServico no arquivo ACBrNFeWebServices.pas.

o problema acontece no trecho a seguir:

    { WebService do RS retorna horário de verão mesmo pros estados que não
      adotam esse horário, ao utilizar esta hora para basear a emissão da nota
      acontece o erro. }
    if (pos('svrs.rs.gov.br', FPURL) > 0) and
       (MinutesBetween(NFeRetorno.dhRecbto, Now) > 50) and
       (not IsHorarioDeVerao(CUFtoUF(FcUF), NFeRetorno.dhRecbto)) then
      FdhRecbto:= IncHour(NFeRetorno.dhRecbto,-1)
    else
      FdhRecbto := NFeRetorno.dhRecbto;

- Agora que acabou o horario de verão o webservice do RS passa a retornar o horario padrão, porem este teste está decrementando o horario retornado pela sefaz em 1 hora no caso da máquina ainda estar desconfigurada com o horario antigo.

Fiz um ajuste nesta rotina criando uma função no pcnAuxiliar.pas que me retorna se o estado onde foi enviado a consulta usa o horario de verão:

function UFUsaHorarioVerao(const UF: string): Boolean;
const
  UFHV = '.MT.MS.GO.MG.ES.RJ.SP.PR.SC.RS.DF.';
begin
  Result := (AnsiPos(UF, UFHV) > 0);
end;

e adequei a função IsHorarioDeVerao (já Existente) que testa se o horario de verão está ativo para usar a mesma (tambem no pcnAuxiliar.pas), só o trecho alterado:

  Result := False;
  if (GetInicioDoHorarioDeVerao(anoInicio) <= dataHora) and
     (GetFimDoHorarioDeVerao(anoFim) >= dataHora) and
     (UFUsaHorarioVerao(UF)) then
    Result := True;

 

a rotina corrigida na ACBrNFeWebServices.pas ficou assim:

    { WebService do RS retorna horário de verão mesmo pros estados que não
      adotam esse horário, ao utilizar esta hora para basear a emissão da nota
      acontece o erro. }
    if (pos('svrs.rs.gov.br', FPURL) > 0) and
       (not UFUsaHorarioVerao(CUFtoUF(FcUF))) and
       (IsHorarioDeVerao('RS', NFeRetorno.dhRecbto)) then
      FdhRecbto:= IncHour(NFeRetorno.dhRecbto, -1)
    else
      FdhRecbto := NFeRetorno.dhRecbto;

agora ele só verifica se o estado do WebService não participa do horario do verão e se o horario de verão está ativo no RS antes de fazer o decremento.

 

obrigado!

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2221 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

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