Implementare la fattura PA nel gestionale

846 views
Skip to first unread message

Stefania Basilico

unread,
Mar 16, 2015, 8:48:24 AM3/16/15
to foxpro...@googlegroups.com
Ciao a tutti sono una sviluppatrice foxpro 2.6 e di recente ho trasportato tutto in visual foxpro 9.0
Devo implementare la fattura PA nel mio software ma non so da dove cominciare

Stefania Basilico

unread,
Mar 16, 2015, 10:36:31 AM3/16/15
to foxpro...@googlegroups.com
o meglio ho già studiato tuttala problematica, ed ho già tutti i dati che servono per fattura PA.
solo cho ho due file uno di testa fattura e un'altro contenente le righe in relazione fra di loro.
a questo punto non so come fare per creare il file xml ovviamente con nella versione ultima 1.1 delle richieste per la PA

matteo db

unread,
Mar 17, 2015, 1:32:00 PM3/17/15
to foxpro...@googlegroups.com
Ciao Stefania,
ho posto la stessa domanda un pò di tempo fà alla 
quale mi ha risposto esaurientemente sia Salvatore Graf che Gianni Turri.
Una decina di domande prima della tua e trovi il mio post con tutto quanto ti può servire.
Ciao


Il giorno lunedì 16 marzo 2015 13:48:24 UTC+1, Stefania Basilico ha scritto:

Salvatore Graf

unread,
Mar 18, 2015, 4:25:30 AM3/18/15
to foxpro...@googlegroups.com
Ho avuto lo stresso tuo problema e la soluzione che ho adottato è stata questa:

Select sulle 2 tabelle interessate per ottenere una tabella unica tipo:

1^ riga testa fattura con un campo di riferimento tipo “01"
2^ -> n^  righe dettaglio con un campo di riferimento tipo “02” 



In un ciclo elabori solo le righe di tipo “01” per definire le informazioni di testa e quelli con “02” per i dettagli
Di seguito il codice che ho utilizzato per creare il file XML  


#Define cInvio Chr(13)+Chr(10)
#Define cTab   Chr(9)
Lparameters nrecord
Local oXml As "MSXML2.DOMDocument.6.0", nodo As Number, root, oAttributo As Object, Node_FatturaElettronicaHeader As Number, Node_DatiTrasmissione As NumberBoolean
Local Node_IdTrasmittente As Number, element, Node_CedentePrestatore As Number, Node_DatiAnagrafici As Number, Node_IdFiscaleIVA As Number, Node_Anagrafica As Number
Local Node_Sede As Number, Node_Rea As Number, Node_Contatti As Number, Node_CessionarioCommittente As Number, Node_FatturaElettronicaBody As Number
Local Node_DatiGenerali As Number, Node_DatiGeneraliDoc As Number, Node_DatiContratto As Number, Node_BeniServizi As Number, cOldSetMemowidth As String
Local cNumero As String, nRiga As Number, Node_DettaglioLinee As Number, nAliquota As Number, cRegime As String, Node_DatiRiepilogo As Number, cCampoDatsca As String
Local cCampoImpsca As String, Node_DatiPagamento As Number, Node_DettaglioPagamento As Number, cDataRif As String, dData As Date, oChildLast As Object, validatexml, cStringaXml As String

Select Report
Go nrecord
Try
oXml = Createobject("MSXML2.DOMDocument.6.0")
Catch To oErr
If oErr.ErrorNo <> 0
msg(oErr.Message, 16, "Avviso")
Endif
Endtry
If Vartype(oErr) = "O"
msg("MSXML non presente nel sistema!" + Chr(13) + ;
"Contattare l'assistenza.", 48, "Avviso")
Thisform.pagine.page1.attesa.Visible = .F.
Return
Endif

oXml.Async = .F.
oXml.validateOnParse = .F.
oXml.resolveexternals = .F.
oXml.PreserveWhiteSpace = .T.

Wait Window "Generalzione XML per documento N. "+Report.numero+" del "+Dtoc(Report.Data)+" in corso ... " Nowait


* Modifiche..: Salvatore, il 10 February 2015 / 11:59:15 ********************************************************************************* 
**** INTESTAZIONE ****
nodo = oXml.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'")
oXml.appendChild(nodo)

nodo = oXml.createProcessingInstruction("xml-stylesheet", "type='text/xsl' href='fatturapa_v1.1.xsl'")
oXml.appendChild(nodo)
**** ELABORAZIONE ROOT
root = oXml.createElement("p:FatturaElettronica")
oAttributo = oXml.createAttribute("versione")
oAttributo.Value = "1.1"

root.setAttributeNode(oAttributo)


oAttributo = oXml.createAttribute("xmlns:ds")
root.setAttributeNode(oAttributo)


oAttributo = oXml.createAttribute("xmlns:p")
root.setAttributeNode(oAttributo)


oAttributo = oXml.createAttribute("xmlns:xsi")
root.setAttributeNode(oAttributo)


oXml.appendChild(root)

**** FINE ELABORAZIONE ROOT
root.appendChild(oXml.createTextNode(cInvio))
root.appendChild(oXml.createTextNode(Replicate(cTab,1)))

**** ELABORAZIONE Header
Node_FatturaElettronicaHeader = oXml.createElement("FatturaElettronicaHeader")
Node_FatturaElettronicaHeader.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,2)))
**** DATI TRASMISSIONE
Node_DatiTrasmissione = oXml.createElement("DatiTrasmissione")
Node_DatiTrasmissione.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))
**** IDTrasmittente
Node_IdTrasmittente = oXml.createElement("IdTrasmittente")
Node_IdTrasmittente.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("IdPaese")
element.Text = Report.idpaeseaz
Node_IdTrasmittente.appendChild(element)
Node_IdTrasmittente.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("IdCodice")
element.Text = Alltrim(Report.cfaz)
Node_IdTrasmittente.appendChild(element)
Node_IdTrasmittente.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))

