PC SOFT
DEPOT EN LIGNE
POUR WINDEVWEBDEV ET WINDEV MOBILE

[DLL Unimake.DFe] Como gerar o XML do MDFe e enviar para a SEFAZ no modo síncrono.
Publié par Wandrey
dans la catégorie Divers
Nouveautés



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

- Como gerar o XML do MDFe;
- Como enviar o XML do MDFe para a SEFAZ no modo síncrono;
- Como verificando se o MDFe foi autorizado para gerar o XML de distribuição.

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

// Criar o XML do MDFe
oMDFe is Unimake.Business.DFe.XML.MDFe.MDFe

// Criar a tag <infMDFe>
oInfMDFe is Unimake.Business.DFe.XML.MDFe.InfMDFe
oInfMDFe.Versao = "3.00"

// Criar a tag <ide>
oIDE is Unimake.Business.DFe.XML.MDFe.IDE

oIDE.CUF = 41 // UFBrasil.PR
oIDE.TpAmb = 2 // TipoAmbiente.Homologacao
oIDE.TpEmit = 1 // TipoEmitenteMDFe.PrestadorServicoTransporte
oIDE.Mod = 58 // ModeloDFe.MDFe
oIDE.Serie = 1
oIDE.NMDF = 861
oIDE.CMDF = "01722067"
oIDE.Modal = 1 // ModalidadeTransporteMDFe.Rodoviario
oIDE.DhEmi = SysDateTime()
oIDE.TpEmis = 1 // TipoEmissao.Normal
oIDE.ProcEmi = 0 // ProcessoEmissao.AplicativoContribuinte
oIDE.VerProc = "UNICO V8.0"
oIDE.TpTransp = 1 // 1=ETC
oIDE.UFIni = 41 // UFBrasil.PR
oIDE.UFFim = 35 // UFBrasil.SP
oIDE.DhIniViagem = SysDateTime()

// Criar a tag <infMunCarrega>
oInfMunCarrega is Unimake.Business.DFe.XML.MDFe.InfMunCarrega
oInfMunCarrega.CMunCarrega = 4118402
oInfMunCarrega.XMunCarrega = "PARANAVAI"

// Adicionar o grupo de tag <infMunCarrega> dentro da IDE
oIDE.AddInfMunCarrega(oInfMunCarrega)

// Adicionar o grupo de tag <ide> dentro da tag <infMDFe>
oInfMDFe.IDE = oIDE

// Criar a tag <emit>
oEmit is Unimake.Business.DFe.XML.MDFe.Emit
oEmit.CNPJ = "06117473000150"
oEmit.IE = "9456656656"
oEmit.XNome = "XXXXXX XXXXXX XXXXXX"
oEmit.XFant = "XXXXXX XXXXXX"

// Criar a tag <enderEmit>
oEnderEmit is Unimake.Business.DFe.XML.MDFe.EnderEmit
oEnderEmit.XLgr = "RUA XXXXXXX X. XX XXXXX"
oEnderEmit.Nro = "01112"
oEnderEmit.XBairro = "VILA XXXXXXXXX"
oEnderEmit.CMun = 4118402
oEnderEmit.XMun = "PARANAVAI"
oEnderEmit.CEP = "87706000"
oEnderEmit.UF = 41 // UFBrasil.PR
oEnderEmit.Fone = "04433333333"

// Adicionar o grupo de tag <enderEmit> dentro da tag <emit>
oEmit.EnderEmit = oEnderEmit

// Adicionar o grupo de tag <emit> dentro da tag <infMDFe>
oInfMDFe.Emit = oEmit

// Criar o grupo de tag <infModal>
oInfModal is Unimake.Business.DFe.XML.MDFe.InfModal
oInfModal.VersaoModal = "3.00"

// Criar o grupo de tag <rodo>
oRodo is Unimake.Business.DFe.XML.MDFe.Rodo

// Criar o grupo de tag <infANTT>
oInfANTT is Unimake.Business.DFe.XML.MDFe.InfANTT
oInfANTT.RNTRC = "44556666"

// Criar o grupo de tag <infContratante>
oInfContratante is Unimake.Business.DFe.XML.MDFe.InfContratante
oInfContratante.CNPJ = "06117473000150"

// Adicionar o grupo de tag <infContratante> dentro da tag <infANTT>
oInfANTT.AddInfContratante(oInfContratante)

