DFe.NET icon indicating copy to clipboard operation
DFe.NET copied to clipboard

Erro Emissão NFe UF: MG

Open claytonduran opened this issue 3 years ago • 16 comments

Boa tarde pessoal estou com erro ao emitir NFe para estado de MG em Homologacao utilizando como Assincrono e até mesmo como Sincrono, me retorna o nro de recibo e ao executar a consulta (servicoNFe.NFeRetAutorizacao(nroRecibo)) utilizando nro de recibo retorna o erro abaixo:

System.NullReferenceException HResult=0x80004003 Message=Object reference not set to an instance of an object. Source=NFe.Wsdl.Standard StackTrace: em NFe.Wsdl.Autorizacao.NfeRetAutorizacao4.Execute(XmlNode nfeDadosMsg) em NFe.Servicos.ServicosNFe.NFeRetAutorizacao(String recibo) em SistemaWebAssinaturaXML.IndexWindow.CriarNota(NotaFiscalE transmNF, Int32 tpAmb) em C:\Programacao\DotNet\SistemaWebAssinaturaXML\SistemaWebAssinaturaXML\IndexWindow.xaml.cs:linha 666

Alguém já passo por isso?

Obrigado

claytonduran avatar Jul 21 '22 19:07 claytonduran

Estou com o mesmo problema, até agora não consegui uma solução.

BrunoSistema avatar Aug 02 '22 10:08 BrunoSistema

Qual versão do nuget vc está utilizando e qual a versão do .net ?

danilobreda avatar Aug 10 '22 18:08 danilobreda

Estou usando versão 1.0.1.1159 Zeus.Net.NFe.NFCe e .NET 6.0 .

claytonduran avatar Aug 11 '22 11:08 claytonduran

@claytonduran tem a versão mais nova lançada para .net 6, acredito que você poderia utilizar e vai resolver o problema. Recomendo a utilização do Nuget para sempre atualizar de uma maneira mais tranquila.

danilobreda avatar Aug 11 '22 16:08 danilobreda

O problema ocorre na última versão também, na implementação para .NET Standard, 5 e 6. Investigando, descobri o seguinte, alguns estados a tag de resultado (nfeResultMsg) possui namespace. Ex:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Body><ns2:nfeResultMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NFeAutorizacao4" xmlns:ns2="http://www.portalfiscal.inf.br/nfe/wsdl/NFeRetAutorizacao4"><retConsReciNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="4.00">
  <tpAmb>1</tpAmb>
  <verAplic>14.4.72-SE6</verAplic>
  <nRec>310010005564676</nRec>
  <cStat>104</cStat>
  <xMotivo>Lote processado</xMotivo>
  <cUF>31</cUF>
  <dhRecbto>2022-08-12T10:56:47-03:00</dhRecbto>
  <protNFe versao="4.00">
    <infProt>
      <tpAmb>1</tpAmb>
      <verAplic>14.4.72-ZB1</verAplic>
      <chNFe>31220846853987000198550010000000611673664510</chNFe>
      <dhRecbto>2022-08-08T18:31:04-03:00</dhRecbto>
      <digVal>ALkMVIeiqSSlN4sYOwVptBC8/QU=</digVal>
      <cStat>230</cStat>
      <xMotivo>Rejeicao: IE do emitente nao cadastrada</xMotivo>
    </infProt>
  </protNFe>