Node_DatiTrasmissione.appendChild(Node_IdTrasmittente)
Node_DatiTrasmissione.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))
**** FINE **** IDTrasmittente

element = oXml.createElement("ProgressivoInvio")
element.Text = Padl(Report.inviopa,5,"0")
Node_DatiTrasmissione.appendChild(element)
Node_DatiTrasmissione.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))

element = oXml.createElement("FormatoTrasmissione")
element.Text = "SDI11"
Node_DatiTrasmissione.appendChild(element)
Node_DatiTrasmissione.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))

element = oXml.createElement("CodiceDestinatario")
element.Text = Report.codiceipa
Node_DatiTrasmissione.appendChild(element)
Node_DatiTrasmissione.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))

element = oXml.createElement("ContattiTrasmittente")
Node_DatiTrasmissione.appendChild(element)
Node_DatiTrasmissione.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,2)))  &&Ultimo dato NODO

Node_FatturaElettronicaHeader.appendChild(Node_DatiTrasmissione)
Node_FatturaElettronicaHeader.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,2)))


**** CEDENTE PRESTATORE
Node_CedentePrestatore = oXml.createElement("CedentePrestatore")
Node_CedentePrestatore.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))

**** DATI ANAGRAFICI
Node_DatiAnagrafici = oXml.createElement("DatiAnagrafici")
Node_DatiAnagrafici.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

**** ID FISCALE IVA
Node_IdFiscaleIVA = oXml.createElement("IdFiscaleIVA")
Node_IdFiscaleIVA.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,5)))

element = oXml.createElement("IdPaese")
element.Text = Report.idpaeseaz
Node_IdFiscaleIVA.appendChild(element)
Node_IdFiscaleIVA.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,5)))

element = oXml.createElement("IdCodice")
element.Text = Alltrim(Report.pivaaz)
Node_IdFiscaleIVA.appendChild(element)
Node_IdFiscaleIVA.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

Node_DatiAnagrafici.appendChild(Node_IdFiscaleIVA)
Node_DatiAnagrafici.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))
**** FINE ID FISCALE

element = oXml.createElement("CodiceFiscale")
element.Text = Alltrim(Report.cfaz)
Node_DatiAnagrafici.appendChild(element)
Node_DatiAnagrafici.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

**** ANAGRAFICA
Node_Anagrafica = oXml.createElement("Anagrafica")
Node_Anagrafica.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,5)))

element = oXml.createElement("Denominazione")
element.Text = Alltrim(aziendeutente.ragione)
Node_Anagrafica.appendChild(element)
Node_Anagrafica.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

Node_DatiAnagrafici.appendChild(Node_Anagrafica)
Node_DatiAnagrafici.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))
**** FINE ANAGRAFICA

element = oXml.createElement("RegimeFiscale")
element.Text = Alltrim(aziendeutente.codiceRF)


Node_DatiAnagrafici.appendChild(element)
Node_DatiAnagrafici.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))
*** FINE DATI ANAGRAFICI

Node_CedentePrestatore.appendChild(Node_DatiAnagrafici)
Node_CedentePrestatore.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))

**** SEDE
Node_Sede = oXml.createElement("Sede")
Node_Sede.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Indirizzo")
element.Text = Alltrim(aziendeutente.sede)
Node_Sede.appendChild(element)
Node_Sede.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("CAP")
element.Text = Alltrim(aziendeutente.cap)
Node_Sede.appendChild(element)
Node_Sede.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Comune")
element.Text = Alltrim(Report.comuneaz)
Node_Sede.appendChild(element)
Node_Sede.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Provincia")
element.Text = Alltrim(Upper(aziendeutente.pr))
Node_Sede.appendChild(element)
Node_Sede.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Nazione")
element.Text = Alltrim(Upper(Report.idpaeseaz))
Node_Sede.appendChild(element)
Node_Sede.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))
**** FINE SEDE

Node_CedentePrestatore.appendChild(Node_Sede)
Node_CedentePrestatore.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))

**** ISCRIZIONE REA
Node_Rea = oXml.createElement("IscrizioneREA")
Node_Rea.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Ufficio")
element.Text = Alltrim(aziendeutente.cciaapr)
Node_Rea.appendChild(element)
Node_Rea.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("NumeroREA")
element.Text = Alltrim(aziendeutente.cciaanr)
Node_Rea.appendChild(element)
Node_Rea.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("StatoLiquidazione")
element.Text = Iif(aziendeutente.codiceliq=1,"LS","LN")
Node_Rea.appendChild(element)
Node_Rea.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))
**** FINE ISCRIZIONE REA

Node_CedentePrestatore.appendChild(Node_Rea)
Node_CedentePrestatore.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))

**** CONTATTI
Node_Contatti = oXml.createElement("Contatti")
Node_Contatti.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Telefono")
element.Text = Alltrim(aziendeutente.telefono)
Node_Contatti.appendChild(element)
Node_Contatti.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Fax")
element.Text = Alltrim(aziendeutente.fax)
Node_Contatti.appendChild(element)
Node_Contatti.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Email")
element.Text = Alltrim(aziendeutente.email)
Node_Contatti.appendChild(element)
Node_Contatti.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))
**** FINE CONTATTI

Node_CedentePrestatore.appendChild(Node_Contatti)
Node_CedentePrestatore.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,2)))


Node_FatturaElettronicaHeader.appendChild(Node_CedentePrestatore)
Node_FatturaElettronicaHeader.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,2)))
**** FINE CEDENTE PRESTATORE


