Ir para conteúdo
  • Cadastre-se

dev botao

XML da NFCe não validado com Lazarus


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

Recommended Posts

Bom dia.

Estou iniciando os testes com a NFCe.

Já estou com o CSC liberado pela Sefaz para homologação.

Uso o Lazarus v1.4.4 no Windows.

Faço testes com a NFe no Lazarus, usando o mesmo BD, e tudo ok.

O erro ocorre na validação do XML. O mesmo é impresso em modo OffLine.

Debugando descobri o primeiro ponto:

Na procedure NotaFiscal.Validar;

    if EhAutorizacao( DblToVersaoDF(ok, VerServ), Modelo, cUF) then
      ALayout := LayNfeAutorizacao
    else
      ALayout := LayNfeRecepcao;


    // Extraindo apenas os dados da NFe (sem nfeProc)
    DeclaracaoXML := ObtemDeclaracaoXML(AXML);
    AXML := DeclaracaoXML + '<NFe xmlns' +
            RetornarConteudoEntre(AXML, '<NFe xmlns', '</NFe>') +
            '</NFe>';

Só está autorizada a UF 13 

function TACBrNFe.EhAutorizacao( AVersao: TpcnVersaoDF; AModelo: TpcnModeloDF;
  AUFCodigo: Integer ): Boolean;

  Result := (AVersao = ve310);
  if AModelo = moNFCe then
    Result :=not(AUFCodigo in [13]); // AM

Achei que fosse só isso. 
Alterei para a UF que trabalho 27. 

Agora o erro foi ocorrer no retorno da função SSL.Validar.

  NotaEhValida := SSL.Validar(AXML, GerarNomeArqSchema(ALayout, VerServ), Erro);   

  Os dados em AXML estão corretos;
  A função GerarNomeArqSchema volta True;
  


function TDFeSSL.Validar(const ConteudoXML: String; ArqSchema: String;
  out MsgErro: String): Boolean;
begin
  if EstaVazio(ArqSchema) then
    raise EACBrDFeException.Create('Arquivo de Schema não especificado');

  // ArqSchema deve vir com o Path Completo
  if not FileExists(ArqSchema) then
    raise EACBrDFeException.Create('Arquivo ' + sLineBreak + ArqSchema +
      sLineBreak + 'Não encontrado');

  Result := FSSLClass.Validar(ConteudoXML, ArqSchema, MsgErro);
end;

  Até executar a função FSSLClass.Validar, 
  
  Result := FSSLClass.Validar(ConteudoXML, ArqSchema, MsgErro);

  O result está True, ou seja, o ArqSchema está com o Path Completo.

  A mensagem de erro:

  Erro: Falha na validação dos dados da nota: 2

  Error: the schema itself is not valid
 
  Atualizei os fontes e os schemas.

  Desde já agradeço,

  Tércio Lins.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Tércio,

Você notou que ao alterar uma linha do componente sem saber ao certo a sua finalidade outros erros surgem?

Da forma que esta hoje os fontes do componente, atende sem nenhum problema todas as UF.

Se você esta tendo problemas é preciso "debugar" para descobrir o que existe de errado.

Você se certificou que configurou o componente corretamente?

A pasta que contem os arquivos XSD (Schemas) não esta faltando nenhum?

Os Schemas são da versão 3.10?

Com certeza algo esta errado com a configuração do componente, ou você não esta usando os schemas disponíveis na pasta: ...\Exemplos\ACBrDFe\Schemas\NFe

Digo isso porque o ACBrMonitor Plus que também emite a NFC-e é compilado no Lazarus.

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

Boa noite Ítalo.

Quanto aos schemas havia atualizados e copiados para a pasta que o executável usa.

São os mesmos usados para enviar a NFe.

*****Você notou que ao alterar uma linha do componente sem saber ao certo a sua finalidade outros erros surgem?

Eu não havia alterado antes de ocorrer o erro. Na verdade eu acrescentei outra UF.

  Result := (AVersao = ve310);

  if AModelo = moNFCe then
    Result :=(not(AUFCodigo in [13]))or(not(AUFCodigo in [27])); // AM;AL
 

**** Você se certificou que configurou o componente corretamente?

Sim, mas posso conferir outras vezes.

