PC SOFT
ONLINE REPOSITORY
FOR WINDEVWEBDEV AND WINDEV MOBILE

Home |  | Sign in | English US
[DLL Unimake.DFe] Como validar XML e o que fazer em casos de não conseguir obter retorno no envio da NFe, NFCe, CTe, etc.
Published by Wandrey
- Unclassified
New features



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

- Como validar XML dos Documentos Fiscais Eletrônicos (NFe, NFCe, CTe, etc.)
- Resolução de Problemas ao Enviar e Receber Retornos de NFe, NFCe, CTe, etc.
-- O que fazer quando não é possível obter o retorno após o envio de uma NFe, NFCe, CTe, MDFe, etc.

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

Como validar XML:

```
WHEN EXCEPTION IN
//-----------------------------------------------------
//Validar XML da ProcNFe - Sem falhas
//-----------------------------------------------------
schema is string = "NFe.procNFe_v4.00.xsd";
arquivoXML is string = "d:\testenfe\41220606117473000150550010000580071051443444-procnfe.xml"
targetNS is string = "http://www.portalfiscal.inf.br/nfe"
ValidarXMLDFE(arquivoXML, schema, targetNS)

//-----------------------------------------------------
//Validar XML da ProcNFe - Com falhas
//-----------------------------------------------------
schema = "NFe.procNFe_v4.00.xsd"
arquivoXML = "D:\testenfe\41220606117473000150550010000580071051443444_com_erros-procnfe.xml"
ValidarXMLDFE(arquivoXML, schema, targetNS)

//-----------------------------------------------------
//Validar XML da NFe
//-----------------------------------------------------
schema = "NFe.nfe_v4.00.xsd"
arquivoXML = "d:\testenfe\41220606117473000150550010000580071051443444-nfe.xml"
ValidarXMLDFE(arquivoXML, schema, targetNS)

//-----------------------------------------------------
//Validar XML da NFCe
//-----------------------------------------------------
schema = "NFe.nfe_v4.00.xsd"
arquivoXML = "D:\testenfe\41240206117473000150650300000000031293519211-nfe.xml"
ValidarXMLDFE(arquivoXML, schema, targetNS)

//-----------------------------------------------------
//Validar XML de consulta status da NFe
//-----------------------------------------------------
schema = "NFe.consStatServ_v4.00.xsd"
arquivoXML = "D:\testenfe\20100222T222310-ped-sta.xml"
ValidarXMLDFE(arquivoXML, schema, targetNS)

//-----------------------------------------------------
//Validar XML de CTe
//-----------------------------------------------------
schema = "CTe.cte_v4.00.xsd"
arquivoXML = "D:\testenfe\41201280568835000181570010000004881704185136-cte.xml"
targetNS = "http://www.portalfiscal.inf.br/cte"
ValidarXMLDFE(arquivoXML, schema, targetNS)

//-----------------------------------------------------
//Validar XML do ProcCTe
//-----------------------------------------------------
schema = "CTe.procCTe_v4.00.xsd"
arquivoXML = "D:\testenfe\41201280568835000181570010000004881704185136-procCTe.xml"
targetNS = "http://www.portalfiscal.inf.br/mdfe"
ValidarXMLDFE(arquivoXML, schema, targetNS)

//-----------------------------------------------------
//Validar XML de consulta status da CTe
//-----------------------------------------------------
schema = "CTe.consStatServCTe_v4.00.xsd"
arquivoXML = "D:\testenfe\20230515T164812-ped-sta.xml"
targetNS = "http://www.portalfiscal.inf.br/cte"
ValidarXMLDFE(arquivoXML, schema, targetNS)

//-----------------------------------------------------
//Validar XML do MDFe
//-----------------------------------------------------
schema = "MDFe.mdfe_v3.00.xsd"
arquivoXML = "D:\testenfe\41240306117473000150580010000008611017220672-mdfe.xml"
targetNS = "http://www.portalfiscal.inf.br/mdfe"
ValidarXMLDFE(arquivoXML, schema, targetNS)

//-----------------------------------------------------
//Validar XML do ProcMDFe
//-----------------------------------------------------
schema = "MDFe.procMDFe_v3.00.xsd"
arquivoXML = "D:\testenfe\41201280568835000181580010000010401406004659-procMDFe.xml"
targetNS = "http://www.portalfiscal.inf.br/mdfe"
ValidarXMLDFE(arquivoXML, schema, targetNS)

//-----------------------------------------------------
//Validar XML de consulta status da MDFe
//-----------------------------------------------------
schema = "MDFe.consStatServMDFe_v3.00.xsd"
arquivoXML = "D:\testenfe\20170210T100210-ped-sta.xml"
targetNS = "http://www.portalfiscal.inf.br/mdfe"
ValidarXMLDFE(arquivoXML, schema, targetNS)
DO
EDT_RetornoWSString += "Exceção: " + CR + errFullDetails
END

PROCEDURE PRIVATE ValidarXMLDFE(arquivoXML, schema, targetNS)

// Instanciar o objeto de validação do esquema
oValidarSchema is Unimake.Business.DFe.ValidarSchema()

// Validar o XML
oValidarSchema.Validar(arquivoXML, schema, targetNS)

// Atualizar a string de retorno com o resultado da validação
EDT_RetornoWSString += "Arquivo: " + CR + arquivoXML + CR + CR

IF NOT oValidarSchema.Success
EDT_RetornoWSString += "Status validação: " + CR + "Ocorreu erro da validação" + CR + CR
EDT_RetornoWSString += "Errorcode: " + CR + oValidarSchema.ErrorCode + CR + CR + "Message: " + CR + oValidarSchema.ErrorMessage + CR + CR
ELSE
EDT_RetornoWSString += "Status validação: " + CR + "XML validado com sucesso." + CR + CR
END

RETURN
```

O que fazer quando não é possível obter o retorno após o envio de uma NFe, NFCe, CTe, MDFe, etc.

Utilizei o código do envio de NFe Síncrono, que criamos em um episódio anterior do Wandrey Descomplica, e adaptei a consulta situação da NFe para finalizar a nota em caso de problemas, mas é fundamental que você veja o vídeo informado no final desta publicação para ter uma compreensão mais ampla da ideia, pois no código a seguir tem somente a parte da consulta situação e lá você verá o todo, com detalhes.

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

//Criar tag ConsSitNFe
oConsSitNFe is Unimake.Business.DFe.XML.NFe.ConsSitNFe
oConsSitNFe.Versao = "4.00"
oConsSitNFe.TpAmb = TipoAmbiente.Homologacao
oConsSitNFe.ChNFe = chaveNFe

//Consumir o serviço
oConsultaProtocolo is Unimake.Business.DFe.Servicos.NFe.ConsultaProtocolo()
oConsultaProtocolo.Executar(oConsSitNFe, oConfConsSitNFe)

IF oConsultaProtocolo.Result.CStat = 100 //Nota autorizada
oAutorizacao.AddRetConsSitNFes(oConsultaProtocolo.Result)

//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
ELSE
//Alguma rejeição, fazer tratamentos
EDT_RetornoWSString += "Rejeição consulta protocolo:" + CR + CR
EDT_RetornoWSString += oConsultaProtocolo.Result.CStat + CR
EDT_RetornoWSString += oConsultaProtocolo.Result.XMotivo + CR + CR
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=P37tVnal2kQ
Illustrations, screen shots
none
none
User reviews
(To evaluate this resource, click 'Write a review')
No review or comment? Be the first one!