**** CESSIONARIO COMMITTENTE

Node_CessionarioCommittente = oXml.createElement("CessionarioCommittente")
Node_CessionarioCommittente.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))

**** DATI ANAGRAFICI
Node_DatiAnagrafici = oXml.createElement("DatiAnagrafici")
Node_DatiAnagrafici.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("CodiceFiscale")
element.Text = Alltrim(Report.cfcli)
Node_DatiAnagrafici.appendChild(element)
Node_DatiAnagrafici.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

**** ANAGRAFICA
Node_Anagrafica = oXml.createElement("Anagrafica")
Node_Anagrafica.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,5)))

element = oXml.createElement("Denominazione")
element.Text = Alltrim(Report.anagrcli)
Node_Anagrafica.appendChild(element)
Node_Anagrafica.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))
**** FINE ANAGRAFICA

Node_DatiAnagrafici.appendChild(Node_Anagrafica)
Node_DatiAnagrafici.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))
*** FINE DATI ANAGRAFICI

Node_CessionarioCommittente.appendChild(Node_DatiAnagrafici)
Node_CessionarioCommittente.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))

**** SEDE
Node_Sede = oXml.createElement("Sede")
Node_Sede.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Indirizzo")
element.Text = Alltrim(Report.indircli)
Node_Sede.appendChild(element)
Node_Sede.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("CAP")
element.Text = Alltrim(Report.capcli)
Node_Sede.appendChild(element)
Node_Sede.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Comune")
element.Text = Alltrim(Report.comunecli)
Node_Sede.appendChild(element)
Node_Sede.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Provincia")
element.Text = Alltrim(Upper(Report.prcli))
Node_Sede.appendChild(element)
Node_Sede.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Nazione")
element.Text = Alltrim(Upper(Report.nazcli))
Node_Sede.appendChild(element)
Node_Sede.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))
**** FINE SEDE

Node_CessionarioCommittente.appendChild(Node_Sede)
Node_CessionarioCommittente.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,2)))

Node_FatturaElettronicaHeader.appendChild(Node_CessionarioCommittente)
Node_FatturaElettronicaHeader.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,1)))
**** FINE HEADER
root.appendChild(Node_FatturaElettronicaHeader)
root.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,1)))

********** BODY
Node_FatturaElettronicaBody = oXml.createElement("FatturaElettronicaBody")
Node_FatturaElettronicaBody.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,2)))

**** DATI GENERALI
Node_DatiGenerali = oXml.createElement("DatiGenerali")
Node_DatiGenerali.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))

**** DATI GENERALI DOCUMENTO
Node_DatiGeneraliDoc = oXml.createElement("DatiGeneraliDocumento")
Node_DatiGeneraliDoc.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))
element = oXml.createElement("TipoDocumento")
element.Text = Iif(Report.totale>0,"TD01","TD04") && FAttura - Nota di Credito
Node_DatiGeneraliDoc.appendChild(element)
Node_DatiGeneraliDoc.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Divisa")
element.Text = aziendeutente.codiceval
Node_DatiGeneraliDoc.appendChild(element)
Node_DatiGeneraliDoc.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Data")
element.Text = Str(Year(Report.Data),4)+"-"+Padl(Month(Report.Data),2,"0")+"-"+Padl(Day(Report.Data),2,"0")
Node_DatiGeneraliDoc.appendChild(element)
Node_DatiGeneraliDoc.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Numero")
element.Text = Report.numero
Node_DatiGeneraliDoc.appendChild(element)
Node_DatiGeneraliDoc.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("ImportoTotaleDocumento")
element.Text = Strtran(Alltrim(Str(Abs(Report.totale),15,2)),",",".")
Node_DatiGeneraliDoc.appendChild(element)
Node_DatiGeneraliDoc.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Art73")
element.Text = "SI" &&Iif(Report.sospesa=1,"SI","NO")
Node_DatiGeneraliDoc.appendChild(element)
Node_DatiGeneraliDoc.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))
**** FINE DATI GENERALI DOCUMENTO

Node_DatiGenerali.appendChild(Node_DatiGeneraliDoc)
Node_DatiGenerali.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))


****DATI CONTRATTO
If !Empty(Report.contratto)
Node_DatiContratto = oXml.createElement("DatiContratto")
Node_DatiContratto.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("IdDocumento")
element.Text = Alltrim(Report.contratto)
Node_DatiContratto.appendChild(element)
Node_DatiContratto.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

If !Empty(Report.CUP)
element = oXml.createElement("CodiceCUP")
element.Text = Alltrim(Report.CUP)
Node_DatiContratto.appendChild(element)
Node_DatiContratto.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))
Endif

If !Empty(Report.CIG)
element = oXml.createElement("CodiceCIG")
element.Text = Alltrim(Report.CIG)
Node_DatiContratto.appendChild(element)
Node_DatiContratto.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))
Endif

**** FINE DATI CONTRATTO
Node_DatiGenerali.appendChild(Node_DatiContratto )
Node_DatiGenerali.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,2)))
Endif
**** FINE DATI GENERALI
Node_FatturaElettronicaBody.appendChild(Node_DatiGenerali)
Node_FatturaElettronicaBody.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,2)))


*** DATI BENI SERVIZI
Node_BeniServizi = oXml.createElement("DatiBeniServizi")
Node_BeniServizi.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))

*** DETTAGLIO LINEE
cOldSetMemowidth=Set("Memowidth")
Set Memowidth To 100

Select Report
cNumero = Report.numero
Skip && 1 Riga del dettaglio
nRiga = 1
Do While Report.numero=cNumero

