Ir para conteúdo
  • Cadastre-se

dev botao

ACBrNFe - Falha na validação dos dados (dhSaiEnt)


Ver Solução Respondido por [email protected],
  • Este tópico foi criado há 408 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Boa tarde Amigos

Ocorre que comecei a usar o ACBrNFe me baseando pelo exemplo e quando iniciei os testes em ambiente de homologação recebi os erros de validação, mesmo tendo OK na validação de Regras de negócio.

Quando tento Validar o XML gerado recebo os erros de validação relacionado com a propriedade dhSaiEnt, conforme mensagem abaixo. No entanto, não encontrei essa propriedade, apenas dSaiEnt e hSaiEnt. Lendo o que os colegas colocaram (em outro tópico antigo) a partir da versão 3.10, parece que passou a valer o campo dhSaiEnt, mas não sei como popular esse campo.
Podem me ajudar a desvendar o problema? 

-------------- Falha na validação dos dados da nota: XXXXX ---------- 

 --> 1839 - Element '{http://www.portalfiscal.inf.br/nfe}dhSaiEnt': [facet 'pattern'] The value '2023-03-20T00:00:00+00:44' is not accepted by the pattern '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d([\-,\+](0[0-9]|10|11):00|([\+](12):00))'.
---------------------------- -------------- -------------- -------------- 

Estou alimentando os campos conforme abaixo, mas também não sei se tenho que usar (e como) o método Gerador.wCampo.

NotaF := ACBrNFe1.NotasFiscais.Add;
...
NotaF.NFe.Ide.dEmi       := Date;
NotaF.NFe.Ide.dSaiEnt   := Date; 
NotaF.NFe.Ide.hSaiEnt   := Now;  
NotaF.NFe.Ide.dhCont    := date; 
...

Achava que não estava com o trunk2 atualizado, mas tudo indica que estou.

Aproveitando, meu cliente atualmente usa uma empresa (terceira) para emitir NFe. Meu sistema gera um arquivo TXT no layout dessa empresa e eles processam (ambiente de produção) a nota sem problemas. Até consegui baixar o XML processado por eles e validei no ACBrNFe.

A idéia é implantar a emissão da NF pelo ACBr. 

Pergunta 01: Gostaria de saber se todas as validações em ambiente de homologação passarem sem problemas, eu já poderia virar a chave pra começar emitir em produção? O que recomendam faze e como?

- Atualmente já estou conseguindo alimentar o componente com todos os dados
- O método Assinar e o método gravarXML estão funcionando sem problemas
- Consigo ver todos os dados carregados no TreeView ao Importar um XML e colocá-los em banco de dados
- Consigo consultar carregando XML de uma NFe processada em produção e ver o status de emissão pelo SEFAZ

Pergunta 02: Ao gerar uma NFe (tpAmb) eu recebo um codigo de retorno (cStat=0). Em ambiente de homologação não deveríamos receber algum código entre (100 - 999)?

Desde já agradeço pela ajuda e quero parabenizá-los pelo projeto ACBr

Obs: Quando conseguir colocar o ACBrNFe (e boleto também) em produção pretendo assinar o ACBr Pro, pois tenho certeza que vou precisar da ajuda dos mestres do forum.

Link para o comentário
Compartilhar em outros sites

  • Moderadores
1 hora atrás, [email protected] disse:

NotaF.NFe.Ide.hSaiEnt   := Now;  

Boa tarde! 
Na versão 4.00 da NFe a tag é <dhSaiEnt> 

1 hora atrás, [email protected] disse:

Pergunta 01: Gostaria de saber se todas as validações em ambiente de homologação passarem sem problemas, eu já poderia virar a chave pra começar emitir em produção? O que recomendam faze e como?

Possívelmente, porém tem que ficar atento as regras (ou seja compreender o passo a passo e saber o que está para entrar em vigor).
Isto é necessário, pois as vezes entrará uma regra em vigor digamos no próximo mês, que está valendo em homologação, porém ainda não entrou em produção. 
Se você não tem ciência (acompanhando as NTs), você pode incluir alguma tag ou regra que será rejeitado pelo ambiente de produção, pois o mesmo ainda não entrou em vigor, mas terá que infomrar no homologação, pois o ambiente já está preparado para a validação.