// Criar um novo grupo de tag <infContratante>
oInfContratante2 is Unimake.Business.DFe.XML.MDFe.InfContratante
oInfContratante2.CNPJ = "06117473000150"

// Adicionar o grupo de tag <infContratante> dentro da tag <infANTT>
oInfANTT.AddInfContratante(oInfContratante2)

// Adicionar o grupo de tag <infANTT> dentro do grupo <rodo>
oRodo.InfANTT = oInfANTT

// Criar o grupo de tag <veicTracao>
oVeicTracao is Unimake.Business.DFe.XML.MDFe.VeicTracao
oVeicTracao.CInt = "AXF0000"
oVeicTracao.Placa = "AXF0000"
oVeicTracao.Tara = 0
oVeicTracao.CapKG = 5000
oVeicTracao.TpRod = 2 // TipoRodado.Toco
oVeicTracao.TpCar = 2 // TipoCarroceriaMDFe.FechadaBau
oVeicTracao.UF = 41 // UFBrasil.PR

// Criar o grupo de tag <prop>
oProp is Unimake.Business.DFe.XML.MDFe.Prop
oProp.CNPJ = "06117443000150"
oProp.RNTRC = "44556666"
oProp.XNome = "XXXXXX XXXXXX XXXXXX"
oProp.IE = "5545546656"
oProp.UF = 41 // UFBrasil.PR
oProp.TpProp = 2 // TipoProprietarioMDFe.Outros

// Adicionar o grupo de tag <prop> dentro do grupo <veicTracao>
oVeicTracao.Prop = oProp

// Criar o grupo de tag <condutor>
oCondutor is Unimake.Business.DFe.XML.MDFe.Condutor
oCondutor.XNome = "XXXXXXXXX XXXXX XX XXXXX"
oCondutor.CPF = "02133333333"

// Adicionar o grupo de tag <condutor> dentro do grupo <veicTracao>
oVeicTracao.AddCondutor(oCondutor)

// Adicionar o grupo de tag <veicTracao> dentro do grupo <rodo>
oRodo.VeicTracao = oVeicTracao

// Adicionar o grupo de tag <rodo> dentro do grupo <infModal>
oInfModal.Rodo = oRodo

// Adicionar o grupo de tag <infModal> dentro do grupo <infMDFe>
oInfMDFe.InfModal = oInfModal

// Criar o grupo de tag <infDoc>
oInfDoc is Unimake.Business.DFe.XML.MDFe.InfDocInfMDFe

// Criar o grupo de tag <infMunDescarga>
oInfMunDescarga is Unimake.Business.DFe.XML.MDFe.InfMunDescarga
oInfMunDescarga.CMunDescarga = 3505708
oInfMunDescarga.XMunDescarga = "BARUERI"

// Criar o grupo de tag <infCTe>
oInfCTe is Unimake.Business.DFe.XML.MDFe.InfMunDescargaInfCTe
oInfCTe.ChCTe = "41000000000000000000000000000000000000000006"

// Adicionar o grupo de tag <infCTe> dentro do grupo <infMunDescarga>
oInfMunDescarga.AddInfCTe(oInfCTe)

// Criar um novo grupo de tag <infCTe>
oInfCTe2 is Unimake.Business.DFe.XML.MDFe.InfMunDescargaInfCTe
oInfCTe2.ChCTe = "41000000000000000000000000000000000000000004"

// Adicionar o grupo de tag <infCTe> dentro do grupo <infMunDescarga>
oInfMunDescarga.AddInfCTe(oInfCTe2)

// Criar o grupo de tag <infNFe>
oInfNFe is Unimake.Business.DFe.XML.MDFe.InfMunDescargaInfNFe
oInfNFe.ChNFe = "12345678901234567890123456789012345678901234"

// Criar o grupo de tag <infUnidTransp>
oInfUnidTransp is Unimake.Business.DFe.XML.MDFe.InfUnidTransp
oInfUnidTransp.IdUnidTransp = "122"
oInfUnidTransp.TpUnidTransp = 2 // TipoUnidadeTransporte.RodoviarioReboque

// Criar o grupo de tag <lacUnidTransp>
oLacUnidTransp is Unimake.Business.DFe.XML.MDFe.LacUnidTransp
oLacUnidTransp.NLacre = "12334"

// Adicionar o grupo de tag <lacUnidTransp> dentro do grupo <infUnidTransp>
oInfUnidTransp.AddLacUnidTransp(oLacUnidTransp)

