PC SOFT
ONLINE REPOSITORY
FOR WINDEVWEBDEV AND WINDEV MOBILE

Home |  | Sign in | English US
[DLL Unimake.DFe] Como gerar o XML de evento de cancelamento e CCe da NFe/NFCe e enviar p/ SEFAZ c/a DLL Unimake.DFe no WINDEV
Published by Wandrey
in the category Various
New features



Description
No 6º episódio do Wandrey Descomplica sobre a DLL Unimake.DFe, aprendemos:

- Como gerar o XML do evento de cancelamento da NFe/NFCe e enviar para a SEFAZ;
- Como gerar o XML de evento de CCe da NFe/NFCe e enviar para a SEFAZ.

A seguir, apresento o código em WINDEV para realizar as tarefas descritas acima.

Envio do XML de evento de cancelamento 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 EnvEvento
oEnvEvento is Unimake.Business.DFe.XML.NFe.EnvEvento
oEnvEvento.Versao = "1.00"
oEnvEvento.IdLote = "000000000000001"

//-------------------------------------------------
//Criar tags do evento sequencia 1
//-------------------------------------------------
//Criar tag Evento
oEvento is Unimake.Business.DFe.XML.NFe.Evento
oEvento.Versao = "1.00"

//Criar tag DetEventoCanc
oDetEventoCanc is Unimake.Business.DFe.XML.NFe.DetEventoCanc
oDetEventoCanc.Versao = "1.00"
oDetEventoCanc.NProt = "141190000660363"
oDetEventoCanc.XJust = "Justificativa para cancelamento da NFe de teste"

//Criar tag InfEvento
oInfEvento is Unimake.Business.DFe.XML.NFe.InfEvento

//Adicionar a tag DetEventoCanc dentro da Tag DetEvento
oInfEvento.DetEvento = oDetEventoCanc

//Atualizar propriedades da oInfEvento
//IMPORTANTE: Atualização da propriedade TpEvento deve acontecer depois que o DetEvento recebeu o oDetEventoCanc para que funcione sem erro
oInfEvento.COrgao = UFBrasil.PR
oInfEvento.ChNFe = "41191006117473000150550010000579281779843610"
oInfEvento.CNPJ = "06117473000150"
oInfEvento.DhEvento = SysDateTime()
oInfEvento.TpEvento = 110111 //TipoEventoNFe.Cancelamento
oInfEvento.NSeqEvento = 1
oInfEvento.VerEvento = "1.00"
oInfEvento.TpAmb = 2 //TipoAmbiente.Homologacao

//Adicionar a tag InfEvento dentro da tag Evento
oEvento.InfEvento = oInfEvento

//Adicionar a tag Evento dentro da tag EnvEvento
oEnvEvento.AddEvento(oEvento)

EDT_RetornoWSString = "Versao schema: " + oEnvEvento.Versao + CR
EDT_RetornoWSString += "LOTE: " + oEnvEvento.IdLote + CR
EDT_RetornoWSString += "Qtde eventos: " + oEnvEvento.GetEventoCount + CR + CR

WHEN EXCEPTION IN
//Consumir o serviço
oRecepcaoEvento is Unimake.Business.DFe.Servicos.NFe.RecepcaoEvento
oRecepcaoEvento.Executar(oEnvEvento, oConfiguracao)

eventoAssinado is string = oRecepcaoEvento.GetConteudoXMLAssinado()
EDT_RetornoWSString += "XML Assinado: " + CR + eventoAssinado + CR + CR

// Gravar o XML assinado no HD
fDelete("d:\testenfe\CancelamentoNFe.xml")
fSaveText("d:\testenfe\CancelamentoNFe.xml", eventoAssinado)

//Ver retorno da SEFAZ
EDT_RetornoWSString += "XML Retornado: " + CR + oRecepcaoEvento.RetornoWSString + CR + CR

//Ver o conteúdo da tag CStat e XMotivo
EDT_RetornoWSString += "CStat do Lote Retornado: " + oRecepcaoEvento.Result.CStat + CR
EDT_RetornoWSString += "XMotivo: " + oRecepcaoEvento.Result.XMotivo + CR + CR

