Ir para conteúdo
  • Cadastre-se

dev botao

Horário de Verão - Problema recorrente


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

Recommended Posts

  • Membros Pro

Olá a todos, 

Sempre que se inicia ou termina o horário de verão sempre tenho problemas nos clientes com erros referente a Data/Hora de emissão atrasada.

Em alguns coloco Fuso Horario (GMT-02:00) Atlantico Central com a hora certa e funciona, em outros só funciona se deixar (GMT-03:00) Brasilia com 1 hora atrasada E em outros não tenho problema nenhum. Todo ano é a mesmo mistério. O que pode ser isso? Tem alguma regra para eliminar de vez esse problema?

Desde já agradeço a atenção de todos

Link para o comentário
Compartilhar em outros sites

  • Moderadores
36 minutos atrás, doidopb disse:

Em alguns coloco Fuso Horario (GMT-02:00) Atlantico Central com a hora certa e funciona, em outros só funciona se deixar (GMT-03:00) Brasilia com 1 hora atrasada E em outros não tenho problema nenhum. Todo ano é a mesmo mistério. O que pode ser isso? Tem alguma regra para eliminar de vez esse problema?

A princípio só precisa estar com a hora e fuso horário corretos. O ACBr obtém essas informações do sistema para gerar no XML.

Se está tendo problemas analise os XML de envio e retorno gerado para comparar a hora e fuso gerados pelo aplicativo, e a hora e fuso de recebimento gerados pelo webservice.

Você também pode usar a configuração manual de fuso horário para não depender do sistema, ajustando a propriedade Configuracoes.WebServices.TimeZoneConf.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Então meu amigo, estou analisando mais atentamente o erro em questão, pois por coincidência na nossa máquina de desenvolvimento está ocorrendo também.

Fui analisar o log como sugeriu, ... no arquivo "*-pro-lot.xml" o horário está 2017-10-21T12:38:05-02:00 enquanto no arquivo de envio do XML está 2017-10-21T11:38:15-02:00.

Observe que os fusos horários batem, pois especifiquei no Windows o fuso horário Atlântico Central -02:00, mas o horário de envio fica sempre 1 hora menor, mesmo eu configurando no Windows o horário correto manualmente. Por alguma razão o componente está pegando essa 1 hora A MENOS, e não é a hora que está configurada no Windows. Isso ocorre em minha máquina e na máquina de alguns clientes.

Se eu mantiver o fuso horário Atlântico Central e colocar 1 hora A MAIS, por exemplo 13:38, aí o componente pega 12:38 e funciona.

Se eu colocar o fuso horário Brasília -03:00, aí no arquivo "*-pro-lot.xml" o horário fica 2017-10-21T12:47:24-02:00 enquanto no arquivo de envio do XML fica 2017-10-21T12:47:32-03:00. Como os fusos não batem ele dá erro, e nesse caso mantendo o fuso horário Brasilia -03:00 só pega se eu atrasar a hora, aí fica 2017-10-21T11:47:32-03:00 e a SEFAZ aceita.

O que fazer nesses casos? Esse problema é do componente ou do Windows? Como contornar esse problema?

PS: Reparei que nessas máquinas com esse erro o Windows afirma que o horário de verão começará apenas dia 22/10/2017 às 00:00, não sei se influencia em algo. Outra coisa, nas máquinas que não apresentam esse problema de horário no envio do XML o horário está normal, com fuso Brasília-03:00 e marcado ajustar horário de verão, e nesses casos o componente coloca no XML o horário correto e com fuso Atlantico Central-02:00 automaticamente.

Link para o comentário
Compartilhar em outros sites

  • Moderadores
7 minutos atrás, doidopb disse:

O que fazer nesses casos? Esse problema é do componente ou do Windows? Como contornar esse problema?

PS: Reparei que nessas máquinas com esse erro o Windows afirma que o horário de verão começará apenas dia 22/10/2017 às 00:00, não sei se influencia em algo. Outra coisa, nas máquinas que não apresentam esse problema de horário no envio do XML o horário está normal, com fuso Brasília-03:00 e marcado ajustar horário de verão, e nesses casos o componente coloca no XML o horário correto e com fuso Atlantico Central-02:00 automaticamente.

Windows desatualizado, não sabe que entrou em horário de verão e o ACBr gera o fuso -03:00 para Brasília quando o correto seria gerar -02:00.

Você pode instruir o ACBr a não usar o fuso do sistema e configurá-lo manualmente ajustando a propriedade Configuracoes.WebServices.TimeZoneConf.

Ou fazer a atualização do Windows...

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
1 hora atrás, BigWings disse:

