PC SOFT
DEPOT EN LIGNE
POUR WINDEVWEBDEV ET WINDEV MOBILE

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



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

- Como gerar o XML do CTe;
- Como enviar o XML do CTe para a SEFAZ no modo síncrono;
- Como verificando se o CTe 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.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

// Criar a tag <infCte>
oInfCTe is Unimake.Business.DFe.XML.CTe.InfCTe
oInfCTe.Versao = "4.00"

// Criar grupo de tag <ide>
oIde is Unimake.Business.DFe.XML.CTe.Ide
oIde.CUF = 41 // UFBrasil.PR
oIde.CCT = "01722067"
oIde.CFOP = "6352"
oIde.NatOp = "PREST.SERV.TRANSP.INDUSTR"
oIde.Mod = 57 // ModeloDFe.CTe
oIde.Serie = 1
oIde.NCT = 861
oIde.DhEmi = SysDateTime()
oIde.TpImp = 2 // FormatoImpressaoDACTE.NormalPaisagem
oIde.TpEmis = 1 // TipoEmissao.Normal
oIde.TpAmb = 1 // TipoAmbiente.Homologacao
oIde.TpCTe = 0 // TipoCTe.Normal
oIde.ProcEmi = 0 // ProcessoEmissao.AplicativoContribuinte
oIde.VerProc = "UNICO V8.0"
oIde.CMunEnv = "4118402"
oIde.XMunEnv = "PARANAVAI"
oIde.UFEnv = 41 // UFBrasil.PR
oIde.Modal = 01 // ModalidadeTransporteCTe.Rodoviario
oIde.TpServ = 0 // TipoServicoCTe.Normal
oIde.CMunIni = "4118402"
oIde.XMunIni = "PARANAVAI"
oIde.UFIni = 41 // UFBrasil.PR
oIde.CMunFim = "3305109"
oIde.XMunFim = "SAO JOAO DE MERITI"
oIde.UFFim = 33 // UFBrasil.RJ
oIde.Retira = 0 // SimNao.Nao
oIde.IndIEToma = 1 // IndicadorIEDestinatario.ContribuinteICMS

// Criar grupo de tag <toma3>
oToma3 is Unimake.Business.DFe.XML.CTe.Toma3
oToma3.Toma = 0 // TomadorServicoCTe.Remetente

// Adicionar o grupo de tag <toma3> dentro do grupo <ide>
oIde.Toma3 = oToma3

// Adicionar o grupo de tag <ide> dentro do grupo <infCte>
oInfCTe.Ide = oIde

// Criar grupo de tag <emit>
oEmit is Unimake.Business.DFe.XML.CTe.Emit
oEmit.CNPJ = "31905001000109"
oEmit.IE = "9079649730"
oEmit.XNome = "EXATUS MOVEIS EIRELI"
oEmit.XFant = "EXATUS MOVEIS"
oEmit.CRT = CRT.RegimeNormal

// Criar o grupo de tag <enderEmit>
oEnderEmit is Unimake.Business.DFe.XML.CTe.EnderEmit
oEnderEmit.XLgr = "RUA JOAQUIM F. DE SOUZA"
oEnderEmit.Nro = "01112"
oEnderEmit.XBairro = "VILA TEREZINHA"
oEnderEmit.CMun = 4118402
oEnderEmit.XMun = "PARANAVAI"
oEnderEmit.CEP = "87706675"
oEnderEmit.UF = 41 // UFBrasil.PR
oEnderEmit.Fone = "04434237530"

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

// Adicionar o grupo de tag <emit> dentro do grupo <infCte>
oInfCTe.Emit = oEmit

// Criar grupo de tag <rem>
oRem is Unimake.Business.DFe.XML.CTe.Rem
oRem.CNPJ = "10197843000183"
oRem.IE = "9044791606"
oRem.XNome = "CT-E EMITIDO EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"
oRem.XFant = "CT-E EMITIDO EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"
oRem.Fone = "04434225480"