IF oRecepcaoEvento.Result.CStat = 128 //128 = Lote de evento processado com sucesso.
//Como pode existir vários eventos no XML (Caso da carta de correção que posso enviar várias sequencias de evento)
//é necessário fazer um loop para ver a autorização de cada um deles
FOR I = 1 TO oRecepcaoEvento.Result.GetRetEventoCount
oRetEvento is Unimake.Business.DFe.XML.NFe.RetEvento <- oRecepcaoEvento.Result.GetRetEvento(I - 1)

EDT_RetornoWSString += "CStat do evento " + I + ": " + oRetEvento.InfEvento.CStat + CR
EDT_RetornoWSString += "XMotivo: " + oRetEvento.InfEvento.XMotivo

SWITCH oRetEvento.InfEvento.CStat
CASE 135 // Evento homologado com vinculação da respectiva NFe
CASE 136 // Evento homologado sem vinculação com À respectiva NFe (SEFAZ não encontrou À NFe na base dela)
CASE 155 // Evento de Cancelamento homologado fora DO prazo permitido para cancelamento
// Grava o XML de distribuição
oRecepcaoEvento.GravarXmlDistribuicao("tmp\testenfe") // Grava o XML de distribuição

OTHER CASE
// Evento rejeitado
// Realizar as ações necessárias
END
END
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
```

Envio do XML de evento de cancelamento 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 EnvEvento
oEnvEvento is Unimake.Business.DFe.XML.NFe.EnvEvento
oEnvEvento.Versao = "1.00"
oEnvEvento.IdLote = "000000000000001"

//-------------------------------------------------
//Criar tags do evento sequencia 1
//-------------------------------------------------
//Criar tag Evento
oEvento is Unimake.Business.DFe.XML.NFe.Evento
oEvento.Versao = "1.00"

//Criar tag DetEventoCanc
oDetEventoCanc is Unimake.Business.DFe.XML.NFe.DetEventoCanc
oDetEventoCanc.Versao = "1.00"
oDetEventoCanc.NProt = "141190000660363"
oDetEventoCanc.XJust = "Justificativa para cancelamento da NFe de teste"

//Criar tag InfEvento
oInfEvento is Unimake.Business.DFe.XML.NFe.InfEvento

//Adicionar a tag DetEventoCanc dentro da Tag DetEvento
oInfEvento.DetEvento = oDetEventoCanc

//Atualizar propriedades da oInfEvento
//IMPORTANTE: Atualização da propriedade TpEvento deve acontecer depois que o DetEvento recebeu o oDetEventoCanc para que funcione sem erro
oInfEvento.COrgao = UFBrasil.PR
oInfEvento.ChNFe = "41191006117473000150550010000579281779843610"
oInfEvento.CNPJ = "06117473000150"
oInfEvento.DhEvento = SysDateTime()
oInfEvento.TpEvento = 110111 //TipoEventoNFe.Cancelamento
oInfEvento.NSeqEvento = 1
oInfEvento.VerEvento = "1.00"
oInfEvento.TpAmb = 2 //TipoAmbiente.Homologacao

//Adicionar a tag InfEvento dentro da tag Evento
oEvento.InfEvento = oInfEvento

//Adicionar a tag Evento dentro da tag EnvEvento
oEnvEvento.AddEvento(oEvento)

EDT_RetornoWSString = "Versao schema: " + oEnvEvento.Versao + CR
EDT_RetornoWSString += "LOTE: " + oEnvEvento.IdLote + CR
EDT_RetornoWSString += "Qtde eventos: " + oEnvEvento.GetEventoCount + CR + CR

WHEN EXCEPTION IN
//Consumir o serviço
oRecepcaoEvento is Unimake.Business.DFe.Servicos.NFCe.RecepcaoEvento //###
oRecepcaoEvento.Executar(oEnvEvento, oConfiguracao)

eventoAssinado is string = oRecepcaoEvento.GetConteudoXMLAssinado()
EDT_RetornoWSString += "XML Assinado: " + CR + eventoAssinado + CR + CR

// Gravar o XML assinado no HD
fDelete("d:\testenfe\CancelamentoNFCe.xml") //###
fSaveText("d:\testenfe\CancelamentoNFCe.xml", eventoAssinado) //###

//Ver retorno da SEFAZ
EDT_RetornoWSString += "XML Retornado: " + CR + oRecepcaoEvento.RetornoWSString + CR + CR

//Ver o conteúdo da tag CStat e XMotivo
EDT_RetornoWSString += "CStat do Lote Retornado: " + oRecepcaoEvento.Result.CStat + CR
EDT_RetornoWSString += "XMotivo: " + oRecepcaoEvento.Result.XMotivo + CR + CR

IF oRecepcaoEvento.Result.CStat = 128 //128 = Lote de evento processado com sucesso.
//Como pode existir vários eventos no XML (Caso da carta de correção que posso enviar várias sequencias de evento)
//é necessário fazer um loop para ver a autorização de cada um deles
FOR I = 1 TO oRecepcaoEvento.Result.GetRetEventoCount
oRetEvento is Unimake.Business.DFe.XML.NFe.RetEvento <- oRecepcaoEvento.Result.GetRetEvento(I - 1)

EDT_RetornoWSString += "CStat do evento " + I + ": " + oRetEvento.InfEvento.CStat + CR
EDT_RetornoWSString += "XMotivo: " + oRetEvento.InfEvento.XMotivo

SWITCH oRetEvento.InfEvento.CStat
CASE 135 // Evento homologado com vinculação da respectiva NFe
CASE 136 // Evento homologado sem vinculação com À respectiva NFe (SEFAZ não encontrou À NFe na base dela)
CASE 155 // Evento de Cancelamento homologado fora DO prazo permitido para cancelamento
// Grava o XML de distribuição
oRecepcaoEvento.GravarXmlDistribuicao("tmp\testenfe") // Grava o XML de distribuição

OTHER CASE
// Evento rejeitado
// Realizar as ações necessárias
END
END
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
```

