Função que retorna o xml de uma nota em AdvPL

Função que retorna o xml de uma nota em AdvPL

Olá pessoal…

Hoje vou mostrar uma função que desenvolvi, que retorna o xml de uma nota transmitida ou cancelada via AdvPL.

AdvPL
AdvPL

A função utiliza recursos do TSS para carregar e criar o arquivo xml, é necessário apenas informar, o número da nota, a série, e o caminho para geração do arquivo xml.

Abaixo a função desenvolvida:

//Bibliotecas
#Include "Protheus.ch"

/*/{Protheus.doc} zSpedXML
Função que gera o arquivo xml da nota (normal ou cancelada) através do documento e da série disponibilizados
@author Atilio
@since 25/07/2017
@version 1.0
@param cDocumento, characters, Código do documento (F2_DOC)
@param cSerie, characters, Série do documento (F2_SERIE)
@param cArqXML, characters, Caminho do arquivo que será gerado (por exemplo, C:\TOTVS\arquivo.xml)
@param lMostra, logical, Se será mostrado mensagens com os dados (erros ou a mensagem com o xml na tela)
@type function
@example Segue exemplo abaixo
	u_zSpedXML("000000001", "1", "C:\TOTVS\arquivo1.xml", .F.) //Não mostra mensagem com o XML
	
	u_zSpedXML("000000001", "1", "C:\TOTVS\arquivo2.xml", .T.) //Mostra mensagem com o XML
/*/

User Function zSpedXML(cDocumento, cSerie, cArqXML, lMostra)
	Local aArea        := GetArea()
	Local cURLTss      := PadR(GetNewPar("MV_SPEDURL","http://"),250)  
	Local oWebServ
	Local cIdEnt       := StaticCall(SPEDNFE, GetIdEnt)
	Local cTextoXML    := ""
	Default cDocumento := ""
	Default cSerie     := ""
	Default cArqXML    := GetTempPath()+"arquivo_"+cSerie+cDocumento+".xml"
	Default lMostra    := .F.
	
	//Se tiver documento
	If !Empty(cDocumento)
		cDocumento := PadR(cDocumento, TamSX3('F2_DOC')[1])
		cSerie     := PadR(cSerie,     TamSX3('F2_SERIE')[1])
		
		//Instancia a conexão com o WebService do TSS	
		oWebServ:= WSNFeSBRA():New()
		oWebServ:cUSERTOKEN        := "TOTVS"
		oWebServ:cID_ENT           := cIdEnt
		oWebServ:oWSNFEID          := NFESBRA_NFES2():New()
		oWebServ:oWSNFEID:oWSNotas := NFESBRA_ARRAYOFNFESID2():New()
		aAdd(oWebServ:oWSNFEID:oWSNotas:oWSNFESID2,NFESBRA_NFESID2():New())
		aTail(oWebServ:oWSNFEID:oWSNotas:oWSNFESID2):cID := (cSerie+cDocumento)
		oWebServ:nDIASPARAEXCLUSAO := 0
		oWebServ:_URL              := AllTrim(cURLTss)+"/NFeSBRA.apw"	
		
		//Se tiver notas
		If oWebServ:RetornaNotas()
		
			//Se tiver dados
			If Len(oWebServ:oWsRetornaNotasResult:OWSNOTAS:oWSNFES3) > 0
			
				//Se tiver sido cancelada
				If oWebServ:oWsRetornaNotasResult:OWSNOTAS:oWSNFES3[1]:oWSNFECANCELADA != Nil
					cTextoXML := oWebServ:oWsRetornaNotasResult:OWSNOTAS:oWSNFES3[1]:oWSNFECANCELADA:cXML
					
				//Senão, pega o xml normal
				Else
					cTextoXML := oWebServ:oWsRetornaNotasResult:OWSNOTAS:oWSNFES3[1]:oWSNFE:cXML
				EndIf
				
				//Gera o arquivo
				MemoWrite(cArqXML, cTextoXML)
				
				//Se for para mostrar, será mostrado um aviso com o conteúdo
				If lMostra
					Aviso("zSpedXML", cTextoXML, {"Ok"}, 3)
				EndIf
				
			//Caso não encontre as notas, mostra mensagem
			Else
				ConOut("zSpedXML > Verificar parâmetros, documento e série não encontrados ("+cDocumento+"/"+cSerie+")...")
				
				If lMostra
					Aviso("zSpedXML", "Verificar parâmetros, documento e série não encontrados ("+cDocumento+"/"+cSerie+")...", {"Ok"}, 3)
				EndIf
			EndIf
		
		//Senão, houve erros na classe
		Else
			ConOut("zSpedXML > "+IIf(Empty(GetWscError(3)), GetWscError(1), GetWscError(3))+"...")
			
			If lMostra
				Aviso("zSpedXML", IIf(Empty(GetWscError(3)), GetWscError(1), GetWscError(3)), {"Ok"}, 3)
			EndIf
		EndIf
	EndIf
	RestArea(aArea)
Return

Esses e outros códigos, estão disponíveis gratuitamente no nosso GitHub, acesse em github.com/dan-atilio/AdvPL.

Bom pessoal, por hoje é só.
Abraços e até a próxima.

About Dan_Atilio

Analista e desenvolvedor de sistemas. Técnico em Informática pelo CTI da Unesp. Graduado em Banco de Dados pela Fatec Bauru. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor do projeto Terminal de Informação, onde são postados tutoriais e notícias envolvendo o mundo da tecnologia.

Deixe uma resposta

%d blogueiros gostam disto: