PC SOFT
ONLINE REPOSITORY
FOR WINDEVWEBDEV AND WINDEV MOBILE

Home |  | Sign in | English US
[DLL Unimake.DFe] Gestão de Entregas da NFe: Envio e Cancelamento do Comprovante de Entrega no seu ERP
Published by Wandrey
in the category Various
New features



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

- Como controlar as entregas de mercadorias no seu sistema;
- O que é o evento de comprovante de entrega da NFe;
- Como enviar o evento de comprovante de entrega NFe;
- Como cancelar o comprovante de entrega da NFe.

A seguir, apresento os códigos em WINDEV para realizar as tarefas descritas acima.

Como enviar o evento de comprovante de entrega 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 tag Evento
oEvento is Unimake.Business.DFe.XML.NFe.Evento
oEvento.Versao = "1.00"

//Criar tag DetEventoCompEntregaNFe
oDetEventoCompEntregaNFe is Unimake.Business.DFe.XML.NFe.DetEventoCompEntregaNFe
oDetEventoCompEntregaNFe.Versao = "1.00"
oDetEventoCompEntregaNFe.COrgaoAutor = 41 // UFBrasil.PR
oDetEventoCompEntregaNFe.TpAutor = 1 // TipoAutor.EmpresaEmitente
oDetEventoCompEntregaNFe.VerAplic = "ERP 1.0"
oDetEventoCompEntregaNFe.DhEntrega = SysDateTime()
oDetEventoCompEntregaNFe.NDoc = "00000000000" // Documento de quem assinou o comprovante
oDetEventoCompEntregaNFe.XNome = "NOME DE QUEM ASSINOU O COMPROVANTE"
oDetEventoCompEntregaNFe.LatGPS = "37.774929"
oDetEventoCompEntregaNFe.LongGPS = "122.419418"
oDetEventoCompEntregaNFe.HashComprovante = "2eDWGfx2xZJVFTKXGuiGZgzE2W4="
oDetEventoCompEntregaNFe.DhHashComprovante = SysDateTime()

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

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

