No 8º episódio do Wandrey Descomplica sobre a DLL Unimake.DFe, aprendemos:
- Como gerar e enviar o XML de inutilização de números da NFe/NFCe para a SEFAZ;
- Como gerar e enviar o XML para consultar a situação da NFe/NFCe (através da chave) para a SEFAZ.
A seguir, apresento o código em WINDEV para realizar as tarefas descritas acima.
Inutilização NFe:
```
//Criar as configurações mínimas necessárias para consumir o serviço
oConfiguracao is Unimake.Business.DFe.Servicos.Configuracao()
oConfiguracao.TipoDFe = TipoDFe.NFe
oConfiguracao.CertificadoArquivo = "C:\Projetos\certificados\UnimakePV.pfx"
oConfiguracao.CertificadoSenha = "12345678"
//Criar tag inutNFe
oInutNFe is Unimake.Business.DFe.XML.NFe.InutNFe
oInutNFe.Versao = "4.00"
//Criar tag infInut
oInfInut is Unimake.Business.DFe.XML.NFe.InutNFeInfInut
oInfInut.Ano = "19"
oInfInut.CNPJ = "06117473000150"
oInfInut.CUF = UFBrasil.PR
oInfInut.Mod = ModeloDFe.NFe
oInfInut.NNFIni = 59972
oInfInut.NNFFin = 59972
oInfInut.Serie = 1
oInfInut.TpAmb = TipoAmbiente.Homologacao
oInfInut.XJust = "Justificativa da inutilizacao de teste"
oInutNFe.InfInut = oInfInut
EDT_RetornoWSString = "Versao schema: " + oInutNFe.Versao + CR
EDT_RetornoWSString += "Ano: " + oInutNFe.InfInut.Ano + CR
EDT_RetornoWSString += "CNPJ: " + oInutNFe.InfInut.CNPJ + CR + CR
WHEN EXCEPTION IN
//Consumir o serviço
oInutilizacao is Unimake.Business.DFe.Servicos.NFe.Inutilizacao()
oInutilizacao.SetXMLConfiguracao(oInutNFe, oConfiguracao)
// Gravar o XML assinado no HD
xmlAssinado is string = oInutilizacao.GetConteudoXMLAssinado()
EDT_RetornoWSString += "XML Assinado: " + CR + xmlAssinado + CR + CR
fDelete("d:\testenfe\InutilizacaoNFe.xml")
fSaveText("d:\testenfe\InutilizacaoNFe.xml", xmlAssinado)
//Enviar o XML para a SEFAZ
oInutilizacao.Executar(oInutNFe, oConfiguracao)
//Ver retorno da SEFAZ
EDT_RetornoWSString += "XML Retornado: " + CR + oInutilizacao.RetornoWSString + CR + CR
//Ver o conteúdo da tag CStat e XMotivo
oRetInutNFe is Unimake.Business.DFe.XML.NFe.RetInutNFe <- oInutilizacao.Result
EDT_RetornoWSString += "CStat: " + oRetInutNFe.InfInut.CStat + CR
EDT_RetornoWSString += "XMotivo: " + oRetInutNFe.InfInut.XMotivo + CR + CR
IF oRetInutNFe.InfInut.CStat = 102 //102 = Inutilização Homologada
//oRetEvento Is Unimake.Business.DFe.XML.NFe.RetEvento <- oRecepcaoEvento.Result.GetRetEvento(I - 1)
oInutilizacao.GravarXmlDistribuicao("tmp\testenfe") // Grava o XML de distribuição
ELSE
// Evento rejeitado
// Realizar as ações necessárias
END
DO
Info(ExceptionInfo(errFullDetails)) //Ele também pega o conteúdo da Exception do lado do C#, importante envolver o código em Try/Catch
END
```
Inutilização NFCe:
```
//Criar as configurações mínimas necessárias para consumir o serviço
oConfiguracao is Unimake.Business.DFe.Servicos.Configuracao()
oConfiguracao.TipoDFe = TipoDFe.NFCe
oConfiguracao.CertificadoArquivo = "C:\Projetos\certificados\UnimakePV.pfx"
oConfiguracao.CertificadoSenha = "12345678"
//Criar tag inutNFe
oInutNFe is Unimake.Business.DFe.XML.NFe.InutNFe
oInutNFe.Versao = "4.00"
//Criar tag infInut
oInfInut is Unimake.Business.DFe.XML.NFe.InutNFeInfInut
oInfInut.Ano = "19"
oInfInut.CNPJ = "06117473000150"
oInfInut.CUF = UFBrasil.PR
oInfInut.Mod = ModeloDFe.NFCe
oInfInut.NNFIni = 59972
oInfInut.NNFFin = 59972
oInfInut.Serie = 1
oInfInut.TpAmb = TipoAmbiente.Homologacao
oInfInut.XJust = "Justificativa da inutilizacao de teste"
oInutNFe.InfInut = oInfInut
EDT_RetornoWSString = "Versao schema: " + oInutNFe.Versao + CR
EDT_RetornoWSString += "Ano: " + oInutNFe.InfInut.Ano + CR
EDT_RetornoWSString += "CNPJ: " + oInutNFe.InfInut.CNPJ + CR + CR
WHEN EXCEPTION IN
//Consumir o serviço
oInutilizacao is Unimake.Business.DFe.Servicos.NFCe.Inutilizacao()
oInutilizacao.SetXMLConfiguracao(oInutNFe, oConfiguracao)
// Gravar o XML assinado no HD
xmlAssinado is string = oInutilizacao.GetConteudoXMLAssinado()
EDT_RetornoWSString += "XML Assinado: " + CR + xmlAssinado + CR + CR
fDelete("d:\testenfe\InutilizacaoNFCe.xml")
fSaveText("d:\testenfe\InutilizacaoNFCe.xml", xmlAssinado)
//Enviar o XML para a SEFAZ
oInutilizacao.Executar(oInutNFe, oConfiguracao)
//Ver retorno da SEFAZ
EDT_RetornoWSString += "XML Retornado: " + CR + oInutilizacao.RetornoWSString + CR + CR
//Ver o conteúdo da tag CStat e XMotivo
oRetInutNFe is Unimake.Business.DFe.XML.NFe.RetInutNFe <- oInutilizacao.Result
EDT_RetornoWSString += "CStat: " + oRetInutNFe.InfInut.CStat + CR
EDT_RetornoWSString += "XMotivo: " + oRetInutNFe.InfInut.XMotivo + CR + CR
IF oRetInutNFe.InfInut.CStat = 102 //102 = Inutilização Homologada
//oRetEvento Is Unimake.Business.DFe.XML.NFe.RetEvento <- oRecepcaoEvento.Result.GetRetEvento(I - 1)
oInutilizacao.GravarXmlDistribuicao("tmp\testenfe") // Grava o XML de distribuição
ELSE
// Evento rejeitado
// Realizar as ações necessárias
END
DO
Info(ExceptionInfo(errFullDetails)) //Ele também pega o conteúdo da Exception do lado do C#, importante envolver o código em Try/Catch
END
```
Consulta situação da NFe:
```
//Criar as configurações mínimas necessárias para consumir o serviço
oConfiguracao is Unimake.Business.DFe.Servicos.Configuracao()
oConfiguracao.TipoDFe = TipoDFe.NFe
oConfiguracao.CertificadoArquivo = "C:\Projetos\certificados\UnimakePV.pfx"
oConfiguracao.CertificadoSenha = "12345678"
//Criar tag ConsSitNFe
oConsSitNFe is Unimake.Business.DFe.XML.NFe.ConsSitNFe
oConsSitNFe.Versao = "4.00"
oConsSitNFe.TpAmb = TipoAmbiente.Homologacao
oConsSitNFe.ChNFe = "41240106117473000150550300000000121905645770"
//Resgatar algumas informações do objeto do XML
EDT_RetornoWSString = "Versao schema: " + CR + oConsSitNFe.Versao + CR + CR
EDT_RetornoWSString += "Chave NFe: " + CR + oConsSitNFe.ChNFe + CR + CR
WHEN EXCEPTION IN
//Consumir o serviço
oConsultaProtocolo is Unimake.Business.DFe.Servicos.NFe.ConsultaProtocolo()
oConsultaProtocolo.Executar(oConsSitNFe, oConfiguracao)
//Pegar a string do XML da consulta situação, o que foi enviado para a SEFAZ
EDT_RetornoWSString += "XML da consulta:" + CR
EDT_RetornoWSString += oConsultaProtocolo.GetConteudoXMLAssinado() + CR + CR
//Ver retorno da SEFAZ
EDT_RetornoWSString += "XML Retornado SEFAZ: " + CR + oConsultaProtocolo.RetornoWSString + CR + CR
IF oConsultaProtocolo.Result.CStat = 100 //100 = NFe autorizada
EDT_RetornoWSString += "CStat: " + CR + oConsultaProtocolo.Result.CStat + CR + CR
EDT_RetornoWSString += "XMotivo: " + CR + oConsultaProtocolo.Result.XMotivo + CR + CR
ELSE
EDT_RetornoWSString += "CStat: " + CR + oConsultaProtocolo.Result.CStat + CR + CR
EDT_RetornoWSString += "XMotivo: " + CR + oConsultaProtocolo.Result.XMotivo + CR + CR
END
DO
Info(ExceptionInfo(errFullDetails)) //Ele também pega o conteúdo da Exception do lado do C#, importante envolver o código em Try/Catch
END
```
Consulta situação da NFCe:
```
//Criar as configurações mínimas necessárias para consumir o serviço
oConfiguracao is Unimake.Business.DFe.Servicos.Configuracao()
oConfiguracao.TipoDFe = TipoDFe.NFCe
oConfiguracao.CertificadoArquivo = "C:\Projetos\certificados\UnimakePV.pfx"
oConfiguracao.CertificadoSenha = "12345678"
//Criar tag ConsSitNFe
oConsSitNFe is Unimake.Business.DFe.XML.NFe.ConsSitNFe
oConsSitNFe.Versao = "4.00"
oConsSitNFe.TpAmb = TipoAmbiente.Homologacao
oConsSitNFe.ChNFe = "41240106117473000150550300000000121905645770"
//Resgatar algumas informações do objeto do XML
EDT_RetornoWSString = "Versao schema: " + CR + oConsSitNFe.Versao + CR + CR
EDT_RetornoWSString += "Chave NFe: " + CR + oConsSitNFe.ChNFe + CR + CR
WHEN EXCEPTION IN
//Consumir o serviço
oConsultaProtocolo is Unimake.Business.DFe.Servicos.NFCe.ConsultaProtocolo()
oConsultaProtocolo.Executar(oConsSitNFe, oConfiguracao)
//Pegar a string do XML da consulta situação, o que foi enviado para a SEFAZ
EDT_RetornoWSString += "XML da consulta:" + CR
EDT_RetornoWSString += oConsultaProtocolo.GetConteudoXMLAssinado() + CR + CR
//Ver retorno da SEFAZ
EDT_RetornoWSString += "XML Retornado SEFAZ: " + CR + oConsultaProtocolo.RetornoWSString + CR + CR
IF oConsultaProtocolo.Result.CStat = 100 //100 = NFe autorizada
EDT_RetornoWSString += "CStat: " + CR + oConsultaProtocolo.Result.CStat + CR + CR
EDT_RetornoWSString += "XMotivo: " + CR + oConsultaProtocolo.Result.XMotivo + CR + CR
ELSE
EDT_RetornoWSString += "CStat: " + CR + oConsultaProtocolo.Result.CStat + CR + CR
EDT_RetornoWSString += "XMotivo: " + CR + oConsultaProtocolo.Result.XMotivo + CR + CR
END
DO
Info(ExceptionInfo(errFullDetails)) //Ele também pega o conteúdo da Exception do lado do C#, importante envolver o código em Try/Catch
END
```
Para uma explicação mais detalhada do conteúdo deste post, confira o vídeo no seguinte link:
https://www.youtube.com/watch?v=g4KJYDINW-0