PC SOFT
DEPOT EN LIGNE
POUR WINDEVWEBDEV ET WINDEV MOBILE

[DLL Unimake.DFe] Como enviar o XML da NFe para a SEFAZ no modo síncrono em WINDEV.
Publié par Wandrey
dans la catégorie Divers
Nouveautés



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

- Desserializar o XML da NFe para não precisar preencher o objeto do XML
- Vantagens e desvantagens da desserialização do XML
- Enviar a NFe no modo síncrono
- Diferenças entre envio síncrono e assíncrono (vantagens e desvantagens)

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

```
//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.TipoEmissao = TipoEmissao.Normal
oConfiguracao.CertificadoArquivo = "C:\Projetos\certificados\UnimakePV.pfx"
oConfiguracao.CertificadoSenha = "12345678"

//Criar o XML
//Criar tag <enviNFe>
oEnviNFe is Unimake.Business.DFe.XML.NFe.EnviNFe()
oEnviNFe.Versao = "4.00"
oEnviNFe.IdLote = "000000000000001"
oEnviNFe.IndSinc = SimNao.Sim

//Criar a tag NFe e desserializar o XML já gravado no HD para já preencher o objeto para envio
oNfe is Unimake.Business.DFe.XML.NFe.NFe

//Desserializar o XML apartir de um arquivo gravado no HD
//oEnviNFe.AddNFe(oNfe.LoadFromFile("D:\testenfe\41240106117473000150550300000000081905645778-nfe.xml"))

//Desserializar o XML a partir de uma string do XML que estava gravada no banco de dados, por exemplo.
//oEnviNFe.AddNFe(oNfe.LoadFromXml("string do XML da NFe"))

//Recuperar algumas informações do objeto da NFe

// Criar uma variável dinâmica para armazenar o objeto .NET
oTagNFe is Unimake.Business.DFe.XML.NFe.NFe() <- oEnviNFe.GetNFe(0)
oTagInfNFe is Unimake.Business.DFe.XML.NFe.InfNFe() <- oTagNFe.GetInfNFe(0)

EDT_RetornoWSString = "<chNFe> " + oTagInfNFe.Chave + CR
EDT_RetornoWSString += "<cNF> " + oTagInfNFe.Ide.CNF + CR
EDT_RetornoWSString += "<nNF> " + oTagInfNFe.Ide.NNF + CR

oTagInfNFe.Ide.NNF = 12 //Renumerar a nota só para não dar duplicidade no meu exemplo (isso no seu sistema não será necessário)

//Não encontrei outra forma de resgatar o código do Enum do C# para o WINDEV, talvez tenha algo que facilite, mas por hora é o que foi possível
CUFInt is int = oTagInfNFe.Ide.CUF

EDT_RetornoWSString += "<ide><cUF>" + CUFInt + CR + CR

WHEN EXCEPTION IN
//Consumir o serviço
oAutorizacao is Unimake.Business.DFe.Servicos.NFe.Autorizacao()
oAutorizacao.SetXMLConfiguracao(oEnviNFe, oConfiguracao)

//Pode-se gravar o conteudo do XML assinado na base de dados antes do envio, caso queira recuperar para futuro tratamento, isso da garantias
notaAssinada is string = oAutorizacao.GetConteudoNFeAssinada(0)

// Demonstrar o XML da nota assinada na tela
EDT_RetornoWSString += "XML nota assinado: " + CR + CR + notaAssinada + CR + CR

// Gravar o XML assinado no HD antes de enviar
chaveNFe is string = oTagInfNFe.Chave
fDelete("d:\testenfe\" + chaveNFe + "-nfe.xml")
fSaveText("d:\testenfe\" + chaveNFe + "-nfe.xml", notaAssinada)

oAutorizacao.Executar(oEnviNFe, oConfiguracao)

//Ver a string do XML retornado pela SEFAZ
EDT_RetornoWSString += "Retorno do webservice: " + CR + CR + oAutorizacao.RetornoWSString + CR + CR

EDT_RetornoWSString += "<cStat Lote> " + oAutorizacao.Result.CStat + CR
EDT_RetornoWSString += "<xMotivo Lote>" + oAutorizacao.Result.XMotivo + CR + CR

IF oAutorizacao.Result.CStat = 104 // 104 = Lote processado com sucesso
//Ver o conteúdo das tags de retorno da SEFAZ

oRetEnviNFe is Unimake.Business.DFe.XML.NFe.RetEnviNFe() <- oAutorizacao.Result

EDT_RetornoWSString += "<cStat NFe> " + oRetEnviNFe.ProtNFe.InfProt.CStat + CR
EDT_RetornoWSString += "<xMotivo NFe>" + oRetEnviNFe.ProtNFe.InfProt.XMotivo + CR + CR

IF oRetEnviNFe.ProtNFe.InfProt.CStat = 100 // 100 = Autorizado o uso da NF-e
//Gravar o XML de distribuição no HD
oAutorizacao.GravarXmlDistribuicao("d:\testenfe")

//Pegar a string do XML de distribuição para gravar na base de dados
docProcNFe is string = oAutorizacao.GetNFeProcResults(chaveNFe)
EDT_RetornoWSString += "XML de distribuição:" + CR + CR
EDT_RetornoWSString += docProcNFe + CR + CR

//Como pegar o numero do protocolo de autorizacao para gravar na base
EDT_RetornoWSString += "<nProt>" + oRetEnviNFe.ProtNFe.InfProt.NProt + CR + CR
END
END

Info("FIM")
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=YPgsmMWg28w
Illustrations, copies d'écran
none
none
Avis des utilisateurs
(Pour noter la ressource, cliquez sur Ecrire un avis)
Aucun avis ou commentaire ? Soyez le premier !