// Criar o grupo de tag <infUnidCarga>
oInfUnidCarga is Unimake.Business.DFe.XML.MDFe.InfUnidCarga
oInfUnidCarga.TpUnidCarga = 1 // TipoUnidadeCarga.Container
oInfUnidCarga.IdUnidCarga = "123"

// Criar o grupo de tag <lacUnidCarga>
oLacUnidCarga is Unimake.Business.DFe.XML.MDFe.LacUnidCarga
oLacUnidCarga.NLacre = "3333333"

// Adicionar o grupo de tag <lacUnidCarga> dentro do grupo <infUnidCarga>
oInfUnidCarga.AddLacUnidCarga(oLacUnidCarga)

// Adicionar o grupo de tag <infUnidCarga> dentro do grupo <infUnidTransp>
oInfUnidTransp.AddInfUnidCarga(oInfUnidCarga)

// Adicionar o grupo de tag <infUnidTrans> dentro do grupo <infNFe>
oInfNFe.AddInfUnidTransp(oInfUnidTransp)

// Adicionar o grupo <infNfe> dentro do grupo <infMunDescarga>
oInfMunDescarga.AddInfNFe(oInfNFe)

// Adicionar o grupo de tag <infMunDescarga> dentro do grupo <infDoc>
oInfDoc.AddInfMunDescarga(oInfMunDescarga)

// Criar um novo grupo de tag <infMunDescarga>
oInfMunDescarga2 is Unimake.Business.DFe.XML.MDFe.InfMunDescarga
oInfMunDescarga2.CMunDescarga = 3550308
oInfMunDescarga2.XMunDescarga = "SAO PAULO"

// Criar o grupo de tag <infCTe>
oInfCTe3 is Unimake.Business.DFe.XML.MDFe.InfMunDescargaInfCTe
oInfCTe3.ChCTe = "41000000000000000000000000000000000000000000"

// Adicionar o grupo de tag <infCTe> dentro do grupo <infMunDescarga>
oInfMunDescarga.AddInfCTe(oInfCTe3)

// Adicionar o grupo de tag <infMunDescarga> dentro do grupo <infDoc>
oInfDoc.AddInfMunDescarga(oInfMunDescarga2)

// Adicionar o grupo de tag <infDoc> dentro do grupo <infMDFe>
oInfMDFe.InfDoc = oInfDoc

// Criar o grupo de tag <seg>
oSeg is Unimake.Business.DFe.XML.MDFe.Seg
oSeg.NApol = "033666565656"

// Criar o grupo de tag <infResp>
oInfResp is Unimake.Business.DFe.XML.MDFe.InfResp
oInfResp.RespSeg = 1 // ResponsavelSeguroMDFe.EmitenteMDFe
oInfResp.CNPJ = "06117473000150"

// Adicionar o grupo de tag <infResp> dentro do grupo <seg>
oSeg.InfResp = oInfResp

// Criar o grupo de tag <infSeg>
oInfSeg is Unimake.Business.DFe.XML.MDFe.InfSeg
oInfSeg.XSeg = "PORTO SEGURO"
oInfSeg.CNPJ = "06117473000150"

// Adicionar o grupo de tag <infSeg> dentro do grupo <seg>
oSeg.InfSeg = oInfSeg

// Adicionar tag <nAver> no grupo <seg> quantas vezes for necessário (Pode ter mais de uma)
oSeg.AddNAver("0000000000000000000000000000000000000000")
oSeg.AddNAver("0000000000000000000000000000000000000000")

// Adicionar o grupo <seg> dentro do grupo <infMDFe>
oInfMDFe.AddSeg(oSeg)

// Criar o grupo de tag <prodPred>
oProdPred is Unimake.Business.DFe.XML.MDFe.ProdPred
oProdPred.TpCarga = 5 // TipoCargaMDFe.CargaGeral
oProdPred.XProd = "TESTE DE PRODUTO PREDOMINANTE"

// Criar o grupo de tag <infLotacao>
oInfLotacao is Unimake.Business.DFe.XML.MDFe.InfLotacao

// Criar o grupo de tag <infLocalCarrega>
oInfLocalCarrega is Unimake.Business.DFe.XML.MDFe.InfLocalCarrega
oInfLocalCarrega.CEP = "87302080"

// Adicionar o grupo de tag <infLocalCarrega> dentro do grupo <infLotacao>
oInfLotacao.InfLocalCarrega = oInfLocalCarrega