// Criar o grupo de tag <enderReme>
oEnderReme is Unimake.Business.DFe.XML.CTe.EnderReme
oEnderReme.XLgr = "RUA JOAQUIM F. DE SOUZA"
oEnderReme.Nro = "01112"
oEnderReme.XBairro = "VILA TEREZINHA"
oEnderReme.CMun = 4118402
oEnderReme.XMun = "PARANAVAI"
oEnderReme.CEP = "87706675"
oEnderReme.UF = 41 // UFBrasil.PR
oEnderReme.CPais = 1058
oEnderReme.XPais = "BRASIL"

// Adicionar o grupo de tag <enderReme> dentro do grupo <rem>
oRem.EnderReme = oEnderReme

// Adicionar o grupo de tag <rem> dentro do grupo <infCte>
oInfCTe.Rem = oRem

// Criar grupo de tag <dest>
oDest is Unimake.Business.DFe.XML.CTe.Dest
oDest.CNPJ = "00000000075108"
oDest.IE = "ISENTO"
oDest.XNome = "CT-E EMITIDO EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"

// Criar o grupo de tag <enderDest>
oEnderDest is Unimake.Business.DFe.XML.CTe.EnderDest
oEnderDest.XLgr = "R. GESSYR GONCALVES FONTES, 55"
oEnderDest.Nro = "55"
oEnderDest.XBairro = "CENTRO"
oEnderDest.CMun = 3305109
oEnderDest.XMun = "SAO JOAO DE MERITI"
oEnderDest.CEP = "25520570"
oEnderDest.UF = 33 // UFBrasil.RJ
oEnderDest.CPais = 1058
oEnderDest.XPais = "BRASIL"

// Adicionar o grupo de tag <enderDest> dentro do grupo <dest>
oDest.EnderDest = oEnderDest

// Adicionar o grupo de tag <dest> dentro do grupo <infCte>
oInfCTe.Dest = oDest

// Criar grupo de tag <vPrest>
oVPrest is Unimake.Business.DFe.XML.CTe.VPrest
oVPrest.VTPrest = 50.00
oVPrest.VRec = 50.00

// Criar grupo de tag <Comp>
oComp is Unimake.Business.DFe.XML.CTe.Comp
oComp.XNome = "FRETE VALOR"
oComp.VComp = 50.00

// Adicionar o grupo de tag <Comp> dentro do grupo <vPrest>
oVPrest.AddComp(oComp)

// Criar grupo de tag <Comp>
oComp2 is Unimake.Business.DFe.XML.CTe.Comp
oComp2.XNome = "FRETE XALOR"
oComp2.VComp = 51.00

// Adicionar o grupo de tag <Comp> dentro do grupo <vPrest>
oVPrest.AddComp(oComp2)

// Adicionar o grupo de tag <vPrest> dentro do grupo <infCte>
oInfCTe.VPrest = oVPrest

// Criar grupo de tag <imp>
oImp is Unimake.Business.DFe.XML.CTe.Imp

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

// Criar grupo de tag <ICMSSN>
oICMSSN is Unimake.Business.DFe.XML.CTe.ICMSSN
oICMSSN.CST = "90"
oICMSSN.IndSN = 1 // SimNao.Sim

// Adicionar o grupo de tag <ICMSSN> dentro do grupo <ICMS>
oICMS.ICMSSN = oICMSSN

// Adicionar o grupo de tag <ICMS> dentro do grupo <imp>
oImp.ICMS = oICMS

// Adicionar o grupo de tag <imp> dentro do grupo <infCte>
oInfCTe.Imp = oImp

// Criar grupo de tag <infCTeNorm>
oInfCTeNorm is Unimake.Business.DFe.XML.CTe.InfCTeNorm