Por esta razão sempre é importante acompanhar as Notas Técnicas aonde tem a informação de cada regra quando valerá em ambiente produção e também homologação. 

 


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores
9 horas atrás, [email protected] disse:

Pergunta 02: Ao gerar uma NFe (tpAmb) eu recebo um codigo de retorno (cStat=0). Em ambiente de homologação não deveríamos receber algum código entre (100 - 999)?

O ambiente homologação deve responder com os mesmos códigos que o ambiente produção.


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

Link para o comentário
Compartilhar em outros sites

Agora, Kiko Fernandes disse:

Boa tarde! 
Na versão 4.00 da NFe a tag é <dhSaiEnt> 

Possívelmente, porém tem que ficar atento as regras (ou seja compreender o passo a passo e saber o que está para entrar em vigor).
Isto é necessário, pois as vezes entrará uma regra em vigor digamos no próximo mês, que está valendo em homologação, porém ainda não entrou em produção. 
Se você não tem ciência (acompanhando as NTs), você pode incluir alguma tag ou regra que será rejeitado pelo ambiente de produção, pois o mesmo ainda não entrou em vigor, mas terá que infomrar no homologação, pois o ambiente já está preparado para a validação.

Por esta razão sempre é importante acompanhar as Notas Técnicas aonde tem a informação de cada regra quando valerá em ambiente produção e também homologação. 

 

Boa tarde Kiko,

A questão é que nem consigo usar (por exemplo: NotaF.NFe.Ide.dhSaiEnt := Now) porque a IDE do Delphi informa que não declarei dhSaiEnt.

Acredito que não é o suficiente Configurar o Componente ACBrNFe (Configurações\Geral\VersaoDF = ve400), para que essa tag fique acessível, pois já fiz isso.

Se tiver outra dica agradeço.

Agora, Kiko Fernandes disse:

O ambiente homologação deve responder com os mesmos códigos que o ambinete produção.

Você saberia o porque de não estar recebendo nenhum código no ambiente de homologação, apenas zero?

Link para o comentário
Compartilhar em outros sites

  • Moderadores
1 hora atrás, [email protected] disse:

Isso será o suficiente para transformar a data e hora no formato (2023-03-16T05:20:26-03:00)  na propriedade dhSaiEnt?

dEmi para data e hora de emissão

dSaiEnt para data e hora de saída

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

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

Agora, BigWings disse:

dEmi para data e hora de emissão

dSaiEnt para data e hora de saída

Olha só, eu estou populando os campos abaixo da seguinte forma:

NotaF.NFe.Ide.dEmi      := Now;
NotaF.NFe.Ide.dSaiEnt   := Now; 

Mesmo assim, ao tentar validar o XML gerado, a mensagem abaixo continua:

 --> 1839 - Element '{http://www.portalfiscal.inf.br/nfe}dhSaiEnt': [facet 'pattern'] The value '2023-03-21T17:41:54+00:44' is not accepted by the pattern '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d([\-,\+](0[0-9]|10|11):00|([\+](12):00))'.

Sem falar que estou testando a emissão em ambiente taHomologacao e tipo emissão teNormal e o sistema tá dando falha de validação Justificativa em contingencia inválida ou (''). 

Alguma outra sugestão? 

Obrigado

Link para o comentário
Compartilhar em outros sites

  • Moderadores
15 minutos atrás, [email protected] disse:

The value '2023-03-21T17:41:54+00:44' is not accepted

O que está errado aí é o fuso horário, não existe esse fuso +00:44.

Se está com a configuração do fuso manual, veja se está informando corretamente.

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

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

Agora, BigWings disse:

O que está errado aí é o fuso horário, não existe esse fuso +00:44.

Se está com a configuração do fuso manual, veja se está informando corretamente.

Se voce estiver se referindo ao fuso do sistema operacional, está correto (UTC -03:00) Brasilia.

Quanto à configuração manual do fuso, se puder me informar onde isso é configurado, seria de grande valia.

A questão é como passar para o campo dEmi que é (TDateTime) uma expressão (yyyy-MM-ddThh:mm:ss-03:00) ?

E como a propriedade dhSaiEnt é populada se não posso nada pra ela?

Link para o comentário
Compartilhar em outros sites

  • Moderadores
26 minutos atrás, [email protected] disse:

Quanto à configuração manual do fuso, se puder me informar onde isso é configurado, seria de grande valia.