// Criar o grupo de tag <infLocalDescarrega>
oInfLocalDescarrega is Unimake.Business.DFe.XML.MDFe.InfLocalDescarrega
oInfLocalDescarrega.CEP = "25650208"

// Adicionar o grupo de tag <infLocalDescarrega> dentro do grupo de tag <oInfLotacao>
oInfLotacao.InfLocalDescarrega = oInfLocalDescarrega

// Adicionar a tag <infLotacao> dentro da tag <prodPred>
oProdPred.InfLotacao = oInfLotacao

// Adicionar a tag <prodPred> dentro do grupo <infMDFe>
oInfMDFe.ProdPred = oProdPred

// Criar o grupo de tag <tot>
oTot is Unimake.Business.DFe.XML.MDFe.Tot
oTot.QCTe = 3
oTot.VCarga = 56599.09
oTot.CUnid = 1 // CodigoUnidadeMedidaMDFe.KG
oTot.QCarga = 2879.00

// Adicionar o grupo de tag <tot> dentro do grupo <infMDFe>
oInfMDFe.Tot = oTot

// Criar o grupo de tag <lacres>
oLacre is Unimake.Business.DFe.XML.MDFe.Lacre
oLacre.NLacre = "1111111"

// Adicionar o grupo de tag <lacre> dentro do grupo <lacres>
oInfMDFe.AddLacres(oLacre)

// Criar um novo grupo de tag <lacre>
oLacre2 is Unimake.Business.DFe.XML.MDFe.Lacre
oLacre2.NLacre = "2222222"

// Adicionar o grupo de tag <lacre> dentro do grupo <lacres>
oInfMDFe.AddLacres(oLacre2)

// Criar o grupo de tag <infAdic>
oInfAdic is Unimake.Business.DFe.XML.MDFe.InfAdic
oInfAdic.InfCpl = "DATA/HORA PREVISTA PARA O INICO DA VIAGEM: 10/08/2020 as 08:00"

// Adicionar o grupo de tag <infAdic> dentro do grupo <infMDFe>
oInfMDFe.InfAdic = oInfAdic

// Criar o grupo de tag <infRespTec>
oInfRespTec is Unimake.Business.DFe.XML.MDFe.InfRespTec
oInfRespTec.CNPJ = "99999999999999"
oInfRespTec.XContato = "Teste de Responsavel Tecnico"
oInfRespTec.Email = "testey@teste.com.br"
oInfRespTec.Fone = "04431414900"

// Adicionar o grupo de tag <infRespTec> dentro do grupo <infMDFe>
oInfMDFe.InfRespTec = oInfRespTec

// Adicionar o grupo de tag <InfMDFe> dentro do grupo <MDFe>
oMDFe.InfMDFe = oInfMDFe

//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 = "<chMDFe> " + oMDFe.InfMDFe.Chave + CR
EDT_RetornoWSString += "<cMDF> " + oMDFe.InfMDFe.Ide.CMDF + CR
EDT_RetornoWSString += "<nMDF> " + oMDFe.InfMDFe.Ide.NMDF + CR

WHEN EXCEPTION IN
//Consumir o serviço
oAutorizacaoSinc is Unimake.Business.DFe.Servicos.MDFe.AutorizacaoSinc()
oAutorizacaoSinc.SetXMLConfiguracao(oMDFe, 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
xmlMDFeAssinado is string = oAutorizacaoSinc.GetConteudoMDFeAssinado()

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

// Gravar o XML assinado no HD antes de enviar
chaveMDFe is string = oMDFe.InfMDFe.Chave
fDelete("d:\testenfe\" + chaveMDFe + "-mdfe.xml")
fSaveText("d:\testenfe\" + chaveMDFe + "-mdfe.xml", xmlMDFeAssinado)

oAutorizacaoSinc.Executar(oMDFe, 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 MDFe> " + oAutorizacaoSinc.Result.ProtMDFe.InfProt.CStat + CR
EDT_RetornoWSString += "<xMotivo MDFe>" + oAutorizacaoSinc.Result.ProtMDFe.InfProt.XMotivo + CR + CR

IF oAutorizacaoSinc.Result.ProtMDFe.InfProt.CStat = 100 // MDFe 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.GetMDFeProcResults(oMDFe.InfMDFe.Chave)

EDT_RetornoWSString += "XML de Distribuição: " + CR + CR + stringXmlDistribuicao
ELSE
//MDFe rejeitado, fazer devidos tratamentos
END
ELSE
//MDFe 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/watch?v=tr49fNdgm2M
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 !