Ir para conteúdo
  • Cadastre-se

dev botao

Setando Fuso Horário Manualmente no XML


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

Recommended Posts

Bom dia, tenho a seguinte situação aqui na empresa e não sei bem como resolver: temos um cliente que possui 4 empresas em diferentes estados (Paraná, Mato Grosso, Acre e Rondônia), todas as empresas usam o meu sistema, que emite nota usando o ACBr em seus respectivos estados, o meu sistema acessa um BD comum a todos as empresas diretamente pela Internet, num servidor em cloud. Esse cliente centralizou a emissão de notas numa única empresa (física - Paraná), eles treinaram lá uma funcionária que emite todas as notas para todas as empresas em de todos os estados.

Aí é que começa o problema... Eu fiz um esquema aqui no sistema que de acordo com a empresa pela qual está emitindo nota o sistema altera o seu horário sozinho, por exemplo, se ela loga na empresa do Paraná eu seto o horário do sistema como 13h30, se no mesmo momento ela precisa emitir uma NF-e no Acre, ela loga na empresa do Acre e o sistema altera sozinho seu relógio interno para o Acre (9h30). Tudo funcionaria tranquilamente, não fosse um detalhe, o ACBr pega o fuso horário da máquina pra jogar na tag dhEmi do XML, isso faz com que além de ela ter que logar na empresa, ela tenha que ajustar o fuso do Windows dela cada vez que ela muda de empresa... Aí vem a questão:

É possível alterar o fuso horário das tags de data/hora manualmente? Daí eu faço passar o fuso correto de acordo com a empresa em que ela está logada...

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Sim... Você pode editar o XML e tratá-lo diretamente na sua aplicação, antes da assinatura e envio...

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

  • Moderadores

O problema pedron é que por exemplo temos locais onde se voltar a fazer como era feito uma vez via UF vai dar problema !

tem cidades que ficam na divisa de estados e também de fuso horário e acontece de alterar o mesmo e enviar errado, com o fuso horário do estado e não respeitando o que é para aquela cidade, ocasionando erro!

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

7 minutos atrás, Juliomar Marchetti disse:

O problema pedron é que por exemplo temos locais onde se voltar a fazer como era feito uma vez via UF vai dar problema !

tem cidades que ficam na divisa de estados e também de fuso horário e acontece de alterar o mesmo e enviar errado, com o fuso horário do estado e não respeitando o que é para aquela cidade, ocasionando erro!

É por isso que estou querendo fazer uma propriedade, não obrigatória, se a propriedade não for preenchida continua tudo do jeito que está, se for preenchida aí o componente colocaria no fuso do XML o que foi informado na propriedade... No meu caso também não vou conseguir confiar no estado... Eu tenho que passar o certo, vou fazer uma configuração para o fuso no sistema, por empresa...

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

@pedron, mostre-nos sua ideia, assim podemos trabalhar juntos para que ao finalizar não precise ficar ajustando código.

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

Link para o comentário
Compartilhar em outros sites

A princípio havia pensado num Integer, mas aí não daria pra deixar vazio... Talvez uma string mesmo, onde fosse informado '-2', '-1', ou '' (vazio). Nessa idéia se a string foir vazia o comportamento do componente permaneceria o mesmo 

Poderíamos fazer também um tipo enumerado... Colocando todos os possíveis fusos do Brasil, algo como TAcbrUTC = (utcNenhum, utcMenos3, utcMenos4). Nessa idéia o utcNenhum assumiria o comportamento atual do Acbr.

Sobre o local da propriedade, poderia ser lá nas configurações do WebService (algo como "Configuracoes.WebServices.FusoHorario"), me parece que dá mais certo...

Enfim, estou aberto a sugestões... 

Editado por pedron
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Na verdade, o ideal seria ter um jeito de passar uma configuração de TimeZone completa (como a que o próprio ACBr pega do Windows), o que incluiria fuso e horário de verão, por exemplo, (entre outros detalhes)... Mas aí fica mais complicadinho de implementar como propriedade published no componente... Teria que ser algum public mesmo, pra passar na mão...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Pedron,

Ótimas ideias... acho que podemos manter uma String para o "TimeZone"... e ela pode ser Published... no SetTimeZone, escrevemos um código para saber se o usuário está passando um valor válido...

  • Curtir 1
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

Estou totalmente de acordo com a possibilidade de se criar uma maneira de informar o fuso horário para o componente ACBr, sem depender apenas do Windows. Tivemos alguns casos nesse fim de semana em que os computadores (principalmente Windows XP) saíram do horário de verão no domingo e daí passou a dar erro na transmissão da nota. A solução foi atrasar o horário desses computadores em 1 hora, o que fez com que esses computadores ficassem em um horário diferente do correto. Se houvesse uma maneira de informar o fuso pelo componente passaria a ser possível implementar uma lógica de entrada/saída de horário de verão diretamente no sistema, assim como acontece com as impressoras fiscais.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Isso já existe no ACBr, ( não está em uso no momento )...

O problema é que as regras do governo mudam todo ano

Até onde eu sei, os ECFs não mudam o horário de verão automaticamente 

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