//Atualizar propriedades da oInfEvento
//IMPORTANTE: Atualização da propriedade TpEvento deve acontecer depois que o DetEvento recebeu o oDetEventoManif para que funcione sem erro
oInfEvento.COrgao = UFBrasil.AN //Manifestação tem que ser sempre 91 (ambiente nacional)
oInfEvento.ChNFe = "41191006117473000150550010000579281779843610"
oInfEvento.CNPJ = "06117473000150"
oInfEvento.DhEvento = SysDateTime()
oInfEvento.TpEvento = TipoEventoNFe.ComprovanteEntregaNFe
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\ComprovanteEntregaNFe.xml")
fSaveText("d:\testenfe\ComprovanteEntregaNFe.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, 136, 155 // 135 = Evento homologado com vinculação da respectiva NFe
// 136 = Evento homologado sem vinculação com À respectiva NFe (SEFAZ não encontrou À NFe na base dela)
// 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

EDT_RetornoWSString += "String do XML de distribuição do evento " + I + ":" + CR + CR
EDT_RetornoWSString += oRecepcaoEvento.GetProcEventoNFeResultXMLByIndex(I) + CR + CR //String do 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//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 tag Evento
oEvento is Unimake.Business.DFe.XML.NFe.Evento
oEvento.Versao = "1.00"

//Criar tag DetEventoCompEntregaNFe
oDetEventoCompEntregaNFe is Unimake.Business.DFe.XML.NFe.DetEventoCompEntregaNFe
oDetEventoCompEntregaNFe.Versao = "1.00"
oDetEventoCompEntregaNFe.COrgaoAutor = 41 // UFBrasil.PR
oDetEventoCompEntregaNFe.TpAutor = 1 // TipoAutor.EmpresaEmitente
oDetEventoCompEntregaNFe.VerAplic = "ERP 1.0"
oDetEventoCompEntregaNFe.DhEntrega = SysDateTime()
oDetEventoCompEntregaNFe.NDoc = "00000000000" // Documento de quem assinou o comprovante
oDetEventoCompEntregaNFe.XNome = "NOME DE QUEM ASSINOU O COMPROVANTE"
oDetEventoCompEntregaNFe.LatGPS = "37.774929"
oDetEventoCompEntregaNFe.LongGPS = "122.419418"
oDetEventoCompEntregaNFe.HashComprovante = "2eDWGfx2xZJVFTKXGuiGZgzE2W4="
oDetEventoCompEntregaNFe.DhHashComprovante = SysDateTime()

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

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

//Atualizar propriedades da oInfEvento
//IMPORTANTE: Atualização da propriedade TpEvento deve acontecer depois que o DetEvento recebeu o oDetEventoManif para que funcione sem erro
oInfEvento.COrgao = UFBrasil.AN //Manifestação tem que ser sempre 91 (ambiente nacional)
oInfEvento.ChNFe = "41191006117473000150550010000579281779843610"
oInfEvento.CNPJ = "06117473000150"
oInfEvento.DhEvento = SysDateTime()
oInfEvento.TpEvento = TipoEventoNFe.ComprovanteEntregaNFe
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\ComprovanteEntregaNFe.xml")
fSaveText("d:\testenfe\ComprovanteEntregaNFe.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, 136, 155 // 135 = Evento homologado com vinculação da respectiva NFe
// 136 = Evento homologado sem vinculação com À respectiva NFe (SEFAZ não encontrou À NFe na base dela)
// 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

EDT_RetornoWSString += "String do XML de distribuição do evento " + I + ":" + CR + CR
EDT_RetornoWSString += oRecepcaoEvento.GetProcEventoNFeResultXMLByIndex(I) + CR + CR //String do 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
```

Como cancelar o comprovante de entrega 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 tag Evento
oEvento is Unimake.Business.DFe.XML.NFe.Evento
oEvento.Versao = "1.00"

//Criar tag DetEventoCancCompEntregaNFe
oDetEventoCancCompEntregaNFe is Unimake.Business.DFe.XML.NFe.DetEventoCancCompEntregaNFe
oDetEventoCancCompEntregaNFe.Versao = "1.00"
oDetEventoCancCompEntregaNFe.COrgaoAutor = 41 // UFBrasil.PR
oDetEventoCancCompEntregaNFe.TpAutor = 1 // TipoAutor.EmpresaEmitente
oDetEventoCancCompEntregaNFe.VerAplic = "ERP 1.0"
oDetEventoCancCompEntregaNFe.NProtEvento = "000000000000000"

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

//Adicionar a tag DetEventoCancCompEntregaNFe dentro da Tag DetEvento
oInfEvento.DetEvento = oDetEventoCancCompEntregaNFe

//Atualizar propriedades da oInfEvento
//IMPORTANTE: Atualização da propriedade TpEvento deve acontecer depois que o DetEvento recebeu o oDetEventoManif para que funcione sem erro
oInfEvento.COrgao = UFBrasil.AN //Manifestação tem que ser sempre 91 (ambiente nacional)
oInfEvento.ChNFe = "41191006117473000150550010000579281779843610"
oInfEvento.CNPJ = "06117473000150"
oInfEvento.DhEvento = SysDateTime()
oInfEvento.TpEvento = TipoEventoNFe.CancelamentoComprovanteEntregaNFe
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\CancelComprovanteEntregaNFe.xml")
fSaveText("d:\testenfe\CancelComprovanteEntregaNFe.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, 136, 155 // 135 = Evento homologado com vinculação da respectiva NFe
// 136 = Evento homologado sem vinculação com À respectiva NFe (SEFAZ não encontrou À NFe na base dela)
// 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

EDT_RetornoWSString += "String do XML de distribuição do evento " + I + ":" + CR + CR
EDT_RetornoWSString += oRecepcaoEvento.GetProcEventoNFeResultXMLByIndex(I) + CR + CR //String do 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=bHsPWzBB3I4
Illustrations, screen shots
none
none
User reviews
(To evaluate this resource, click 'Write a review')
No review or comment? Be the first one!