Jump to content

dev botao

XML da NFCe não validado com Lazarus


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

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