**** A pasta que contem os arquivos XSD (Schemas) não esta faltando nenhum?

Como eu escrevi acima, quando debuguei os valores de retorno das funções estavam preenchidos.

Exemplo:

function TDFeSSL.Validar(const ConteudoXML: String; ArqSchema: String;
  out MsgErro: String): Boolean;
begin
ArqSchema está preenchido correto. 

if EstaVazio(ArqSchema) then
    raise EACBrDFeException.Create('Arquivo de Schema não especificado');

  // ArqSchema deve vir com o Path Completo
  if not FileExists(ArqSchema) then
    raise EACBrDFeException.Create('Arquivo ' + sLineBreak + ArqSchema +
      sLineBreak + 'Não encontrado');

Até aqui o retorno está True.  

O ArqSchema existe.

O erro ocorre nesta função abaixo.

Result := FSSLClass.Validar(ConteudoXML, ArqSchema, MsgErro);

end;
 

Agradeço muito à sua atenção,

Tércio Lins.

 

 

Link para o comentário
Compartilhar em outros sites

Boa noite Ítalo.

Continuando os testes.

Como a validação da assinatura é feita e o erro acontece na validação do XML, decidi não validar, ou alterar a função para não chamar a que não valida, para tentar enviar à Sefaz.

O que fiz:

comentei{ } a que estava, copiei e alterei para retornar o result True, desde que a condição verdadeira..

  result:=not EstaVazio(ArqSchema);
  if(not result)then
    raise EACBrDFeException.Create('Arquivo de Schema não especificado');

  // ArqSchema deve vir com o Path Completo
  if(result)then
    result:=FileExists(ArqSchema);
  if(not result)then
    raise EACBrDFeException.Create('Arquivo ' + sLineBreak + ArqSchema +
      sLineBreak + 'Não encontrado');

Veja que não executei a: 

Result := FSSLClass.Validar(ConteudoXML, ArqSchema, MsgErro);

 

Retorno:

<?xml version="1.0" encoding="UTF-8" ?>
- <retConsReciNFe versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe">
  <tpAmb>2</tpAmb>
  <verAplic>SVRSnfce201609291516</verAplic>
  <nRec>273065017898180</nRec>
  <cStat>104</cStat>
  <xMotivo>Lote processado</xMotivo>
  <cUF>27</cUF>
  <dhRecbto>2016-10-02T19:26:44-03:00</dhRecbto>
- <protNFe versao="3.10">
- <infProt>
  <tpAmb>2</tpAmb>
  <verAplic>SVRSnfce201609291516</verAplic>
  <chNFe>27161002556423000118650010000000011000000012</chNFe>
  <dhRecbto>2016-10-02T19:26:44-03:00</dhRecbto>
  <digVal>JB5JVzistfXNe4aflTHZ9fla+5M=</digVal>
  <cStat>394</cStat>
  <xMotivo>Rejeicao: Nota Fiscal sem a informacao do QR-Code</xMotivo>
  </infProt>
  </protNFe>
  </retConsReciNFe

O meu erro foi não setar "True" na Propriedade:

Geral.IncluirQRCodeXMLNFCe:=True;

Confesso que quando vi no início esta opção, que vem False, pensei que não fosse obrigatória. Erro meu.

Marquei como True e enviei outra vez.

<protNFe versao="3.10">
- <infProt>
  <tpAmb>2</tpAmb>
  <verAplic>SVRSnfce201609291516</verAplic>
  <chNFe>27161002556423000118650010000000011000000012</chNFe>
  <dhRecbto>2016-10-02T21:08:21-03:00</dhRecbto>
  <nProt>327160000019976</nProt>
  <digVal>tOFl0wEuQDm1ATJ8QIDBe/RBfCs=</digVal>
  <cStat>100</cStat>
  <xMotivo>Autorizado o uso da NF-e</xMotivo>
  </infProt>
 </protNFe

 Ela foi aprovada.

Vibrei!! resolvido.

Voltei o que havia alterado porém, ocorreu o mesmo erro.

Continuarei verificando mas, agora pelo menos posso fazer teste de cancelamento.

Mais uma vez agradeço,

Tércio Lins. 

 

Link para o comentário
Compartilhar em outros sites

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