// Criar grupo de tag <infCarga>
oInfCarga is Unimake.Business.DFe.XML.CTe.InfCarga
oInfCarga.VCarga = 6252.96
oInfCarga.ProPred = "MOVEIS"

// Criar grupo de tag <infQ>
oInfQ is Unimake.Business.DFe.XML.CTe.InfQ
oInfQ.CUnid = 1 // CodigoUnidadeMedidaCTe.KG,
oInfQ.TpMed = "PESO BRUTO"
oInfQ.QCarga = 320.0000

// Adicionar o grupo de tag <infQ> dentro do grupo <infCarga>
oInfCarga.AddInfQ(oInfQ)

// Criar grupo de tag <infQ>
oInfQ2 is Unimake.Business.DFe.XML.CTe.InfQ
oInfQ2.CUnid = 3 // CodigoUnidadeMedidaCTe.UNIDADE,
oInfQ2.TpMed = "UNIDADE"
oInfQ2.QCarga = 1.0000

// Adicionar o grupo de tag <infQ> dentro do grupo <infCarga>
oInfCarga.AddInfQ(oInfQ2)

// Adicionar o grupo de tag <infCarga> dentro do grupo <infCTeNorm>
oInfCTeNorm.infCarga = oInfCarga

// Criar grupo de tag <infDoc>
oInfDoc is Unimake.Business.DFe.XML.CTe.InfDoc

// Criar grupo de tag <infNFe>
oInfNFe is Unimake.Business.DFe.XML.CTe.InfNFe
oInfNFe.Chave = "41200306117473000150550030000652511417023254"

// Adicionar o grupo de tag <infNFe> dentro do grupo <infDoc>
oInfDoc.AddInfNFe(oInfNFe)

// Adicionar o grupo de tag <infDoc> dentro do grupo <infCTeNorm>
oInfCTeNorm.InfDoc = oInfDoc

// Criar grupo de tag <infModal>
oInfModal is Unimake.Business.DFe.XML.CTe.InfModal
oInfModal.VersaoModal="4.00"

// Criar grupo de tag <rodo>
oRodo is Unimake.Business.DFe.XML.CTe.Rodo
oRodo.RNTRC = "44957333"

// Criar grupo de tag <occ>
oOcc is Unimake.Business.DFe.XML.CTe.Occ
oOcc.NOcc = 810
oOcc.DEmi = SysDateTime()

// Criar grupo de tag <emiOcc>
oEmiOcc is Unimake.Business.DFe.XML.CTe.EmiOcc
oEmiOcc.CNPJ = "31905001000109"
oEmiOcc.CInt = "0000001067"
oEmiOcc.IE = "9079649730"
oEmiOcc.UF = 41 // UFBrasil.PR
oEmiOcc.Fone = "04434237530"

// Adicionar o grupo de tag <emiOcc> dentro do grupo <occ>
oOcc.EmiOcc = oEmiOcc

// Adicionar o grupo de tag <occ> dentro do grupo <rodo>
oRodo.AddOcc(oOcc)

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

// Adicionar o grupo de tag <infModal> dentro do grupo <infCTeNorm>
oInfCTeNorm.InfModal = oInfModal

// Adicionar o grupo de tag <infCTeNorm> dentro do grupo <infCte>
oInfCTe.InfCTeNorm = oInfCTeNorm

// Criar grupo de tag <infRespTec>
oInfRespTec is Unimake.Business.DFe.XML.CTe.InfRespTec
oInfRespTec.CNPJ = "06117473000150"
oInfRespTec.XContato = "teste teste teste"
oInfRespTec.Email = "teste@teste.com.br"
oInfRespTec.Fone = "04431414900"

// Adicionar o grupo de tag <infRespTec> dentro do grupo <infCte>
oInfCTe.InfRespTec = oInfRespTec

// Adicionar o grupo de tag <infCte> dentro do grupo <CTe>
oCTe.InfCTe = oInfCTe

//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 = "<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/watch?v=Lj-bP75xBO8
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 !