Sim... Além desse caso específico do meu cliente também tive esse problema do horário de verão em vários clientes... Se eu pudesse forçar o fuso (pegando o horário do servidor de banco de dados) independente do horário do SO, tudo funcionaria 100%.

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

  • Fundadores
1 hora atrás, pedron disse:

Legal, quais seriam os valores válidos para essa string?

Ainda não sei bem... Preciso pesquisar....

Mas acredito que nas Units do projeto Synapse (usado no ACBr) deve existir algo a respeito...

pode enviar os fontes, que me comprometo de implementar a validação  

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

Só recapitulando então... Devo criar uma propriedade TimeZone em  Configuracoes.WebServices, cujos valores aceitos a princípio são '-5', '-4', '-3', '-2', '-1' e '' (vazio)?

4 minutos atrás, 3Soft Sistemas disse:

tens o serviço de Horário do Windows ativo nas maquinas? ele é o responsável por atualizar o horário das maquinas ligadas a um servidor

Então... Não queremos depender da configuração das máquinas clientes... 

E mesmo que tivesse esse serviço ativo não resolveria o meu caso...

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

esse serviço n tem a ver com dependencia das maquinas e sim o oposto, elas dependerem de um servidor. outra coisa que podes ver é se as maquinas que reportam erros não estao configuradas para acertar a hora online.

repara que somente indico possiveis causas de erros no horario, nao quer dizer que não exista alguma necessidade em olhar o codigo tambem, isso vai depender de como foi desenvolvida a aplicação

Link para o comentário
Compartilhar em outros sites

  • Fundadores
Citar

Só recapitulando então... Devo criar uma propriedade TimeZone em  Configuracoes.WebServices, cujos valores aceitos a princípio são '-5', '-4', '-3', '-2', '-1' e '' (vazio)?

A princípio sim... Depois vemos a notação correta, e como incluir o flag de horário de verão 

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

46 minutos atrás, Daniel Simoes disse:

Isso já existe no ACBr, ( não está em uso no momento )...

O problema é que as regras do governo mudam todo ano

Sim, eu sei. Na verdade essa era a maneira que estava implementado no trunk1, correto?

47 minutos atrás, Daniel Simoes disse:

Até onde eu sei, os ECFs não mudam o horário de verão automaticamente 

Os ECFS não mudam automaticamente, mas existem comandos que podem ser enviados pelo programa para que a impressora fiscal entre ou saia do horário de verão. Se fosse possível informar o "TimeZone" para o componente, este controle de entrar ou sair do horário de verão poderia ser feito pelo programa e não dependeria da configuração do Windows.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Sim mas eu já expliquei que também dava erro!

em lugares onde usam mesmo windows certo e tudo mais e a cidade é de um estado que corta ao meio , não considerava corretamente o fuso horário!

se pegar o timezone vai funcionar certo mas como o mundo perfeito não existe e como quase todos não atualizam

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

11 minutos atrás, Juliomar Marchetti disse:

Sim mas eu já expliquei que também dava erro!

em lugares onde usam mesmo windows certo e tudo mais e a cidade é de um estado que corta ao meio , não considerava corretamente o fuso horário!

se pegar o timezone vai funcionar certo mas como o mundo perfeito não existe e como quase todos não atualizam

Certo, mas não entendi porque criar uma propriedade na qual você possa passar o fuso iria dar problema...

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Apliquei as seguintes modificações no SVN

-- pcnAuxiliar --      (por: DSA)
[+] Adicionado novo Tipo: TTimeZoneModoDeteccao = (tzSistema, tzPCN, tzManual);
[+] Adicionada novca classe: "TTimeZoneConf" com as propriedades published:
    ModoDeteccao: TTimeZoneModoDeteccao
    TimeZoneStr: String
[*] Removida a sobrecarga do método: "GetUTC"
[+] Adicionado o método: "GetUTCSistema", que utiliza a rotina de synautil para
    detectar o TimeZone do Sistema Operacional
[+] Adicionada uma variável global "TimeZoneConf: TTimeZoneConf", para permitir
    configurar a maneira que o método "GetUTC", irá se comportar de acordo com
    as propriedades de TTimeZoneConf    

-- ACBrDFeConfiguracoes --
[+] Adicionado a propriedade: TimeZoneConf: TTimeZoneConf em TWebServicesConf,
    para permitit configurar como o métoto pcnAuxiliar.GetUTC se comportará,
    na detecção do TimeZone (leia mais em: PCNComum-change-log.txt)   

--  pcnCCeNFe, pcnEnvEventoNFe, pcnNFeW, pcnProcNFe --
[*] Ajuste para usar nova versão de pcnAuxiliar.GetUTC         (por: DSA)

-- ACBrNFE, ACBrNFeNotasFiscais --
[*] Ajuste para propagar valores de ACBrNFE.Configuracoes.WebServices.TimeZoneConf
    para pcnAuxiliar.TimeZoneConf      (por: DSA)  

 

TimeZoneConf.jpg

  • Curtir 5
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

  • Este tópico foi criado há 2960 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.