Node_DettaglioLinee = oXml.createElement("DettaglioLinee")
Node_DettaglioLinee.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("NumeroLinea")
element.Text = Alltrim(Str(nRiga))
Node_DettaglioLinee.appendChild(element)
Node_DettaglioLinee.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Descrizione")
element.Text = left(alltrim(strtran(testo,chr(13)," ")),1000)   &&Mline(Alltrim(Report.testo),1)
Node_DettaglioLinee.appendChild(element)
Node_DettaglioLinee.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Quantita")
element.Text = Strtran(Alltrim(Str(Abs(Report.quantita),21,2)),",",".")
Node_DettaglioLinee.appendChild(element)
Node_DettaglioLinee.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

If !Empty(Alltrim(Report.um))
element = oXml.createElement("UnitaMisura")
element.Text = Alltr(Padr(Alltrim(Report.um),10," "))
Node_DettaglioLinee.appendChild(element)
Node_DettaglioLinee.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))
Endif

dData = Date(Report.annoi,Report.mesei,1)
element = oXml.createElement("DataInizioPeriodo")
element.Text = Str(Year(dData),4)+"-"+Padl(Month(dData),2,"0")+"-"+Padl(Day(dData),2,"0")
Node_DettaglioLinee.appendChild(element)
Node_DettaglioLinee.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

dData = Date(Report.annof,Report.mesef,1)
dData = Gomonth(dData,1)-1
element = oXml.createElement("DataFinePeriodo")
element.Text = Str(Year(dData),4)+"-"+Padl(Month(dData),2,"0")+"-"+Padl(Day(dData),2,"0")
Node_DettaglioLinee.appendChild(element)
Node_DettaglioLinee.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("PrezzoUnitario")
element.Text = Strtran(Alltrim(Str(Abs(Report.prezzo),21,4)),",",".")
Node_DettaglioLinee.appendChild(element)
Node_DettaglioLinee.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("PrezzoTotale")
element.Text = Strtran(Alltrim(Str(Abs(Report.importo),21,4)),",",".")
Node_DettaglioLinee.appendChild(element)
Node_DettaglioLinee.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

nAliquota = Iif(Seek(Report.iva,"iva","codice"),iva.aliquota,0.0)
cRegime = Iif(Seek(Report.iva,"iva","codice"), Icase(iva.regime= 2 ,"N3" ,iva.regime = 3,"N4", iva.regime =4, "N1", iva.regime =5,"N2","  "),"  ")

Select Report
element = oXml.createElement("AliquotaIVA")
element.Text = Strtran(Alltrim(Str(nAliquota,21,2)),",",".")
Node_DettaglioLinee.appendChild(element)
Node_DettaglioLinee.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,Iif(nAliquota=0,4,3))))

If nAliquota=0
element = oXml.createElement("Natura")
element.Text = cRegime
Node_DettaglioLinee.appendChild(element)
Node_DettaglioLinee.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))
Endif


Node_BeniServizi.appendChild(Node_DettaglioLinee)
Node_BeniServizi.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))
nRiga = nRiga +1

Select Report
Skip
Enddo
**** FINE DETTAGLIO LINEE
Set Memowidth To cOldSetMemowidth
Select Report
Go nrecord
nProg = Report.Prog
**** DATI RIEPILOGO
*Graf* <AliquotaIVA>0.00</AliquotaIVA>
*Graf* <Natura>N1</Natura>
*Graf* <ImponibileImporto>3151.50</ImponibileImporto>
*Graf* <Imposta>0.00</Imposta>
*Graf* <EsigibilitaIVA>D</EsigibilitaIVA>
*Graf* <RiferimentoNormativo>normalizedString</RiferimentoNormativo>
Select iva,;
sum(importo) importo,;
000000000.00 As Imposta,;
iva.descrizion,;
iva.aliquota,;
icase(iva.regime= 2 ,"N3" ,iva.regime = 3,"N4", iva.regime =4, "N1", iva.regime =5,"N2","  ") regime;
from Report ;
left Join iva On iva.codice = Report.iva;
where riga # 1 And Report.Prog = nProg Group By iva Into Cursor riepilogo Readwrite

Replace Imposta With Round(riepilogo.importo*riepilogo.aliquota/100,nroundc) All

Select riepilogo
Calculate Cnt() To numeroRighe
m.nRiga = 1
Go Top
Do While !Eof()
Node_DatiRiepilogo = oXml.createElement("DatiRiepilogo")
Node_DatiRiepilogo .appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("AliquotaIVA")
element.Text = Strtran(Alltrim(Str(riepilogo.aliquota,21,2)),",",".")
Node_DatiRiepilogo .appendChild(element)
Node_DatiRiepilogo .appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

If riepilogo.aliquota = 0
element = oXml.createElement("Natura")
element.Text = riepilogo.regime
Node_DatiRiepilogo .appendChild(element)
Node_DatiRiepilogo .appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))
Endif

element = oXml.createElement("ImponibileImporto")
element.Text = Strtran(Alltrim(Str(Abs(riepilogo.importo),21,2)),",",".")
Node_DatiRiepilogo .appendChild(element)
Node_DatiRiepilogo .appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Imposta")
element.Text = Strtran(Alltrim(Str(Abs(riepilogo.Imposta),21,2)),",",".")
Node_DatiRiepilogo .appendChild(element)
Node_DatiRiepilogo .appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("EsigibilitaIVA")
element.Text =Iif(Report.sospesa<>3,"D","I")
Node_DatiRiepilogo .appendChild(element)
Node_DatiRiepilogo .appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))

If riepilogo.aliquota = 0
element = oXml.createElement("RiferimentoNormativo")
element.Text = Alltrim(Left(riepilogo.descrizion,100))
Node_DatiRiepilogo .appendChild(element)
Node_DatiRiepilogo .appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))
Endif