Envio do XML de evento de carta de correçã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 EnvEvento
oEnvEvento is Unimake.Business.DFe.XML.NFe.EnvEvento
oEnvEvento.Versao = "1.00"
oEnvEvento.IdLote = "000000000000001"

//-------------------------------------------------
//Criar tags do evento sequencia 1
//-------------------------------------------------
//Criar tag Evento
oEvento is Unimake.Business.DFe.XML.NFe.Evento
oEvento.Versao = "1.00"

//Criar tag DetEventoCCE ###
oDetEventoCCE is Unimake.Business.DFe.XML.NFe.DetEventoCCE
oDetEventoCCE.Versao = "1.00"
oDetEventoCCE.XCorrecao = "CFOP errada, CFOP correta do produto 10 e 5602"

//Criar tag InfEvento
oInfEvento is Unimake.Business.DFe.XML.NFe.InfEvento

//Adicionar a tag DetEventoCCE dentro da Tag DetEvento
oInfEvento.DetEvento = oDetEventoCCE //###

//Atualizar propriedades da oInfEvento
//IMPORTANTE: Atualização da propriedade TpEvento deve acontecer depois que o DetEvento recebeu o oDetEventoCanc para que funcione sem erro
oInfEvento.COrgao = UFBrasil.PR
oInfEvento.ChNFe = "41191006117473000150550010000579281779843610"
oInfEvento.CNPJ = "06117473000150"
oInfEvento.DhEvento = SysDateTime()
oInfEvento.TpEvento = 110110 //TipoEventoNFe.CartaCorrecao
oInfEvento.NSeqEvento = 1
oInfEvento.VerEvento = "1.00"
oInfEvento.TpAmb = 2 //TipoAmbiente.Homologacao

//Adicionar a tag InfEvento dentro da tag Evento
oEvento.InfEvento = oInfEvento

//Adicionar a tag Evento dentro da tag EnvEvento
oEnvEvento.AddEvento(oEvento)

//-------------------------------------------------
//Criar tags do evento sequencia 2
//-------------------------------------------------
//Criar tag Evento
oEvento2 is Unimake.Business.DFe.XML.NFe.Evento
oEvento2.Versao = "1.00"

//Criar tag DetEventoCCE ###
oDetEventoCCE2 is Unimake.Business.DFe.XML.NFe.DetEventoCCE
oDetEventoCCE2.Versao = "1.00"
oDetEventoCCE2.XCorrecao = "CFOP errada, CFOP correta do produto 10 e 5602"

//Criar tag InfEvento
oInfEvento2 is Unimake.Business.DFe.XML.NFe.InfEvento