ACBrNFe1.Configuracoes.WebServices.TimeZoneConf.ModoDeteccao -> o padrão é o fuso horário da máquina
ACBrNFe1.Configuracoes.WebServices.TimeZoneConf.TimeZoneStr -> caso ModoDetecao seja tzManual

27 minutos atrás, [email protected] disse:

A questão é como passar para o campo dEmi que é (TDateTime) uma expressão (yyyy-MM-ddThh:mm:ss-03:00) ?

E como a propriedade dhSaiEnt é populada se não posso nada pra ela?

Veja os fontes:

  if NFe.infNFe.Versao >= 3 then
   begin
     Gerador.wCampo(tcStr, 'B09', 'dhEmi   ', 25, 25, 1, DateTimeTodh(NFe.ide.dEmi) + GetUTC(CodigoParaUF(NFe.ide.cUF), NFe.ide.dEmi), DSC_DEMI);

     if (NFe.ide.modelo = 55) and (NFe.ide.dSaiEnt <> 0) then
       Gerador.wCampo(tcStr, 'B10', 'dhSaiEnt', 25, 25, 0, DateTimeTodh(NFe.ide.dSaiEnt) + GetUTC(CodigoParaUF(NFe.ide.cUF), NFe.ide.dSaiEnt), DSC_DSAIENT);
   end

 

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

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

Agora, BigWings disse:

ACBrNFe1.Configuracoes.WebServices.TimeZoneConf.ModoDeteccao -> o padrão é o fuso horário da máquina
ACBrNFe1.Configuracoes.WebServices.TimeZoneConf.TimeZoneStr -> caso ModoDetecao seja tzManual

Veja os fontes:

  if NFe.infNFe.Versao >= 3 then
   begin
     Gerador.wCampo(tcStr, 'B09', 'dhEmi   ', 25, 25, 1, DateTimeTodh(NFe.ide.dEmi) + GetUTC(CodigoParaUF(NFe.ide.cUF), NFe.ide.dEmi), DSC_DEMI);

     if (NFe.ide.modelo = 55) and (NFe.ide.dSaiEnt <> 0) then
       Gerador.wCampo(tcStr, 'B10', 'dhSaiEnt', 25, 25, 0, DateTimeTodh(NFe.ide.dSaiEnt) + GetUTC(CodigoParaUF(NFe.ide.cUF), NFe.ide.dSaiEnt), DSC_DSAIENT);
   end

 

O componente está configurado da seguinte forma:

TimeZone ModoDeteccao
tzManual
tzSistema - Está selecionado esse
tzPCN

TimeZoneStr = Está em branco

Está correto dessa forma ?

Eu devo fazer uma chamada para o procedimento Gerador.wCampo(...) logo após popular os campos dEmi e dSaiEnt ?

Grato

Link para o comentário
Compartilhar em outros sites

13 horas atrás, [email protected] disse:

O componente está configurado da seguinte forma:

TimeZone ModoDeteccao
tzManual
tzSistema - Está selecionado esse
tzPCN

TimeZoneStr = Está em branco

Está correto dessa forma ?

Eu devo fazer uma chamada para o procedimento Gerador.wCampo(...) logo após popular os campos dEmi e dSaiEnt ?

Grato

Boa tarde 

Alterei o ModoDeteccao para tzManual e coloquei o TimeZoneStr = -03:00.
Ao validar o XML deu "Nota Fiscal Eletrônica Valida".

Ok funcionou dessa forma, mas ainda não consegui descobrir por que os campos abaixo ficam dessa forma:

procNFe
    tpAmb= 1
    verAplic= 
    chNFe= 
    dhRecbto= 30/12/1899
    nProt= 
    digVal= 
    cStat= 0
    xMotivo= 

Obs: lembrando que estou testando em ambiente de homologação...

Estou esquecendo de alguma configuração ou parâmetro?

Obrigado pela ajuda.

Link para o comentário
Compartilhar em outros sites

  • Moderadores
4 horas atrás, [email protected] disse:

Ok funcionou dessa forma, mas ainda não consegui descobrir por que os campos abaixo ficam dessa forma:

Creio que esteja usando o modo síncrono, e olhando no objeto errado.

Estude o programa exemplo, pra entender a diferença no tratamento nos modos síncrono e assíncrono.

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

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

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