Ir para conteúdo
  • Cadastre-se

dev botao

Problema ao carregar XML com LoadFromFile


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

Recommended Posts

Boa tarde pessoal.

Depois que atualizei o ACBR começou a dar problema em uma rotina que eu tinha antes e funcionava normalmente...

É o seguinte... tenho uma rotina onde leio um XML em uma pasta e carrego no componente utilizando o código:

ACBrNFe1.NotasFiscais.LoadFromFile('arquivo.xml');

Onde esse XML que estou lendo já está na versão 3.10 "infNFe versao="3.10""

Porém na Unit ACBrNFeNotasFiscais.pas na função: 

function TNotasFiscais.LoadFromFile(CaminhoArquivo: String; AGerarNFe: Boolean = True): Boolean;

e especificamente na linha 

LocNFeR := TNFeR.Create(Self.Add.NFe); 

o componente está trocando a versão para 2.00 e daí o XML fica diferente e perde o conteúdo das tags que são do layout 3.10. Em testes debugando a aplicação percebi que isso acontece nessa linha acima.

Obs: Já testei também passando False para a propriedade AGerarNFe, mas o problema continua.

ACBrNFe1.NotasFiscais.LoadFromFile('arquivo.xml', False);

Alguém mais teve esse problema, se sim, como foi resolvido?

Obrigado, Att, Alex.

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

Bom dia,

Alex, faça o debug e veja que após a linha "LocNFeR := TNFeR.Create(Self.Add.NFe);" é feita as verificações da versão do XML.

Faço a importação de XML nas versões 1.00, 2.00 e 3.10 e não tenho esse problema.

Certifique que seu código está atualizado conforme do svn e tente fazer o debug para encontrar o problema.
 

Link para o comentário
Compartilhar em outros sites

Boa tarde Leonardo, agradeço o retorno.

Conforme vc me falou, fiz novos testes e detectei que o problema ocorre somente quando é um XML que foi baixado utilizando a rotina de download pelo componente.

Segue o XML em anexo, se puder, tente fazer com esse XML meu pra ver se funciona no seu software por gentileza.

Para saber se deu certo, basta vc checar a Data de Emissão por exemplo pois vai estar em branco.

Obs: meus fontes estão atualizados corretamente.

Obrigado, Att, Alex.

35150659225698000196550010000006601479104318.XML

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

Utilizando a rotina de download o XML fica com duas tags versão:

<retDownloadNFe versao="1.00"
<infNFe versao="3.10"

e com isso acaba priorizando a primeira tag.

Fiz a alteração na unit pcnNFeR.pas com base no trunk e anexei nesse post. A mesma alteração pode ser feita no trunk2, se utilizar.

pcnNFeR.pas

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Alex,

O problema que esse XML que você postou é o retorno da SEFAZ, se o seus fontes estão atualizados, o componente alem de salvar esse XML de retorno, extrai o XML da NF-e que esta contida nele e salva separadamente.

Portanto você esta carregando o conteúdo do XML errado.

Abra esse XML usando um navegado e note que dentro do grupo <procNFe> temos o XML da NF-e propriamente dito, ou seja, o grupo <nfeProc> que contem todos os dados pertinentes a venda mais a assinatura digital do emitente e o protocolo de autorização emitido pela SEFAZ.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Utilizando a rotina de download o XML fica com duas tags versão:

<retDownloadNFe versao="1.00"
<infNFe versao="3.10"

e com isso acaba priorizando a primeira tag.

Fiz a alteração na unit pcnNFeR.pas com base no trunk e anexei nesse post. A mesma alteração pode ser feita no trunk2, se utilizar.

pcnNFeR.pas

Bom dia Leonardo, agradeço o retorno e a alteração feita.

Fiz os testes com essa UNIT que vc passou e funcionou perfeitamente.

Obrigado, Att, Alex.

Bom dia Alex,

O problema que esse XML que você postou é o retorno da SEFAZ, se o seus fontes estão atualizados, o componente alem de salvar esse XML de retorno, extrai o XML da NF-e que esta contida nele e salva separadamente.

Portanto você esta carregando o conteúdo do XML errado.

Abra esse XML usando um navegado e note que dentro do grupo <procNFe> temos o XML da NF-e propriamente dito, ou seja, o grupo <nfeProc> que contem todos os dados pertinentes a venda mais a assinatura digital do emitente e o protocolo de autorização emitido pela SEFAZ.

Bom dia Italo.

Conforme o Leonardo falou pode acontecer do usuário receber o XML igual esse meu vindo de outro sistema e nesse caso o ACBR vai ler a versão errada.

Peço que se possível analise a alteração feita pelo Leonardo na UNIT que ele anexou, pois funcionou corretamente, dessa forma poderá subir à versão oficial no SVN.

Obrigado pelo retorno.

Att, Alex.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Não sei qual é a opinião dos demais mantenedores do componente, mas a minha é:

O método LoadFromFile foi criado para ler o XML de uma NF-e, o XML em questão não é de uma NF-e e sim de um retorno de um pedido de download.

No meu entendimento não devemos realizar alterações no LoadFromFile.

O que ser feito no caso de receber somente este arquivo de retorno gerado por uma aplicação de terceiros é:

O comando abaixo carrega de forma correta o XML de retorno de um download.

ACBrNFe1.RetDownloadNFe.LerXMLFromFile(<informar o nome do XML com o caminho>);

Depois temos:

aXML := ACBrNFe1.RetDownloadNFe.retNFe.Items[x].procNFe;

Onde [x] varia de zero até a quantidade de notas que o retorno possa ter.

a variável aXML vai conter o XML da NF-e que você poderá ler através do método LoadFromString:

ACBrNFe1.NotasFiscais.LoadFromString(aXML);

resumindo:

ACBrNFe1.RetDownloadNFe.LerXMLFromFile(<informar o nome do XML com o caminho>);

for x := 0 to ACBrNFe1.RetDownloadNFe.retNFe.count -1 do

begin

     aXML := ACBrNFe1.RetDownloadNFe.retNFe.Items[x].procNFe;

     ACBrNFe1.NotasFiscais.LoadFromString(aXML);

end;

 

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

 

No meu entendimento não devemos realizar alterações no LoadFromFile.

Bom dia Ítalo,

Na verdade, não há alteração no LoadFromFile e sim no pcnNFeR que faz a leitura das tags do XML.

No caso deste post, o XML é da NF-e, mas gerado por um sistema que não utiliza ACBr e talvez por isso o erro em questão.

No entanto, o ACBr não faz a leitura correta da versão da NF-e.

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Leonardo,

Se você levar em consideração ao XML que foi postado pelo nosso amigo Alex, não se trata de um XML de NF-e e sim de um retorno de download.

E a versão do XML de download é 1.00

Sei que dentro deste contem o XML da NF-e cuja versão é 3.10, mas entenda que o LoadFromFile foi criado para ler o XML de uma NF-e e não de um retorno de download.

A aplicação que gerou esse arquivo deveria extrair a NF-e do retorno e salva-la em disco com o nome: <chave>-nfe.xml

Como ela não faz, apresentei acima uma pequena rotina implementada no ACBrNFe que faz o serviço, só não coloquei a linha para salvar em disco o XML da NF-e.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...

Boa tarde.

Desculpem a demora pelo retorno, mas acabei envolvido com outros projetos aqui e esse ajuste acabou ficando parado, agora retomei para finalizá-lo.

Resolvi mudar a rotina conforme a orientação do Italo visto que o mesmo considerou não ser uma falha do componente por não se tratar de um XML de uma NF-e e sim de um retorno de download.

Agradeço a ajuda do amigo Leonardo que já tinha feito a alteração e havia funcionado, mas resolvi alterar pelo motivo de não ter subido o ajuste para a versão oficial e daí fica complicado quando preciso atualizar o componente.

Porém, não estou conseguindo fazer o teste pois parece que não está funcionando a rotina do Download no ambiente de homologação, a mesma rotina está funcionando em ambiente de produção.

ACBrNFe1.DownloadNFe.Download.Chaves.Clear;
with ACBrNFe1.DownloadNFe do begin
   Download.CNPJ := sCNPJ;
   with Download.Chaves.Add do begin
      chNFe := sChave;
   end;
end;
ACBrNFe1.Download;

Retorno: 999 - Rejeicao: Erro nao catalogado

Alguém tem tido esse problema também?

Obrigado, Alex.

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

  • Consultores

Boa tarde Alex,

Toda vez que o status for 999 o problema é na SEFAZ, o jeito é aguardar e tentar mais tarde.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...
  • Este tópico foi criado há 3171 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.

The popup will be closed in 10 segundos...