FONTE NFE VB.NET
Citação::
:
Alguem tem a rotina para cancelar a Nota?
MFlavio,
os arquivos disponibilizados na página 33 e na página 39 possuem quase que na totalidade o que você precisa, inclusive com exemplos bem práticos. Dá uma olha, vê se te ajuda.
Amigo eu só achei os XML e o projeto sem as funções de cancelamento e inutilização
Citação::
:
:
Alguem tem a rotina para cancelar a Nota?
MFlavio,
os arquivos disponibilizados na página 33 e na página 39 possuem quase que na totalidade o que você precisa, inclusive com exemplos bem práticos. Dá uma olha, vê se te ajuda.
Amigo eu só achei os XML e o projeto sem as funções de cancelamento e inutilização
MFlavio,
Desculpe-me pela [ô]Gafe[ô], havia me esquecido que o projeto da página 33 não tinha a chamada da função de cancelamento, contudo vamos ao que interessa, na página 50 postei toda a classe de cancelamento, e abaixo posto a minha função que chama o cancelamento (ela está um pouco adaptada as minhas necessidades, mas creio que deva ajudar).
Public Function CancelaNFe(ByVal stpAmb As String, ByVal sVersao As String, ByVal schNFe As String, ByVal snProt As String, ByVal sxJust As String, ByVal sSerialCertificado As String) As XmlDocument
Dim oXMLCancelamento = New XmlDocument()
Dim oXMLRetorno As New XmlDocument
Dim s_cStat As String = String.Empty
Dim s_xMotivo As String = String.Empty
Dim sArqXMLHom As String = String.Empty
Dim strXML As String
Try
[ô]Selecionando o Certificado
Dim oCertificado As X509Certificate2 = CertificadoDigital.SelecionarCertificado(sSerialCertificado)
Dim wsMsg As Cancelamento2.NfeCancelamento2
Dim cab As New Cancelamento2.nfeCabecMsg
[ô]UF E VERSÃO DO CABEÇALHO
cab.cUF = S_Url.CodigoUF
cab.versaoDados = sVersao
[ô]Instanciando a Conexão com WebService
wsMsg = New Cancelamento2.NfeCancelamento2(S_Url.UrlNfeCancelamento)
[ô]Associando cabeçalho da NFe
wsMsg.nfeCabecMsgValue = cab
[ô]Definindo o Tempo Máximo de Espera pro Retorno
wsMsg.Timeout = 100000 [ô]1 minuto e 40 segundos
[ô]Associando certificado a conexão WS
wsMsg.ClientCertificates.Add(oCertificado)
[ô]Definindo protocolo usando a conexão
wsMsg.SoapVersion = SoapProtocolVersion.Soap12
[ô]Montar XML de Cancelamento
[ô]-------------------------------------------------------------------------------------------------------------------------
Dim oNFeCanc As New NFe()
oNFeCanc.versao = sVersao
oNFeCanc.Id = schNFe
oNFeCanc.nProt = snProt
oNFeCanc.xJust = sxJust
oNFeCanc.infNFE.Ide.tpAmb = stpAmb
oXMLCancelamento = oNFeCanc.GerarXMLCancelamento()
[ô]Matando Objeto NFe
oNFeCanc = Nothing
[ô]Assinando o XML de Cancelamento
oXMLCancelamento = CertificadoDigital.Assinar(oXMLCancelamento, [Ô]infCanc[Ô], oCertificado)
[ô]Validando o XML Assinado
[ô]-------------------------------------------------------------------------------------------------------------------------
Dim strResultadoValidacao As String = ValidaXML.ValidarXML(oXMLCancelamento, [Ô]cancNFe_v2.00.xsd[Ô]).Trim()
If strResultadoValidacao.Length() > 0 Then
Throw New Exception([Ô]Falha na validação do XML![Ô] & vbCrLf & strResultadoValidacao)
End If
[ô]Finalizando Geração de XML de Cancelamento
[ô]-------------------------------------------------------------------------------------------------------------------------
oXMLCancelamento.LoadXml([Ô]<?xml version=[Ô][Ô]1.0[Ô][Ô] encoding=[Ô][Ô]utf-8[Ô][Ô] ?>[Ô] & oXMLCancelamento.InnerXml)
[ô]oXMLCancelamento.InnerXml.Substring(38)
[ô]Enviando Cancelamento
[ô]-------------------------------------------------------------------------------------------------------------------------
Dim oNodeRetorno As XmlElement
oNodeRetorno = wsMsg.nfeCancelamentoNF2(oXMLCancelamento)
[ô]Identificando cStat e xMotivo
For Each oNoPrincipal In oNodeRetorno
If oNodeRetorno.Name = [Ô]retCancNFe[Ô] Then
For Each oNode As XmlNode In oNoPrincipal
If oNode.Name = [Ô]cStat[Ô] Then
s_cStat = oNode.InnerText
ElseIf oNode.Name = [Ô]xMotivo[Ô] Then
s_xMotivo = oNode.InnerText
End If
If s_cStat <> String.Empty And s_xMotivo <> String.Empty Then
Exit For
End If
Next
Exit For
End If
Next
[ô]Montar XML de Homolocação de Cancelamento de NFe
Dim oXMLHomologacao As New XmlDocument
If s_cStat = [Ô]101[Ô] Then
strXML = [Ô]<?xml version=[Ô][Ô]1.0[Ô][Ô] encoding=[Ô][Ô]utf-8[Ô][Ô] ?>[Ô]
strXML += [Ô]<procCancNFe versao=[Ô][Ô][Ô] & sVersao & [Ô][Ô][Ô] xmlns=[Ô][Ô]http://www.portalfiscal.inf.br/nfe[Ô][Ô]>[Ô]
strXML += oXMLCancelamento.InnerXml.Substring(38)
strXML += [Ô]<retCancNFe versao=[Ô][Ô][Ô] & sVersao & [Ô][Ô][Ô] xmlns=[Ô][Ô]http://www.portalfiscal.inf.br/nfe[Ô][Ô]>[Ô]
strXML += oNodeRetorno.InnerXml
strXML += [Ô]</retCancNFe>[Ô]
strXML += [Ô]</procCancNFe>[Ô]
oXMLHomologacao.LoadXml(strXML)
sArqXMLHom = My.Settings.pastaNFe & [Ô]\NFe_[Ô] & Integer.Parse(schNFe.Substring(25, 9)) & [Ô]_cancelamento.xml[Ô]
Using xmltw As New XmlTextWriter(sArqXMLHom, New UTF8Encoding(False))
oXMLHomologacao.WriteTo(xmltw)
xmltw.Close()
End Using
End If
[ô]Montar XML Final
strXML = [Ô]<?xml version=[Ô][Ô]1.0[Ô][Ô] encoding=[Ô][Ô]utf-8[Ô][Ô] ?>[Ô]
strXML += [Ô]<ret>[Ô]
strXML += [Ô]<retSolicitacao>[Ô]
strXML += [Ô]<cStat>[Ô] & s_cStat & [Ô]</cStat>[Ô]
strXML += [Ô]<xMotivo>[Ô] & s_xMotivo & [Ô]</xMotivo>[Ô]
If sArqXMLHom <> String.Empty Then
strXML += [Ô]<xArquivoXML>[Ô] & sArqXMLHom & [Ô]</xArquivoXML>[Ô]
End If
strXML += [Ô]</retSolicitacao>[Ô]
strXML += [Ô]<xmlFinal>[Ô]
strXML += oNodeRetorno.InnerXml
strXML += [Ô]</xmlFinal>[Ô]
strXML += [Ô]</ret>[Ô]
oXMLRetorno.LoadXml(strXML)
Catch ex As Exception
strXML = [Ô]<?xml version=[Ô][Ô]1.0[Ô][Ô] encoding=[Ô][Ô]utf-8[Ô][Ô]?>[Ô]
strXML += [Ô]<ret>[Ô]
strXML += [Ô]<retSolicitacao>[Ô]
strXML += [Ô]<cStat>0</cStat>[Ô]
strXML += [Ô]<xMotivo>[Ô] & ex.Message & [Ô]</xMotivo>[Ô]
strXML += [Ô]</retSolicitacao>[Ô]
strXML += [Ô]</ret>[Ô]
oXMLRetorno.LoadXml(strXML)
End Try
Return oXMLRetorno
End Function
valeu peja Ajuda
estou tendo um erro
quando tento cancelar uma NFE me retorna erro
[Ô]Rejeição: Ambiente informado diverge do Ambiente de recebimento[Ô]
eu estou informando 2 no <tpAmb>
pois a nota foi gerada em Homologação
tem alguma dica?
Essa tabela de NCM é igual a uma outra que um pessoal da Unidata me enviou, igualzinha.
código aqui:
http://www.vbmania.com.br/pages/index.php?varModulo=Forum&varMethod=abrir&varID=337965&varPagina=60
Citação::
RodriguesRM
valeu peja Ajuda
estou tendo um erro
quando tento cancelar uma NFE me retorna erro
[Ô]Rejeição: Ambiente informado diverge do Ambiente de recebimento[Ô]
eu estou informando 2 no <tpAmb>
pois a nota foi gerada em Homologação
tem alguma dica?
MFlavio,
Verifique você está consumindo os WebServices corretos, pois você não pode passar no seu XML tpAmb=2 e consumir os WebServices de Produção e o mesmo ocorre ao contrário.