PC SOFT
ONLINE REPOSITORY
FOR WINDEVWEBDEV AND WINDEV MOBILE

Home |  | Sign in | English US
[DLL Unimake.DFe] Como gerar o XML para consultar os MDFes não encerrados e desserializar XML do CTe.
Published by Wandrey
in the category Various
New features



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

- Como consultar os MDFe´s não encerrados
- Como desserializar o XML do CTe (Para aqueles que já possuem o XML do CTe pronto, abordaremos técnicas que permitem transformar o XML em um objeto de forma eficaz, economizando tempo e recursos.)

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

Como consultar os MDFe´s não encerrados:

```
oConfiguracao is Unimake.Business.DFe.Servicos.Configuracao
oConfiguracao.TipoDfe = 4 //4=MDFe
oConfiguracao.CodigoUF = 41 // UFBrasil.PR
oConfiguracao.CertificadoSenha = "12345678"
oConfiguracao.CertificadoArquivo = "C:\Projetos\certificados\UnimakePV.pfx"

oConsMDFeNaoEnc is Unimake.Business.DFe.XML.MDFe.ConsMDFeNaoEnc
oConsMDFeNaoEnc.Versao = "3.00"
oConsMDFeNaoEnc.TpAmb = 2 //TipoAmbiente.Homologacao
oConsMDFeNaoEnc.XServ = "CONSULTAR NÃO ENCERRADOS"
oConsMDFeNaoEnc.CNPJ = "10859283000185"

WHEN EXCEPTION IN
//Enviar a consulta
oConsNaoEnc is Unimake.Business.DFe.Servicos.MDFe.ConsNaoEnc
oConsNaoEnc.Executar(oConsMDFeNaoEnc, oConfiguracao)

//Retorno da SEFAZ, string do XML
EDT_RetornoWSString += oConsNaoEnc.RetornoWSString + CR + CR

oRetConsMDFeNaoEnc is Unimake.Business.DFe.XML.MDFe.RetConsMDFeNaoEnc <- oConsNaoEnc.Result

EDT_RetornoWSString += oRetConsMDFeNaoEnc.cStat + CR
EDT_RetornoWSString += oRetConsMDFeNaoEnc.XMotivo + CR

FOR x = 1 TO oRetConsMDFeNaoEnc.GetInfMDFeCount()
oInfMDFe is Unimake.Business.DFe.XML.MDFe.RetConsMDFeNaoEncInfMDFe <- oRetConsMDFeNaoEnc.GetInfMDFe(x-1)

EDT_RetornoWSString += oInfMDFe.ChMDFe + CR
EDT_RetornoWSString += oInfMDFe.NProt + 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
```

Como desserializar o XML do CTe:

```
//Criar as configurações mínimas necessárias para consumir o serviço
oConfiguracao is Unimake.Business.DFe.Servicos.Configuracao()
oConfiguracao.TipoDFe = TipoDFe.CTe
oConfiguracao.TipoEmissao = TipoEmissao.Normal
oConfiguracao.CertificadoArquivo = "C:\Projetos\certificados\UnimakePV.pfx"
oConfiguracao.CertificadoSenha = "12345678"

// Criar grupo de tag <CTe>
oCTe is Unimake.Business.DFe.XML.CTe.CTe

//Desserializar o XML para criar o objeto a partir de um arquivo no HD
oCTe <- oCTe.LoadFromFile("D:\testenfe\41240331905001000109570010000008611017220674-cte.xml")

//Desserializar o XML para criar o objeto a partir da string do XML
//xmlCTe is string=floadtext("D:\testenfe\41240331905001000109570010000008611017220674-cte.xml")
//oCTe <- oCTe.LoadFromXML(xmlCTe)

//Recuperar algumas informações do objeto do CTe
EDT_RetornoWSString = "<chCTe> " + oCTe.InfCTe.Chave + CR
EDT_RetornoWSString += "<cCT> " + oCTe.InfCTe.Ide.CCT + CR
EDT_RetornoWSString += "<nCT> " + oCTe.InfCTe.Ide.NCT + CR

WHEN EXCEPTION IN
//Consumir o serviço
oAutorizacaoSinc is Unimake.Business.DFe.Servicos.CTe.AutorizacaoSinc()
oAutorizacaoSinc.SetXMLConfiguracao(oCTe, 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
xmlCTeAssinado is string = oAutorizacaoSinc.GetConteudoCTeAssinado(0)

// Demonstrar o XML do CTe assinado na tela
EDT_RetornoWSString += "XML CTe assinado: " + CR + CR + xmlCTeAssinado + CR + CR

// Gravar o XML assinado no HD antes de enviar
chaveCTe is string = oCTe.InfCTe.Chave
fDelete("d:\testenfe\" + chaveCTe + "-cte.xml")
fSaveText("d:\testenfe\" + chaveCTe + "-cte.xml", xmlCTeAssinado)

oAutorizacaoSinc.Executar(oCTe, oConfiguracao)

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

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

IF oAutorizacaoSinc.Result.CStat = 104 // 104 = Lote processado com sucesso
EDT_RetornoWSString += "<cStat CTe> " + oAutorizacaoSinc.Result.ProtCTe.InfProt.CStat + CR
EDT_RetornoWSString += "<xMotivo CTe>" + oAutorizacaoSinc.Result.ProtCTe.InfProt.XMotivo + CR + CR

IF oAutorizacaoSinc.Result.ProtCTe.InfProt.CStat = 100 // CTe autorizado
//Gravar o XML de distribuição do CTe no HD, se preferir assim.
oAutorizacaoSinc.GravarXmlDistribuicao("d:\testenfe")

//Pegar a string do XML de distribuição para gravar na base de dados, se preferir assim.
stringXmlDistribuicao is string = oAutorizacaoSinc.GetCteProcResults(oCTe.InfCTe.Chave)

EDT_RetornoWSString += "XML de Distribuição: " + CR + CR + stringXmlDistribuicao
ELSE
//Cte rejeitado, fazer devidos tratamentos
END
ELSE
//Cte rejeitado, fazer devidos tratamentos
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/live/ymPkbHSRLtw
Illustrations, screen shots
none
none
User reviews
(To evaluate this resource, click 'Write a review')
No review or comment? Be the first one!