Node_BeniServizi.appendChild(Node_DatiRiepilogo )
Node_BeniServizi.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,Iif(numeroRighe=nRiga,2,3))))

m.nRiga = m.nRiga +1
Select riepilogo
Skip
Enddo
**** FINE DATI RIEPILOGO

Node_FatturaElettronicaBody.appendChild(Node_BeniServizi)
Node_FatturaElettronicaBody.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,2)))
**** FINE DATI BENI SERVIZI


*** DATI PAGAMENTO


Select pagamenti
Set Order To codice
Seek Report.pagamento
If Found()
Scatter To ArrayPag
Endif

Select Report
Go nrecord

*** Elaborazione delle date di scadenza previste (Max 6)
For i = 0 To 5  

cCampoDatsca="report.datsca"+Alltrim(Str(i+1))
cCampoImpsca="report.impsca"+Alltrim(Str(i+1))

If !Empty(&cCampoDatsca)
Node_DatiPagamento = oXml.createElement("DatiPagamento")
Node_DatiPagamento.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))

element = oXml.createElement("CondizioniPagamento")
element.Text = Iif(ArrayPag(6)=0,"TP02","TP01")  &&campo rata1
Node_DatiPagamento.appendChild(element)
Node_DatiPagamento.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))

Node_DettaglioPagamento = oXml.createElement("DettaglioPagamento")
Node_DettaglioPagamento.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("Beneficiario")
element.Text = Alltrim(aziendeutente.ragione)
Node_DettaglioPagamento.appendChild(element)
Node_DettaglioPagamento.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("ModalitaPagamento")
element.Text = Icase(ArrayPag(12)=1,"MP01",ArrayPag(12)=2,"MP12",ArrayPag(12)=3,"MP05","MP01")  &&campo mezzo
Node_DettaglioPagamento.appendChild(element)
Node_DettaglioPagamento.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

cDataRif = Str(Year(Report.Data),4)+"-"+Padl(Month(Report.Data),2,"0")+"-"+Padl(Day(Report.Data),2,"0")
If ArrayPag(13)=2 && FineMese
dData = fnc.finemese(Report.Data)
cDataRif = Str(Year(dData),4)+"-"+Padl(Month(dData),2,"0")+"-"+Padl(Day(dData),2,"0")
Endif

element = oXml.createElement("DataRiferimentoTerminiPagamento")
element.Text = cDataRif
Node_DettaglioPagamento.appendChild(element)
Node_DettaglioPagamento.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("GiorniTerminiPagamento")
element.Text = Alltrim(Str(ArrayPag(6+i)))
Node_DettaglioPagamento.appendChild(element)
Node_DettaglioPagamento.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("DataScadenzaPagamento")
element.Text = Str(Year(&cCampoDatsca),4)+"-"+Padl(Month(&cCampoDatsca),2,"0")+"-"+Padl(Day(&cCampoDatsca),2,"0")
Node_DettaglioPagamento.appendChild(element)
Node_DettaglioPagamento.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,4)))

element = oXml.createElement("ImportoPagamento")
element.Text = Strtran(Alltrim(Str(Abs(&cCampoImpsca),15,2)),",",".")
Node_DettaglioPagamento.appendChild(element)
Node_DettaglioPagamento.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,Iif(!Empty(Report.banca),4,3))))

If !Empty(Report.banca)
element = oXml.createElement("IBAN")
element.Text = Iif(Seek(Report.banca,"banche","codice"),banche.iban,"")
Node_DettaglioPagamento.appendChild(element)
Node_DettaglioPagamento.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,3)))
Endifa

Node_DatiPagamento.appendChild(Node_DettaglioPagamento)
Node_DatiPagamento.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,2)))


Node_FatturaElettronicaBody.appendChild(Node_DatiPagamento)

oChildLast = oXml.createTextNode(cInvio+Replicate(cTab,2))
Node_FatturaElettronicaBody.appendChild(oChildLast )
Endif
Endfor


Node_FatturaElettronicaBody.removeChild(oChildLast)
Node_FatturaElettronicaBody.appendChild(oXml.createTextNode(cInvio+Replicate(cTab,1)))
**** FINE BODY
root.appendChild(Node_FatturaElettronicaBody )

**** FINE ELABORAZIONE FILE

Select Report
Go nrecord
cFilexml= Addbs(Getenv("TEMP"))+Sys(2015)+".xml"

Wait Clear

oXml.Save(cFilexml)

validatexml = Thisform.validaxml(cFilexml,Addbs(HomeDir)+"fatturaPA\fatturapa_v1.1.xsd")

*** PRETTY FILE
cStringaXml = Filetostr(cFilexml)
cStringaXml = Strtran(cStringaXml, "><", ">" + cInvio + "<")
cFilexml = Report.idpaeseaz+Alltrim(Report.cfaz)+"_"+Padl(Report.inviopa,5,"0")+".xml"
cDocumento = Report.numero+" del "+Dtoc(Report.Data)

If validatexml#"OK"

msg("Il seguente file non è corretto:"+Chr(13)+;
cFilexml+Chr(13)+;
"************************************************************"+Chr(13)+;
validatexml +Chr(13)+;
"************************************************************"+Chr(13)+;
"Operazione interrotta!",64,"Avviso")
lerrore=.T.
Replace Report.inviopa With 0
Endif

If !lerrore
Thisform.SaveXml(cStringaXml,cFilexml,cDocumento)
Select registriutente
if !thisform.lTest
Tableupdate(.T.,.T.)
endif
Endif









--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Foxpro Italia" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a foxpro-itali...@googlegroups.com.
Per postare in questo gruppo, invia un'email a foxpro...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/foxpro-italia/7d91002f-69be-42fe-b3c4-1521c0472ea0%40googlegroups.com.
Per altre opzioni visita https://groups.google.com/d/optout.