Windows desatualizado, não sabe que entrou em horário de verão e o ACBr gera o fuso -03:00 para Brasília quando o correto seria gerar -02:00.

Você pode instruir o ACBr a não usar o fuso do sistema e configurá-lo manualmente ajustando a propriedade Configuracoes.WebServices.TimeZoneConf.

Ou fazer a atualização do Windows...

Meu amigo, grato pela ajuda...

Você saberia que atualização em específico seria essa? Pois alguns clientes usam o Windows XP e não possuem esse problema

Link para o comentário
Compartilhar em outros sites

  • Moderadores
29 minutos atrás, doidopb disse:

Meu amigo, grato pela ajuda...

Você saberia que atualização em específico seria essa? Pois alguns clientes usam o Windows XP e não possuem esse problema

Não sei.

Você pode tentar instalar a última atualização cumulativa disponível aqui:

https://support.microsoft.com/pt-br/help/914387/how-to-configure-daylight-saving-time-for-microsoft-windows-operating

Outra alternativa é configurar o TimeZoneConf como tzPCN, assim o ACBr vai identificar se está em horário de verão de acordo com a UF e regras atuais.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
1 hora atrás, BigWings disse:

Não sei.

Você pode tentar instalar a última atualização cumulativa disponível aqui:

https://support.microsoft.com/pt-br/help/914387/how-to-configure-daylight-saving-time-for-microsoft-windows-operating

Outra alternativa é configurar o TimeZoneConf como tzPCN, assim o ACBr vai identificar se está em horário de verão de acordo com a UF e regras atuais.

Coloquei tzPCN e funcionou, ele configurou o fuso horário corretamente, como ele identifica se está em horário de verão? Visto que o componente não usa esse valor como padrão, existe algum perigo em usar ele?

Link para o comentário
Compartilhar em outros sites

  • Moderadores
Em 21/10/2017 at 13:13, doidopb disse:

Coloquei tzPCN e funcionou, ele configurou o fuso horário corretamente, como ele identifica se está em horário de verão? Visto que o componente não usa esse valor como padrão, existe algum perigo em usar ele?

Estude a implementação da função IsHorarioDeVerao na unit pcnAuxiliar.pas.

Pelas regras implementadas, para estados em que  o horário de verão existe, ele vai do terceiro domingo de outubro até o terceiro domingo de fevereiro, exceto se cair no domingo de carnaval, então o fim é adiado em uma semana.

Neste tópico o @Juliomar Marchetti disse haver problemas em algumas cidades com esse método, mas não sei dizer o motivo.

Uma solução seria você implementar as três formas na sua aplicação e alterar conforme a necessidade.

  • Curtir 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Meu amigo, seguindo seu conselho estou colocando essa configuração manual... Coloquei um combo com 3 opções para o usuário marcar: Sistema, Manual ou PCN.

Mas como atribuo esses valores via código?

ACBrNFe1.Configuracoes.WebServices.TimeZoneConf.ModoDeteccao := ???

Link para o comentário
Compartilhar em outros sites

  • Moderadores
29 minutos atrás, doidopb disse:

Meu amigo, seguindo seu conselho estou colocando essa configuração manual... Coloquei um combo com 3 opções para o usuário marcar: Sistema, Manual ou PCN.

Mas como atribuo esses valores via código?

ACBrNFe1.Configuracoes.WebServices.TimeZoneConf.ModoDeteccao := ???

uses
  pcnAuxiliar;

{...}

  ACBrNFe1.Configuracoes.WebServices.TimeZoneConf.ModoDeteccao := tzPCN;


 

  • Curtir 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Obrigado,

Mas deixa eu ir um pouco além, não tem nenhuma MATRIZ como aquelas do pcnConversao(ex. TpcnTipoImpressao, TpcnIndicadorPagamento, TpcnCSTIcms, etc) para essa finalidade?

Pois aí eu colocaria, por exemplo, assim: ACBrNFe1.Configuracoes.WebServices.TimeZoneConf.ModoDeteccao := TpcnTimeZone(cbo_timezone.ItemIndex)

Link para o comentário
Compartilhar em outros sites

  • Moderadores
14 horas atrás, doidopb disse:

Pois aí eu colocaria, por exemplo, assim: ACBrNFe1.Configuracoes.WebServices.TimeZoneConf.ModoDeteccao := TpcnTimeZone(cbo_timezone.ItemIndex)

Você pode fazer dessa forma, sem problemas, mas veja a nomenclatura correta do enumerado na unit pcnAuxiliar.pas:

  TTimeZoneModoDeteccao = (tzSistema, tzPCN, tzManual);


 

  • Curtir 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

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.