//Adicionar a tag DetEventoCCE dentro da Tag DetEvento
oInfEvento2.DetEvento = oDetEventoCCE2 //###

//Atualizar propriedades da oInfEvento
//IMPORTANTE: Atualização da propriedade TpEvento deve acontecer depois que o DetEvento recebeu o oDetEventoCanc para que funcione sem erro
oInfEvento2.COrgao = UFBrasil.PR
oInfEvento2.ChNFe = "41191006117473000150550010000579281779843610"
oInfEvento2.CNPJ = "06117473000150"
oInfEvento2.DhEvento = SysDateTime()
oInfEvento2.TpEvento = 110110 //TipoEventoNFe.CartaCorrecao
oInfEvento2.NSeqEvento = 2
oInfEvento2.VerEvento = "1.00"
oInfEvento2.TpAmb = 2 //TipoAmbiente.Homologacao

//Adicionar a tag InfEvento dentro da tag Evento
oEvento2.InfEvento = oInfEvento2

//Adicionar a tag Evento dentro da tag EnvEvento
oEnvEvento.AddEvento(oEvento2)

EDT_RetornoWSString = "Versao schema: " + oEnvEvento.Versao + CR
EDT_RetornoWSString += "LOTE: " + oEnvEvento.IdLote + CR
EDT_RetornoWSString += "Qtde eventos: " + oEnvEvento.GetEventoCount + CR + CR

FOR I = 1 TO oEnvEvento.GetEventoCount
oTagEvento is Unimake.Business.DFe.XML.NFe.Evento <- oEnvEvento.GetEvento(I - 1)

EDT_RetornoWSString += "SEQUENCIA EVENTO: " + oTagEvento.InfEvento.NSeqEvento + CR
END

WHEN EXCEPTION IN
//Consumir o serviço
oRecepcaoEvento is Unimake.Business.DFe.Servicos.NFe.RecepcaoEvento
oRecepcaoEvento.Executar(oEnvEvento, oConfiguracao)

eventoAssinado is string = oRecepcaoEvento.GetConteudoXMLAssinado()
EDT_RetornoWSString += "XML Assinado: " + CR + eventoAssinado + CR + CR

// Gravar o XML assinado no HD
fDelete("d:\testenfe\CartaCorrecaoNFe.xml")
fSaveText("d:\testenfe\CartaCorrecaoNFe.xml", eventoAssinado)

//Ver retorno da SEFAZ
EDT_RetornoWSString += "XML Retornado: " + CR + oRecepcaoEvento.RetornoWSString + CR + CR

//Ver o conteúdo da tag CStat e XMotivo
EDT_RetornoWSString += "CStat do Lote Retornado: " + oRecepcaoEvento.Result.CStat + CR
EDT_RetornoWSString += "XMotivo: " + oRecepcaoEvento.Result.XMotivo + CR + CR

IF oRecepcaoEvento.Result.CStat = 128 //128 = Lote de evento processado com sucesso.
//Como pode existir vários eventos no XML (Caso da carta de correção que posso enviar várias sequencias de evento)
//é necessário fazer um loop para ver a autorização de cada um deles
FOR I = 1 TO oRecepcaoEvento.Result.GetRetEventoCount
oRetEvento is Unimake.Business.DFe.XML.NFe.RetEvento <- oRecepcaoEvento.Result.GetRetEvento(I - 1)

EDT_RetornoWSString += "CStat do evento " + I + ": " + oRetEvento.InfEvento.CStat + CR
EDT_RetornoWSString += "XMotivo: " + oRetEvento.InfEvento.XMotivo

SWITCH oRetEvento.InfEvento.CStat
CASE 135 // Evento homologado com vinculação da respectiva NFe
CASE 136 // Evento homologado sem vinculação com À respectiva NFe (SEFAZ não encontrou À NFe na base dela)
CASE 155 // Evento de Cancelamento homologado fora DO prazo permitido para cancelamento
// Grava o XML de distribuição
oRecepcaoEvento.GravarXmlDistribuicao("tmp\testenfe") // Grava o XML de distribuição

OTHER CASE
// Evento rejeitado
// Realizar as ações necessárias
END
END
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=VQPiUf2eSbQ
Illustrations, screen shots
none
none
User reviews
(To evaluate this resource, click 'Write a review')
No review or comment? Be the first one!