Stefania Basilico

unread,
Mar 19, 2015, 10:41:42 AM3/19/15
to foxpro...@googlegroups.com
grazie mille la provo subito


Il giorno lunedì 16 marzo 2015 13:48:24 UTC+1, Stefania Basilico ha scritto:

Salvatore Graf

unread,
Mar 20, 2015, 1:50:17 PM3/20/15
to foxpro...@googlegroups.com
Se hai problemi fammi sapere.
Ciao
Salvatore

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Foxpro Italia" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a foxpro-itali...@googlegroups.com.
Per postare in questo gruppo, invia un'email a foxpro...@googlegroups.com.

Laldo Lorso

unread,
Sep 22, 2015, 4:36:03 AM9/22/15
to Foxpro Italia
Il giorno lunedì 16 marzo 2015 13:48:24 UTC+1, Stefania Basilico ha scritto:
> Ciao a tutti sono una sviluppatrice foxpro 2.6 e di recente ho trasportato tutto in visual foxpro 9.0
> Devo implementare la fattura PA nel mio software ma non so da dove cominciare

Buongiorno a tutti,
stavo cercando, e grazie ai post di Salvatore ci sono anche quasi riuscito ;-) di implementare nel nostro gestionale tutta la “questione PA”.
Il file Xml che creo però, mi passa la verifica nel link della PA http://sdi.fatturapa.gov.it/SdI2FatturaPAWeb/AccediAlServizioAction.do?pagina=controlla_fattura
mentre invece mi da errore se lo controllo attraverso le righe di codice che riporto sotto.
Premetto che non sono esperto di Xml-Xsd e quindi potrebbe trattarsi di errori “macroscopici” ;-) ma se qualcuno potesse aiutarmi… graziemille!!
Lorso

FUNCTION validate_xml
PARAMETERS file_xml,file_xsd

&& read schema
xsdObj = createObject('Msxml2.DOMDocument.6.0')
xsdObj.Async = .f.
xsdObj.ValidateOnParse = .t.

=m.xsdObj.Load(file_xsd)

schemaObj = createObject('Msxml2.XmlSchemaCache.6.0')
local nameSpace
nameSpace = "http://www.fatturapa.gov.it/sdi/fatturapa/v1.1"

=m.schemaObj.Add(m.namespace,m.xsdObj)

xmlObj = createObject('Msxml2.DOMDocument.6.0')
xmlObj.Async = .f.
xmlObj.ValidateOnParse = .t.

xmlObj.Schemas = m.schemaObj

=m.xmlObj.Load(m.file_xml)

local parseError
parseError = m.xmlObj.Validate()

*-- Verify if the document was sucefully loaded
LOCAL result As String,lcErrorMsg As String

IF parseError.errorCode = 0
MESSAGEBOX("Documento XML analizzato com successo!")
result = "OK"
ELSE
lcErrorMsg = "Non è possibile caricare il documento " + ;
"perchè non corrisponde alle regole prestabilite dallo schema!!" + CHR(10) + ;
"Linea: " + TRANSFORM(parseError.line) + CHR(10) + ;
"Posizione in linea: " + ;
TRANSFORM(parseError.linepos) + CHR(10) + ;
"Causa dell'errore: " + TRANSFORM(parseError.reason)
MESSAGEBOX(lcErrorMsg)
result = "KO"
ENDIF

RETURN result

Salvatore Graf

unread,
Sep 22, 2015, 10:14:50 AM9/22/15
to foxpro...@googlegroups.com
Questo codice funziona , verifica le differenze con il tuo e prova.
In rosso ho evidenziato quelle che a colpo d’occhio ho riscontrato.
Ciao
Salvatore



lparameters cXMLPath,cXSDPath
LOCAL oXSD, validatexml, sNamespace, objSchemas, oXml, oErr 
try
oXSD = createobject("MSXML2.DOMDocument.6.0")
catch to oErr
if oErr.errorno<> 0
messagebox(oErr.message,16,"Avviso")
endif
endtry
if vartype(oErr)="O"
validatexml = "ACTIVEX MSXML2.DOMDocument.6.0 non trovato!"
return validatexml
endif

oXSD.async = .f.

if !oXSD.load(cXSDPath)
validatexml = "Errore  - Impossibile caricare il file schema XSD ("+cXSDPath+")"
return validatexml 
else
sNamespace = oXSD.documentElement.getAttribute("targetNamespace")
endif


objSchemas = createobject("MSXML2.XMLSchemaCache.6.0")
objSchemas.add(sNamespace, cXSDPath)


oXml = createobject("MSXML2.DOMDocument.6.0")
oXml.async = .f.
oXml.validateOnParse = .f.
oXml.resolveexternals = .f.

if !oXml.load(cXMLPath)
validatexml = "Errore  - Impossibile caricare il file XML ("+cXMLPath+")"
return validatexml 
endif
oXml.schemas = objSchemas
oErr = oXml.validate()
if oErr.errorCode <> 0 then
validatexml = "Errore - " + oErr.reason + chr(13)
Else
validatexml ="OK"
endif
return validatexml




--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Foxpro Italia" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a foxpro-itali...@googlegroups.com.
Per postare messaggi in questo gruppo, invia un'email a foxpro...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/foxpro-italia/bd3f000b-5f47-40f4-90b7-3a966e6849e6%40googlegroups.com.
Per ulteriori opzioni, visita https://groups.google.com/d/optout.

Laldo Lorso

