Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Error 1943
Message
From
25/07/2022 19:21:43
Luis Santos
Biglevel-Soluções Informáticas, Lda
Portugal
 
 
To
All
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Title:
Error 1943
Miscellaneous
Thread ID:
01684725
Message ID:
01684725
Views:
83
Hello comunity,

I write this coding to read XML file and import the results of my 2 cursors (mbocursor) from document Order Header and (mbocursor) and (mbicursor) for my Order lines, but my code return this error :

Código do erro: 1943
Mensagem 1: Member CHILDNODES does not evaluate to an object.
Linha: 86

Please someone could help me!?

Best regards,
Luis
*!*Ver PDF e Explicação


Local Array MyFiles[1,5]

nFilesFound = Adir( MyFiles, "D:\Trabalho_Clientes\Caimaplas\DELFOR\*.xml" )

If Empty(nFilesFound)
	MSG("Não existem encomendas a importar")
	Return .F.
Else
	For i = 1 To nFilesFound

		** Criar Dossiers Programaticamente
		fecha("mbocursor")
		fecha("mbo2cursor")
		fecha("mbicursor")

		* usar tabelas de dossiers
		Do dbfusebi
		Do dbfuseboall

		* Utilizar a configuração do tipo de dossier nº1
		Do tsread With "",1

		* criar os cursores mbocursor, mbo2cursor, mbicursor e mbicursor2 vazios
		Create Cursor mbocursor (no N(10), estab N(3), memissao c(10),dataobra d(8),dataopen d(8),datafinal d(10),boano N(4),marca c(20),serie c(20),maquina c(20),obrano N(10),obranome c(30),Nome c(60),morada c(60),Local c(60),codpost c(60),ncont c(60))

		u_sqlexec([select * from bo2 (nolock) where 1=0],[mbo2cursor])
		**u_sqlexec([select * from bo3 (nolock) where 1=0],[mbo3cursor])
		u_sqlexec([select * from bi (nolock) where 1=0],[mbicursor])
		**u_sqlexec([select * from bi2 (nolock) where 1=0],[mbicursor2])

		* limpar os cursores
		Select mbocursor
		Delete For .T.
		Select mbo2cursor
		Delete For .T.
		Select mbicursor
		Delete For .T.
		**Select mbicursor2
		**Delete For .T.

		**Inicialização de variáveis locais que irão ser utilizadas mais à frente no código
		Local SFILE As String, SDATAXML As String, SSEL As String

		**M.sfile é a variável que vai guardar o nome do ficheiro XML a importar. Além do nome também guarda o caminho (path) para o ficheiro.
		m.SFILE = "D:\Trabalho_Clientes\Caimaplas\DELFOR\"+MyFiles[i,1]

		If Empty(M.SFILE)
			Return .F.
		Else
			**Verifica se o ficheiro é do tipo XML
			If .Not. ".XML"$Alltrim(Upper(M.SFILE))
				MSG("Tipo de ficheiro inválido!")
				Return .F.
			Else
				**A função Type avalia uma expressão do tipo caracter e retorna o tipo de dados da expressão, e para além disso verificamos aqui se o ficheiro existe ou não
				If Type("m.sFile")<>"C" .Or. .Not. File(M.SFILE)
					MSG("Ficheiro Não Encontrado!")
					Return .F.
				Endif
			Endif
		Endif

		**A variável M.sdataxml vai conter o resultado da função Filetostr, esta retorna o conteúdo de um ficheiro como sendo uma string, para ser utilizada em xbase.
		m.SDATAXML = Filetostr(M.SFILE)

		**Inicialização da variável local que irá conter o XML
		Local oXMLDocument As MSXML2.DOMDocument
		**Inicialização da variável local que irá conter a lista de Transacções
		Local ONODELIST As MSXML2.IXMLDOMNodeList

		** Criar o objecto e atribui-lhe o XML
		m.oXMLDocument = Createobject("msxml2.domdocument.4.0")
		m.oXMLDocument.Load(M.SFILE)
		m.oXMLDocument.Async = .F.
		m.oXMLDocument.VALIDATEONPARSE = .F.
		m.oXMLDocument.PreserveWhiteSpace = .F.

		** Define a root do XML (nó principal)
		m.OROOT = M.oXMLDocument.DOCUMENTELEMENT

		** Lê a tag OrderDate
		m.dataobra = M.OROOT.CHILDNODES(1).CHILDNODES(0).Text
		m.dataobra = Ctod(Substr(m.dataobra,7,2)+'.'+Substr(m.dataobra,5,2)+'.'+Substr(m.dataobra,1,4))

		** Lê a tag RequestedDeliveryDate
		m.dataopen = M.OROOT.CHILDNODES(1).CHILDNODES(2).Text
		m.dataopen = Ctod(Substr(m.dataopen,7,2)+'.'+Substr(m.dataopen,5,2)+'.'+Substr(m.dataopen,1,4))

		** Lê a tag RequestedDeliveryDueDate
		m.datafinal = M.OROOT.CHILDNODES(1).CHILDNODES(3).Text
		m.datafinal = Ctod(Substr(m.datafinal,7,2)+'.'+Substr(m.datafinal,5,2)+'.'+Substr(m.datafinal,1,4))

		m.boano=Year(Date())

		** Lê a lista de OrderReferences
		m.ONODELIST = M.OROOT.CHILDNODES()
		** Percorre a lista de OrderReferences
		For Each ONODE As 'MSXML2.IXMLDOMNode' In M.ONODELIST
			If ONODE.NODENAME="OrderReferences"
				Do Case
					Case ONODE.CHILDNODES(0).Attributes.Item(2).Text=="CDU_ECI_Sucursal"
						m.marca=ONODE.CHILDNODES(0).Text

					Case ONODE.CHILDNODES(0).Attributes.Item(2).Text=="CDU_ECI_Departamento"
						m.maquina=ONODE.CHILDNODES(0).Text

				Endcase
			Endif
		Endfor

		** Lê a lista de OrderIdentities
		m.ONODELIST = M.OROOT.CHILDNODES()
		** Percorre a lista de OrderIdentities
		For Each ONODE As 'MSXML2.IXMLDOMNode' In M.ONODELIST
			If ONODE.NODENAME="OrderIdentities"
				Do Case
					Case ONODE.CHILDNODES(0).CHILDNODES(0).Attributes.Item(0).Text=="Comprador"
						m.serie=ONODE.CHILDNODES(0).CHILDNODES(0).Text

						** Nº do Cliente
					Case ONODE.CHILDNODES(0).CHILDNODES(0).Attributes.Item(0).Text=="Facturacao"
						m.eancl=ONODE.CHILDNODES(0).CHILDNODES(0).Text
						TEXT to m.cSel noshow textmerge
                             select cl.no,nome,morada,local,codpost,pncont,ncont from cl where cl.eancl='<>' and cl.estab=0
						ENDTEXT

						If u_sqlexec(m.cSel,"cliente")
							If Reccount("cliente")>0
								Select cliente
								m.no=cliente.no
								m.nome=cliente.Nome
								m.morada=cliente.morada
								m.local=cliente.Local
								m.codpost=cliente.codpost
								m.codpais=cliente.pncont
								m.ncont=cliente.ncont
							Endif
						Endif

						** Descrição do País
						TEXT to m.cSel noshow textmerge
                             select paises.nome from paises where paises.nomeabrv='<>'
						ENDTEXT

						If u_sqlexec(m.cSel,"paisestmp")
							If Reccount("paisestmp")>0
								Select paisestmp
								m.nomepais=paisestmp.Nome
							Endif
						Endif

						** Local Entrega
					Case ONODE.CHILDNODES(0).CHILDNODES(0).Attributes.Item(0).Text=="LocalEntrega"
						m.glncl=ONODE.CHILDNODES(0).CHILDNODES(0).Text

						TEXT to m.cSel noshow textmerge
                             select SZADRSDESC from szadrs where szadrs.u_glncl='<>'
						ENDTEXT

						If u_sqlexec(m.cSel,"temp") And Reccount("temp")>0
							Select temp
							m.szadrsdesc=temp.szadrsdesc
						Endif

				Endcase
			Endif
		Endfor

		TEXT to m.cSel noshow textmerge
             select isnull(max(bo.obrano),0) as obrano from bo where bo.ndos=1 and bo.boano=year(getdate())
		ENDTEXT

		If u_sqlexec(m.cSel,"dossier") And Reccount("dossier")>0
			Select dossier
			m.obrano=dossier.obrano+1
		Endif

		** Lê a tag MsgNumber
		m.obranome = M.OROOT.CHILDNODES(0).CHILDNODES(1).Text

		** Nº Interno do Dossier
		m.ndos=1

		** Percorre a lista de OrderItems
		For Each ONODE As 'MSXML2.IXMLDOMNode' In M.ONODELIST
			If ONODE.NODENAME="OrderItem"
				m.ref=''
				Select mbicursor
				Append Blank
				Do Case
					Case ONODE.CHILDNODES(0).CHILDNODES(1).NODENAME=="ItemNumber"
						m.codigo=ONODE.CHILDNODES(0).CHILDNODES(1).Text
						m.design=ONODE.CHILDNODES(0).CHILDNODES(3).Text
						m.qtt=Val(ONODE.CHILDNODES(0).CHILDNODES(4).Text)
						m.edebito=Val(ONODE.CHILDNODES(0).CHILDNODES(6).Text)

						Replace mbicursor.ref With m.ref
						Replace mbicursor.Design With m.design
						If Substr(m.codigo,1,1)='0'
							Replace mbicursor.codigo With Substr(m.codigo,2,Len(m.codigo)-1)
						Else
							Replace mbicursor.codigo With m.codigo
						Endif
						Replace mbicursor.qtt With m.qtt
						Replace mbicursor.edebito With m.edebito
						Replace mbicursor.debito With m.edebito*200.482
						Replace mbicursor.ettdeb With m.edebito*m.qtt
						Replace mbicursor.ttdeb With m.edebito*m.qtt*200.482
						Replace mbicursor.stipo With 4
						Replace mbicursor.armazem With 1

						TEXT to m.cSel noshow textmerge
                          select st.ref from st where st.codigo=(case when substring('<>',1,1)='0' then substring('<>',2,LEN('<>')-1) else '<>' end)
						ENDTEXT

						If u_sqlexec(m.cSel,"artigo") And Reccount("artigo")>0
							Select artigo
							m.ref=artigo.ref
							Replace mbicursor.ref With m.ref
						Endif

						TEXT to m.cSel noshow textmerge
                            select st.ref,st.tabiva,(select taxa from taxasiva where taxasiva.codigo=st.tabiva) iva from st where st.ref='<>'
						ENDTEXT

						If u_sqlexec(m.cSel,"artigos") And Reccount("artigos")>0
							Select artigos
							Replace mbicursor.tabiva With artigos.tabiva
						Endif

						If Empty(m.ref)
							Select mbicursor
							Replace mbicursor.tabiva With 2
						Endif

						Do u_bottdeb With 'mbicursor'

				Endcase
			Endif
		Endfor

		* preencher alguns campos do cabeçalho (mbocursor)
		Select mbocursor
		Append Blank
		Replace mbocursor.no With m.no
		Replace mbocursor.estab With 0
		Replace mbocursor.memissao With 'EURO'
		Replace mbocursor.dataobra With m.dataobra
		Replace mbocursor.dataopen With m.dataopen
		Replace mbocursor.datafinal With m.datafinal
		Replace mbocursor.boano With m.boano
		Replace mbocursor.marca With m.marca
		Replace mbocursor.serie With m.serie
		Replace mbocursor.maquina With m.maquina
		Replace mbocursor.obrano With m.obrano
		Replace mbocursor.obranome With m.obranome
		Replace mbocursor.Nome With m.nome
		Replace mbocursor.morada With m.morada
		Replace mbocursor.Local With m.local
		Replace mbocursor.codpost With m.codpost
		Replace mbocursor.ncont With m.ncont

		Select mbo2cursor
		Append Blank
		Replace mbo2cursor.descar With m.szadrsdesc

		**Esta função manda uma mensagem ao utilizador enquanto é executada a importação das encomendas
		Do ACTFORM With "Estou a importar a encomenda Nº "+m.obranome+" de "+m.nome

		If Not criabobi(38,'mbicursor','mbocursor','mbo2cursor',.F.,.F.,,.F.)
			mensagem('Erro a gravar dossier','DIRECTA')
			Return
		Endif

		Set Path To "D:\Trabalho_Clientes\Caimaplas\DELFOR\"
		Rename MyFiles[i,1] To "D:\Trabalho_Clientes\Caimaplas\DELFOR\"+MyFiles[i,1]+".lido"

	Endfor

	DEACTFORM()
	MSG("Importação de encomendas terminado com sucesso.")

	sbo.Refresh
Endif
Next
Reply
Map
View

Click here to load this message in the networking platform