Ir para conteúdo
  • Cadastre-se

dev botao

Falha para gerar o XML da NFSe GINFES


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

Recommended Posts

Bom dia amigos

Estou tentando enviar uma NFSe para o provedor GINFES mas estou recebendo a seguinte mensagem 

Falha ao localizar o nó Raiz.

Estou usando Lazarus 1.4, FPC 2.6 em Linux 32 bits e usando o próprio exemplo Demo_ACBrNFSe

Atualizei o ACBr para revisão 12473

Alguém poderia me dar uma ajuda com isso ! :-)

Abraços,

André Medeiros

Link para o comentário
Compartilhar em outros sites

Para complementar as informações acima

Estou gerando o XML conforme segue

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE test [<!ATTLIST ns3:LoteRps Id ID #IMPLIED>]><ns3:EnviarLoteRpsEnvio xmlns:ns3="http://www.ginfes.com.br/servico_enviar_lote_rps_envio_v03.xsd" xmlns:ns4="http://www.ginfes.com.br/tipos_v03.xsd"><ns3:LoteRps Id="1"><ns4:NumeroLote>1</ns4:NumeroLote>

Quando debugo a função _XmlSecLookUpNode 

O ParentNode = LoteRps

Quando entro a primeira vez no while vejam os valores abaixo

ChildNode = NumeroLote
NextNode = Signature

Parece que ele já passou pelo nó depois disse ele varre todo o xml me retornando nil no FoundNode

Espero que estas informações ajudem

Abraços,

 

André Medeiros

Link para o comentário
Compartilhar em outros sites

Olá Wellington!

Fico feliz por não ser o único com problema, mas tenho uma restrição referente ao uso da capicom, pois o ambiente de produção é Linux, neste caso preciso usar a OpenSSL

Mesmo assim obrigado pela dica. 

Talvez uma informação interessante é que a emissão da NFe e NFSe para a cidade de São Paulo são emitidas normalmente neste ambiente. Por issa acredito que não seja algo relacionado ao uso da DLL diretamente.

Abraços,

André Medeiros

Link para o comentário
Compartilhar em outros sites

Olá Amigos

Fiz mais alguns testes usando Windows 10 com Dephi XE2. Quando uso Capicom para efetuar a assinatura consigo transmitir a NF com sucesso mas quado uso OpenSSL o erro

"Falha ao localizar o nó Raiz"

Continua persistindo.

Alguém tem alguma ideia do que possa ser ?

Grato,

 

André Medeiros

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia André,

Só para deixar claro, quando você diz "transmitir a NF" esta se referindo a NFS-e, correto?

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

Bom dia Italo,

Me desculpe. É isso mesmo que eu quis dizer, a NFS-e é transmitida com sucesso quando usamos Capicom. Só não localiza o nó raiz quando é OpenSSL.

Se precisar de qualquer outra informação, estou a disposição

[]s

André Medeiros

Link para o comentário
Compartilhar em outros sites

  • Consultores

André,

Por favor atualize todos os fontes de todas as notas reinstale todos os componentes, pois foi enviado algumas correções e melhorias no que se refere ao OpenSSL.

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

Olá Italo, 

Atualizei para revisão 12483, na compilação dos pacotes deu um erro no ACBrDevice.pas Linha 1569

Printer.Write(AString);

Eu comentei essa linha e pude recompilar todos os pacotes.

Porém o erro "Falha ao localizar o nó Raiz" ainda continua. 

Só lembrando que estou estou usando FPC com OpenSSL

[]s

André Medeiros

Link para o comentário
Compartilhar em outros sites

Olá Italo e amigos !

Consegui resolver o problema mas não sei como corrigir. Segue abaixo minhas considerações

No método XmlSecFindSignatureNode da ACBrDFeOpenSSL.pas temos as seguintes linhas

if (InfElement <> '') then
  begin
    { Procura InfElement em todos os nós, filhos de Raiz, usando XMLSec }
    infNode := XmlSecLookUpNode(rootNode, InfElement );             
.
.
.

A variável  InfElement sempre possui o valor 'ns3:LoteRps', neste caso sempre retornando infNode como Nil e causando a exceção de que o nó não foi encontrado.

Eu fiz a seguinte alteração para testes

  { Se tem InfElement, procura pelo mesmo. Isso permitirá acharmos o nó de
    assinatura, relacionado a ele (mesmo pai) }
  InfElement:='LoteRps';
  if (InfElement <> '') then
  begin
    { Procura InfElement em todos os nós, filhos de Raiz, usando XMLSec }
    infNode := XmlSecLookUpNode(rootNode, InfElement );
.
.
.
.

Vejam que adicionei esta linha abaixo de forma grotesca apenas para efetuar os testes substituindo o valor de ns3:LoteRps para apenas LoteRps

InfElement:='LoteRps';

Com isso o nó é encontrado, a assinatura e a transmissão da NFSe são feitas com sucesso.

Acredito que isso seleciona o problema, porém não sei como fazer para corrigir dentro do pacote que prevê vários provedores de NFSes

Alguém pode ajudar ? 

[]s

André Medeiros

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa noite André,

Pelo que entendi o componente compara o valor de rootNode com infElement.

O infElement é passado para a rotina como sendo "ns3:LoteRps" mas o valor de rootNote retornado pela função xmlDocGetRootElement é "LoteRps".

Sendo que no XML existe o prefixo ns3: na tag LoteRps.

O problema é que somente uns 2 ou 3 provedores existem o prefixo, um deles é o Ginfes.

Talvez a solução seria:

(...)

if Pos(':', infElement) > 0 then 

 infElement := Copy(infElement, Pos(':', infElement) +1, Length(infElement));

  { Se tem InfElement, procura pelo mesmo. Isso permitirá acharmos o nó de
    assinatura, relacionado a ele (mesmo pai) }
  if (InfElement <> '') then
  begin
(...)

Com isso removemos o prefixo do infElement caso ele exista.

Tente essa solução.

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

  • Consultores

Bom dia André,

Já fiz a alteração e enviei para o repositório.

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

  • 1 mês depois ...
Em 14/10/2016 at 12:15, almp1 disse:

Olá Italo, 

Atualizei para revisão 12483, na compilação dos pacotes deu um erro no ACBrDevice.pas Linha 1569

Printer.Write(AString);

Eu comentei essa linha e pude recompilar todos os pacotes.

Porém o erro "Falha ao localizar o nó Raiz" ainda continua. 

Só lembrando que estou estou usando FPC com OpenSSL

[]s

Também tive este erro, mas será que está correto comentar uma linha Printer.Write num componente que deve IMPRIMIR alguma coisa?

Alexsander da Rosa

Rednaxel Informática

http://rednaxel.com

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa noite Alexsander,

Você esta com todos os fontes atualizados?

Se sim, mesmo assim ocorre o problema?

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

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