unread,
Sep 24, 2015, 9:44:01 AM9/24/15
to Foxpro Italia
Ciao Salvatore, innanzitutto grazie della disponibilità e scusa... ma ho potuto provare solo ora le tue preziose "dritte".
Purtroppo però mi esce un messaggio di errore;
"Durante il caricamento dello schema 'http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd' si è verificato il seguente errore: la DTD non è consentita".
In aggiunta a quanto già scritto e cioè che l'Xml passa il controllo dal sito PA (e che allego), volevo dirti che anche l'Xsd è stato logicamente scaricato dal sito PA (e allego anche questo)
Grazie ancora e buona giornata!!
Aldo
schema_fatturapa_v1.1.xsd
IT03663470247_00001.xml

Salvatore Graf

unread,
Sep 24, 2015, 10:52:13 AM9/24/15
to foxpro...@googlegroups.com
Ora che m i ricordo anche io ho avuto problemi con la validazione XML
Consultando un mio amico GURU dell’XML,  mi ha fatto modificare un valore nello schema XSD  ovvero:


Questa riga , la N. 3 
 
 <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd" />

modificata con questa:

  <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd" />

il problema è proprio quell’URL …
ovviamente il file  schema xmldsig-core-schema.xsd deve essere presente nella stessa cartella dello schema di validazione (schema_fatturapa_v1.1.xsd)

La validazione funziona correttamente in quanto la “pappa” è sempre quella … cambia solo il path del file "xmldsig-core-schema.xsd"

In allegato il file necessario:
xmldsig-core-schema.xsd

Laldo Lorso

unread,
Sep 24, 2015, 11:22:00 AM9/24/15
to Foxpro Italia
Grandissimo!!!
Funziona alla PERFEZIONE ;-))

Grazie ancora, a presto...
CiaoAldo
Message has been deleted

Mimmo

unread,
Aug 8, 2018, 7:32:01 AM8/8/18
to Foxpro Italia
Ciao Salvatore,
leggendo questo tuo codice, mi veniva un dubbio sull'oggetto "MSXML2.DOMDocument.6.0" utilizzato. Essendo questo un componente di Windows, visto che se non mi sbaglio VFP non lo integra, potrebbero esserci problemi utilizzando questo codice con versioni diverse di Windows?
Grazie.

Salvatore Graf

unread,
Aug 8, 2018, 11:11:32 AM8/8/18
to foxpro...@googlegroups.com
Hai ragione, infatti prima di procedere faccio una verifica:

Try
oXml = Createobject("MSXML2.DOMDocument.6.0")
Catch To oErr
If oErr.ErrorNo <> 0
Messagebox(oErr.Message, 16, "Avviso")

Endif
Endtry
If Vartype(oErr) = "O"
Messagebox("ACTIVEX MSXML non presente nel sistema!" + Chr(13) + ;

"Contattare l'assistenza.", 48, "Avviso")

Return
Endif




Ad ogni modo nella distribuzione del mio gestionale, provvedo all’installazione del Parser XML . (Dovrebbe essere questo : msxml6-KB927977-ita-x86.exe)

Ciao


***********************************
Salvatore Graf
Mobile: 335 83.82.797





Italwork S.r.l. 
Piazza Verbano, 22
00199 ROMA
Tel: 06 45.47.48.41 
Fax: 06 45.47.48.39


 Rispetta l'ambiente. Non stampare questa mail se non è necessario.
Decreto legislativo 30 giugno 2003, n. 196 - " Codice in materia di protezione dei dati personali "  Il presente messaggio, corredato dei relativi allegati, contiene informazioni da considerarsi strettamente riservate, ed è destinato esclusivamente al destinatario sopra indicato, il quale è l'unico autorizzato ad usarlo, copiarlo e, sotto la propria responsabilità, diffonderlo. Chiunque ricevesse questo messaggio per errore o comunque lo leggesse senza esserne legittimato è avvertito che trattenerlo, copiarlo, divulgarlo, distribuirlo a persone diverse dal destinatario è severamente proibito, ed è pregato di rinviarlo immediatamente al mittente distruggendone l'originale. Grazie

-- 
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Foxpro Italia" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a foxpro-itali...@googlegroups.com.
Per postare in questo gruppo, invia un'email a foxpro...@googlegroups.com.

Mimmo

unread,
Aug 10, 2018, 6:50:35 AM8/10/18
to Foxpro Italia
Salvatore, scusa la domanda banale,
ma il componente in questione lo usi solo per una corretta formattazione del file XML, e quindi se ne potrebbe fare a meno utilizzando delle semplici funzioni per i file di testo?
Oppure è consigliabile utilizzarlo per altri motivi?
Grazie,
Mimmo.

Salvatore Graf

unread,
Aug 10, 2018, 9:13:39 AM8/10/18
to foxpro...@googlegroups.com
Ciao Mimmo,
Il componente in questione serve per creare “facilmente” un file di tipo .XML
Per facilmente intendo la creazione degli attributi, dei tag (apertura e chiusura automatica), appendere un gruppo di elementi ad un tag padre  ma soprattuto per la validazione del file con il suo relativo .XSD

Il file .XML ovviamente si può “costruire” anche a “mano”  ma a mio avviso è un lavoraccio !
E poi … la validazione del file .XML come la faresti ?

Buone vacanze !

Salvatore

***********************************
Salvatore Graf
Mobile: 335 83.82.797





Italwork S.r.l. 
Piazza Verbano, 22
00199 ROMA
Tel: 06 45.47.48.41 
Fax: 06 45.47.48.39


 Rispetta l'ambiente. Non stampare questa mail se non è necessario.
