Closed AlanJovita closed 6 years ago
Não foi autorizada, tente hoje novamente para verse foi autorizada. As vezes a sefaz demora a autorizar, mas não e o caso de SP geralmente eles são rápido.
Boa tarde @robertorp
O procedimento de envio da nota estou utilizando o projeto de teste adaptado para minha aplicação conforme código abaixo. Gostaria de saber o exato momento dentro dessa rotina que faz a autorização da NFe e se estou fazendo da forma correta, pois estou batendo cabeça aqui e talvez esteja chamando as funções em ordem errada.
1º passo (Gero a NFe conforme aplicativo de teste, Assino e faço envio)
_nfe.Assina() Dim servicoNFe = New ServicosNFe(_configuracoes.CfgServico) 'Envia a mensagem compactada para a SEFAZ Dim retornoEnvio = servicoNFe.NFeAutorizacao(Convert.ToInt32(lote), IndicadorSincronizacao.Assincrono, New List(Of NFe.Classes.NFe)() From {_nfe}, False)
2º feito o envio recebo a mensagem abaixo
<retEnviNFe versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>1</tpAmb><verAplic>SP_NFE_PL_008i2</verAplic><cStat>103</cStat><xMotivo>Lote recebido com sucesso</xMotivo><cUF>35</cUF><dhRecbto>2018-01-24T11:34:44-02:00</dhRecbto><infRec><nRec>351004535316959</nRec><tMed>1</tMed></infRec></retEnviNFe>
3º localizo o XML gerado para gravar o protocolo utilizando a função abaixo
`Private Sub BtnAdicionaNfeproc_Click(sender As Object, e As RoutedEventArgs) Try Dim arquivoXml = Funcoes.BuscarArquivoXml()
If String.IsNullOrWhiteSpace(arquivoXml) Then
Return
End If
Dim nfe = New NFe.Classes.NFe()
nfe.CarregarDeArquivoXml(arquivoXml)
Dim chave = nfe.infNFe.Id.Substring(3)
If String.IsNullOrEmpty(chave) Then
Throw New Exception("A Chave da NFe não foi encontrada no arquivo!")
End If
If chave.Length <> 44 Then
Throw New Exception("Chave deve conter 44 caracteres!")
End If
Dim servicoNFe = New ServicosNFe(_configuracoes.CfgServico)
Dim retornoConsulta = servicoNFe.NfeConsultaProtocolo(chave)
TrataRetorno(retornoConsulta)
Dim nfeproc = New nfeProc() With {
.NFe = nfe,
.protNFe = retornoConsulta.Retorno.protNFe,
.versao = retornoConsulta.Retorno.versao
}
If nfeproc.protNFe IsNot Nothing Then
Dim novoArquivo = Path.GetDirectoryName(arquivoXml) + "\" + nfeproc.protNFe.infProt.chNFe + "-procNfe.xml"
FuncoesXml.ClasseParaArquivoXml(nfeproc, novoArquivo)
Funcoes.Mensagem("Arquivo salvo em " + novoArquivo, "Atenção", MessageBoxButton.OK)
End If
Catch ex As ComunicacaoException
Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK)
Catch ex As ValidacaoSchemaException
Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK)
Catch ex As Exception
If Not String.IsNullOrEmpty(ex.Message) Then
Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK)
End If
End Try
End Sub`
Neste momento que tenho o retorno da SEFAZ de Rejeição por inexistência.
Desde já grato pela ajuda!
Em lugar nem um você esta autorizando a nota nesse código ai.
Dim servicoNFe = New ServicosNFe(_configuracoes.CfgServico) Dim retornoConsulta = servicoNFe.NfeConsultaProtocolo(chave)
veja que você faz uma consulta protocolo pela chave mas a mesma nem se quer foi autorizada ainda. O método para autorizar a nota e servicoNFe.NFeAutorizacao
Enfim recomendo que você estude melhor o appTeste.
edit: No código que me mandou não tem autorização hehe. na explicação sim
edit2: após o recebimento do recibo, tente fazer uma consulta Recibo e passa o recibo no lugar do consulta protocolo, veja oque retorna se deu certo se deu algum erro no lote, bom enfim..
@robertorp Obrigado pelo retorno,
O meu código está sim fazendo a autorização na linha
Dim retornoEnvio = servicoNFe.NFeAutorizacao(Convert.ToInt32(lote), IndicadorSincronizacao.Assincrono, New List(Of NFe.Classes.NFe)() From {_nfe}, False)
acontece que ele ficou junto na mesma linha hehe
o meu treinamento e duvida está acontecendo tanto no AppTeste quanto na minha aplicação! nos dois tenho o mesmo problema.
o retorno sempre é de "lote enviado com sucesso".
Achei que era somente o ultimo trecho de código mas pelo visto tem mais so que não esta ele completo lá. Mande o código completo de autorização, incluindo a linha que autoriza a nf-e.
nessa imagem não tem seu código que autoriza que quis dizer
@robertorp òtimo amigo, vou te enviar abaixo o código que estou seguindo para realizar esta autorização NFe. Lembrando que o código é uma conversão em VB.NET do AppTeste exatamente o mesmo.
Após carregar as configurações do certificado e webservice da receita eu chamo esse procedimento que cria uma NFe e Envia (igual ao AppTeste).
` Public Sub EmitirNFe()
Try
Dim numero = InputBox("Criar e Enviar NFe", "Número da Nota:")
If String.IsNullOrEmpty(numero) Then
Throw New Exception("O Número deve ser informado!")
End If
Dim lote = InputBox("Criar e Enviar NFe", "Id do Lote:")
If String.IsNullOrEmpty(lote) Then
Throw New Exception("A Id do lote deve ser informada!")
End If
_nfe = GetNf(Convert.ToInt32(numero), _configuracoes.CfgServico.ModeloDocumento, _configuracoes.CfgServico.VersaoNFeAutorizacao)
_nfe.Assina()
'não precisa validar aqui, pois o lote será validado em ServicosNFe.NFeAutorizacao
If _nfe.infNFe.ide.[mod] = ModeloDocumento.NFCe Then
'A URL do QR-Code deve ser gerada em um objeto nfe já assinado, pois na URL vai o DigestValue que é gerado por ocasião da assinatura
'Define a URL do QR-Code.
_nfe.infNFeSupl = New infNFeSupl() With {
.qrCode = _nfe.infNFeSupl.ObterUrlQrCode(_nfe, _configuracoes.ConfiguracaoCsc.CIdToken, _configuracoes.ConfiguracaoCsc.Csc)
}
End If
Dim servicoNFe = New ServicosNFe(_configuracoes.CfgServico)
'Envia a mensagem compactada para a SEFAZ
Dim retornoEnvio = servicoNFe.NFeAutorizacao(Convert.ToInt32(lote), IndicadorSincronizacao.Assincrono, New List(Of NFe.Classes.NFe)() From {_nfe}, False)
'Para consumir o serviço de forma síncrona, use a linha abaixo:
'var retornoEnvio = servicoNFe.NFeAutorizacao(Convert.ToInt32(lote), IndicadorSincronizacao.Sincrono, new List<Classes.NFe> { _nfe }, true/*Envia a mensagem compactada para a SEFAZ*/);
TrataRetorno(retornoEnvio)
Catch ex As ComunicacaoException
'Faça o tratamento de contingência OffLine aqui.
Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK)
Catch ex As ValidacaoSchemaException
Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK)
Catch ex As Exception
If Not String.IsNullOrEmpty(ex.Message) Then
Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK)
End If
End Try
End Sub`
Depois de feito a rotina na pasta de saida tenho dois arquivos XML, um com o XML propriamente dito sem o protocolo e o outro com os dados de retorno do envio de lote.
Retorno XML lote.
<retEnviNFe versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>1</tpAmb><verAplic>SP_NFE_PL_008i2</verAplic><cStat>103</cStat><xMotivo>Lote recebido com sucesso</xMotivo><cUF>35</cUF><dhRecbto>2018-01-24T11:52:15-02:00</dhRecbto><infRec><nRec>351004535373904</nRec><tMed>1</tMed></infRec></retEnviNFe>
Até aqui tudo bem, no meu pensamento o que devo fazer agora é protocolar o arquivo XML gerado para se ter realmente uma NFe válida! então eu chamo o seguinte procedimento para realizar tal tarefa.
` Private Sub BtnAdicionaNfeproc_Click(sender As Object, e As RoutedEventArgs) Try Dim arquivoXml = Funcoes.BuscarArquivoXml()
If String.IsNullOrWhiteSpace(arquivoXml) Then
Return
End If
Dim nfe = New NFe.Classes.NFe()
nfe.CarregarDeArquivoXml(arquivoXml)
Dim chave = nfe.infNFe.Id.Substring(3)
If String.IsNullOrEmpty(chave) Then
Throw New Exception("A Chave da NFe não foi encontrada no arquivo!")
End If
If chave.Length <> 44 Then
Throw New Exception("Chave deve conter 44 caracteres!")
End If
Dim servicoNFe = New ServicosNFe(_configuracoes.CfgServico)
Dim retornoConsulta = servicoNFe.NfeConsultaProtocolo(chave)
TrataRetorno(retornoConsulta)
Dim nfeproc = New nfeProc() With {
.NFe = nfe,
.protNFe = retornoConsulta.Retorno.protNFe,
.versao = retornoConsulta.Retorno.versao
}
If nfeproc.protNFe IsNot Nothing Then
Dim novoArquivo = Path.GetDirectoryName(arquivoXml) + "\" + nfeproc.protNFe.infProt.chNFe + "-procNfe.xml"
FuncoesXml.ClasseParaArquivoXml(nfeproc, novoArquivo)
Funcoes.Mensagem("Arquivo salvo em " + novoArquivo, "Atenção", MessageBoxButton.OK)
End If
Catch ex As ComunicacaoException
Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK)
Catch ex As ValidacaoSchemaException
Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK)
Catch ex As Exception
If Not String.IsNullOrEmpty(ex.Message) Then
Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK)
End If
End Try
End Sub`
Pelo que analisei, esse ultimo passo deixa o XML já válido e protocolado, porem o retorno é de Rejeição.
Toda vez que você fizer uma consulta protocolo e a chave que você enviou para a consulta protocolo não existir na base de dados da Sefaz, sempre vai a ver a rejeição que você mandou.
Logo então o ideal para você saber se a Nota Fiscal Eletrônica realmente foi autorizada você deve fazer uma consulta recibo pegando a seguinte informação o conteúdo da tag <nRec>351004535373904</nRec>
e executar o método
var servicoNFe = new ServicosNFe(_configuracoes.CfgServico); var retornoRecibo = servicoNFe.NFeRetAutorizacao("351004535373904");
somente assim iremos saber o real motivo da rejeição.
Ou.. você pode executar o método de autorização como Sincrono
Dim retornoEnvio = servicoNFe.NFeAutorizacao(Convert.ToInt32(lote), IndicadorSincronizacao.Sincrono, New List(Of NFe.Classes.NFe)() From {_nfe}, False)
Veja o segundo parametro esta sincrono.. assim você não precisa consultar o Lote pelo recibo e fica sabendo na hora se ta autorizada ou rejeitada. Mas se utilizar Sincrono so pode enviar uma unica nota por vez.
edit/importante: lote processado não quer dizer que a nota foi autorizada
@robertorp Matou a charada, agora consegui ver o erro que estava acontecendo, e um erro bem bobo por sinal hehe
<retConsReciNFe versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>1</tpAmb><verAplic>SP_NFE_PL_008i2</verAplic><nRec>351004535373904</nRec><cStat>104</cStat><xMotivo>Lote processado</xMotivo><cUF>35</cUF><protNFe versao="3.10"><infProt><tpAmb>1</tpAmb><verAplic>SP_NFE_PL_008i2</verAplic><chNFe>35180108299041000132550010000001631000012342</chNFe><dhRecbto>2018-01-24T11:52:15-02:00</dhRecbto><cStat>275</cStat><xMotivo>Rejeição: Código Município do Destinatário: difere da UF do Destinatário</xMotivo></infProt></protNFe></retConsReciNFe>
Muito obrigado pela ajuda, foi fundamental para eu ganhar o dia de serviço!
só aproveitando, esse componente trabalha com a versão 3.10, vcs tem planos para a 4.0 em andamento?
Abraço
Planos para a versão 4.0 e que vai sair. E sim o componente suportara a versão 4.0
Qualquer duvida crie a issue ai. Se quiser também podemos trocar ideias as vezes pelo skype. robertoalves18@hotmail.com
Boa tarde Pessoal, tudo certo ?
estou desenvolvendo a parte de NFe de meu sistema e o projeto disponibilizado esta me ajudando muito, porem ainda tenho algumas duvidas, acredito que de fácil solução.
Antes tinha um material disponível para os primeiros passos e a rotina certa para emissão, não o encontro mais nas issues acredito que ficaram na outra conta.
Um outro problema seria na Assinatura da possível emissão da NFe, eu faço a emissão ele retorna o lote enviado com sucesso. porem quando vou adicionar o PROC ao XML tenho o seguinte retorno abaixo.
<retConsSitNFe versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>1</tpAmb><verAplic>SP_NFE_PL_008i2</verAplic><cStat>217</cStat><xMotivo>Rejeição: NF-e não consta na base de dados da SEFAZ</xMotivo><cUF>35</cUF><chNFe>35180108299041000132550010000001631000012342</chNFe></retConsSitNFe>
consultei os tipos de ambientes e tanto de envio quanto consulta e estão como "Produção" não encontro onde estou errando. a disponibilização do antigo material de procedimentos será de grande ajuda.
Desde já, obrigado a todos!