In un ciclo elabori solo le righe di tipo “01” per definire le informazioni di testa e quelli con “02” per i dettagli
#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")
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