Decreto legislativo 30 giugno 2003, n. 196 - " Codice in materia di protezione dei dati personali "  Il presente messaggio, corredato dei relativi allegati, contiene informazioni da considerarsi strettamente riservate, ed è destinato esclusivamente al destinatario sopra indicato, il quale è l'unico autorizzato ad usarlo, copiarlo e, sotto la propria responsabilità, diffonderlo. Chiunque ricevesse questo messaggio per errore o comunque lo leggesse senza esserne legittimato è avvertito che trattenerlo, copiarlo, divulgarlo, distribuirlo a persone diverse dal destinatario è severamente proibito, ed è pregato di rinviarlo immediatamente al mittente distruggendone l'originale. Grazie

Italwork S.r.l. 
Piazza Verbano, 22
00199 ROMA
Tel: 06 45.47.48.41 
Fax: 06 45.47.48.39
www.italwork.com
in...@italwork.com


 Rispetta l'ambiente. Non stampare questa mail se non è necessario.
Decreto legislativo 30 giugno 2003, n. 196 - " Codice in materia di protezione dei dati personali "  Il presente messaggio, corredato dei relativi allegati, contiene informazioni da considerarsi strettamente riservate, ed è destinato esclusivamente al destinatario sopra indicato, il quale è l'unico autorizzato ad usarlo, copiarlo e, sotto la propria responsabilità, diffonderlo. Chiunque ricevesse questo messaggio per errore o comunque lo leggesse senza esserne legittimato è avvertito che trattenerlo, copiarlo, divulgarlo, distribuirlo a persone diverse dal destinatario è severamente proibito, ed è pregato di rinviarlo immediatamente al mittente distruggendone l'originale. Grazie

Il giorno 08 ago 2018, alle ore 13:32, Mimmo <mimmom...@tiscali.it> ha scritto:

Ciao Salvatore,
leggendo questo tuo codice, mi veniva un dubbio sull'oggetto "MSXML2.DOMDocument.6.0" utilizzato. Essendo questo un componente di Windows, visto che se non mi sbaglio VFP non lo integra, potrebbero esserci problemi utilizzando questo codice con versioni diverse di Windows?
Grazie.

-- 
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Foxpro Italia" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a foxpro-itali...@googlegroups.com.
Per postare in questo gruppo, invia un'email a foxpro...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/foxpro-italia/a7059e24-a434-49eb-908c-d665efe9977a%40googlegroups.com.
Per altre opzioni visita https://groups.google.com/d/optout.


-- 
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Foxpro Italia" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a foxpro-itali...@googlegroups.com.
Per postare in questo gruppo, invia un'email a foxpro...@googlegroups.com.

Mimmo

unread,
Aug 12, 2018, 5:19:56 AM8/12/18
to Foxpro Italia
Grazie Salvatore, e buone vacanze! 

alessio pesce

unread,
Aug 12, 2018, 9:18:25 AM8/12/18
to foxpro...@googlegroups.com


Dove posso trovare una adeguata documentazione per l'uso  di "MSXML2.DOMDocument.6.0")?


   

Salvatore Graf

unread,
Aug 13, 2018, 5:06:55 AM8/13/18
to foxpro...@googlegroups.com
Ho cominciato da qui:


Tante altre cose le ho trovate googlando cercando esempi in altri linguaggi e adattandoli alle mie esigenze.

Ciao


***********************************
Salvatore Graf
Mobile: 335 83.82.797




Italwork S.r.l. 
Piazza Verbano, 22
00199 ROMA
Tel: 06 45.47.48.41 
Fax: 06 45.47.48.39


 Rispetta l'ambiente. Non stampare questa mail se non è necessario.
Decreto legislativo 30 giugno 2003, n. 196 - " Codice in materia di protezione dei dati personali "  Il presente messaggio, corredato dei relativi allegati, contiene informazioni da considerarsi strettamente riservate, ed è destinato esclusivamente al destinatario sopra indicato, il quale è l'unico autorizzato ad usarlo, copiarlo e, sotto la propria responsabilità, diffonderlo. Chiunque ricevesse questo messaggio per errore o comunque lo leggesse senza esserne legittimato è avvertito che trattenerlo, copiarlo, divulgarlo, distribuirlo a persone diverse dal destinatario è severamente proibito, ed è pregato di rinviarlo immediatamente al mittente distruggendone l'originale. Grazie
Il giorno 12 ago 2018, alle ore 15:18, alessio pesce <alessi...@gmail.com> ha scritto:



Dove posso trovare una adeguata documentazione per l'uso  di "MSXML2.DOMDocument.6.0")?


   

Il dom 12 ago 2018, 11:19 Mimmo <mimmom...@tiscali.it> ha scritto:
Grazie Salvatore, e buone vacanze! 

Il giorno venerdì 10 agosto 2018 15:13:39 UTC+2, .:: Salvatore Graf ::. ha scritto:
Ciao Mimmo,
Il componente in questione serve per creare “facilmente” un file di tipo .XML
Per facilmente intendo la creazione degli attributi, dei tag (apertura e chiusura automatica), appendere un gruppo di elementi ad un tag padre  ma soprattuto per la validazione del file con il suo relativo .XSD

Il file .XML ovviamente si può “costruire” anche a “mano”  ma a mio avviso è un lavoraccio !
E poi … la validazione del file .XML come la faresti ?

Buone vacanze !

Salvatore

***********************************
Salvatore Graf
Mobile: 335 83.82.797






invoice.so...@gmail.com

unread,
Aug 16, 2018, 3:02:19 AM8/16/18
to Foxpro Italia
Ciao amico,

I am developing a component to generate xml and sign,
and searching for a partner to make business over there.

Regards

fatturaitalia.com
> Italwork S.r.l. 
> Piazza Verbano, 22
> 00199 ROMA
> Tel: 06 45.47.48.41 
> Fax: 06 45.47.48.39
> www.italwork.com
> in...@italwork.com
>
>
>
Reply all
Reply to author
Forward
0 new messages