Jump to content

Setando Fuso Horário Manualmente no XML


pedron
  • Este tópico foi criado há 2365 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 to comment
Share on other sites

  • Consultores

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
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

Link to comment
Share on other 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...

Edited by pedron
Link to comment
Share on other 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 to comment
Share on other 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... 

Edited by pedron
  • Like 1
Link to comment
Share on other 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...

  • Like 1
Link to comment
Share on other 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...

  • Like 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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%.

Edited by pedron
Link to comment
Share on other 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 to comment
Share on other 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...

Edited by pedron
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

  • Consultores

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
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

Link to comment
Share on other 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 to comment
Share on other 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

  • Like 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 to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.