</retConsReciNFe></**ns2:nfeResultMsg**></soap:Body></soap:Envelope>

A classe que trata o retorno, chama o método GetElementsByTagName, porém esse método só busca no namespace default. Para que ele encontre em todos namespaces do XML, é necessário adicionar um segundo parâmetro, com o caractere coringa "*".

  public static XmlNode Execute<TCommonSoapEnvelope>(TCommonSoapEnvelope soapEnvelope,
            WsdlConfiguracao configuration, string actionUrn, string responseElementName) where TCommonSoapEnvelope : CommonSoapEnvelope
        {
            SoapUtils soapUtils = new SoapUtils();
            XmlDocument xmlResult = new XmlDocument();

            var xmlEnvelop = soapUtils.SerealizeDocument(soapEnvelope);

            string tes = soapUtils.SendRequest(xmlEnvelop, configuration.CertificadoDigital, configuration.Url, configuration.TimeOut, actionUrn: actionUrn);
            xmlResult.LoadXml(tes);

            return xmlResult.GetElementsByTagName(responseElementName, "*")[0];
        }

Minha sugestão também é trocar esse método, que percorre todo o XML pelo método SelectSingleNode, conforme recomendação da MS. image

danilosingh avatar Aug 12 '22 14:08 danilosingh

Fiz o PR #1366 com a correção do problema.

danilosingh avatar Aug 12 '22 14:08 danilosingh

image Esse Asteriscos colocou ele intencional ? Estou fazendo uns testes tentando simular o erro mas não estou conseguindo , esse retorno é o que vc conseguiu da sefaz o original ?

robertorp avatar Aug 16 '22 17:08 robertorp

Era pra deixar negrito, só pra destacar a tag, mas resolvi colocar dentro do bloco de código para o XML ficar mais organizado, aí não removi. Desconsidere esse asterisco.

Esse é o retorno da SEFAZ MG. Outros estados que testei funcionam.

danilosingh avatar Aug 16 '22 17:08 danilosingh

Entendi , aqui fiz vários testes , inclusive no .net 6 , em todos testes meus funcionou perfeitamente tanto o antigo quanto o novo , fiz apenas uma simulação , você consegue fazer um teste de console para min estar testando ? Algo simples mesmo

// See https://aka.ms/new-console-template for more information

using System;
using System.Xml;

public class Program
{
    public static void Main()
    {
        var customerXml = @"<soap:Envelope xmlns:soap=""http://www.w3.org/2003/05/soap-envelope""><soap:Body><ns2:nfeResultMsg xmlns=""http://www.portalfiscal.inf.br/nfe/wsdl/NFeAutorizacao4"" xmlns:ns2=""http://www.portalfiscal.inf.br/nfe/wsdl/NFeRetAutorizacao4""><retConsReciNFe xmlns=""http://www.portalfiscal.inf.br/nfe"" versao=""4.00"">
  <tpAmb>1</tpAmb>
  <verAplic>14.4.72-SE6</verAplic>
  <nRec>310010005564676</nRec>
  <cStat>104</cStat>
  <xMotivo>Lote processado</xMotivo>
  <cUF>31</cUF>
  <dhRecbto>2022-08-12T10:56:47-03:00</dhRecbto>
  <protNFe versao=""4.00"">
    <infProt>
      <tpAmb>1</tpAmb>
      <verAplic>14.4.72-ZB1</verAplic>
      <chNFe>31220846853987000198550010000000611673664510</chNFe>
      <dhRecbto>2022-08-08T18:31:04-03:00</dhRecbto>
      <digVal>ALkMVIeiqSSlN4sYOwVptBC8/QU=</digVal>
      <cStat>230</cStat>
      <xMotivo>Rejeicao: IE do emitente nao cadastrada</xMotivo>
    </infProt>
  </protNFe>
</retConsReciNFe></ns2:nfeResultMsg></soap:Body></soap:Envelope>";

        XmlDocument document = new XmlDocument();
        document.LoadXml(customerXml);

        XmlNode customerNode = document.SelectSingleNode("//*[local-name()='nfeResultMsg']"); 
        Console.WriteLine(customerNode.OuterXml);
    }
}

Estilo esse aí , mas queria ver o erro na pratica , vou tentar na minha aplicação de produção também aqui , provavelmente ela deve rejeitar mas retornar o erro da sefaz de MG

robertorp avatar Aug 16 '22 17:08 robertorp

O erro ocorre com o código anterior. Esse método SelectSingleNode foi o que eu alterei para corrigir o problema Atualmente está sendo usado o método GetElementsByTagName, esse método retorna uma lista de tags filhas, porém ele não pesquisa em todos os namespaces. Para que ele pesquise em todos, seria necessário passar outro parâmetro, conforme mencionei no comentário anterior: return xmlResult.GetElementsByTagName(responseElementName, "*")[0]; O segundo parâmetro com o caracter "*" indica para pesquisar tags de qualquer namespace.

Porém como eu já ia alterar, resolvi trocar o GetElementsByTagName, por SelectSingleNode, uma vez que eu só precisamos que retorne um nó do XML, eliminando a necessidade de percorrer todas as tags do XML para retornar apenas uma.

danilosingh avatar Aug 16 '22 17:08 danilosingh

Exatamente , deixei com o Single no exemplo mas fiz testes com o antigo deu certo também , o que quero é conseguir simular o erro que deu , até porque o estranho é eu ter clientes em MG é ninguém reclamar para meu suporte, consultei o mesmo aqui é o que consegui de resposta do suporte foi que ta com um problema em MG mas é em relação a rejeição de MDF-e. Não vejo problemas em aceitar o pull mas desejo simular o erro, pois achei estranho eu ter clientes também em MG. Se poder me ajudar a simular o erro seria de grande ajuda

robertorp avatar Aug 16 '22 17:08 robertorp

De qualquer maneira o resultado não muda , estou vendo com o @marcosgerene @danilobreda para aceitar o pull , qualquer coisa nos desfaz rapido , mas em meus testes nada mudou , nada.

robertorp avatar Aug 16 '22 18:08 robertorp

Seu .Net Framework é qual ? ou é Core ? Qual a versão ? (talvez quem sabe isso não altera o resultado)

@BrunoSistema tem alguma noticia para nós ?

robertorp avatar Aug 16 '22 18:08 robertorp

Peguei o seu exemplo e troquei pela função anterior. Ocorre o erro.

image

.NET 3.1 e 6, ambos quebram.

danilosingh avatar Aug 16 '22 18:08 danilosingh

@danilosingh Aprovamos o pullrequest, acabou de sair o NUGET https://www.nuget.org/profiles/ZeusNfeNfce v2022.08.16.1818 Verifica pra gente se ta tudo certo :)

danilobreda avatar Aug 16 '22 18:08 danilobreda

Peguei o seu exemplo e troquei pela função anterior. Ocorre o erro.

image

.NET 3.1 e 6, ambos quebram.

Agora consegui entender top , vlw pela ajuda é pela paciência em me explicar ;) Obrigado !

robertorp avatar Aug 16 '22 22:08 robertorp

@robertorp e @danilosingh deu tudo certo?

danilobreda avatar Oct 26 '22 17:10 danilobreda

Acabei não vendo a última interação. Deu tudo certo sim, pode fechar a issue.

danilosingh avatar Feb 03 '23 17:02 danilosingh