Documento per specifiche su “xmltodoc.doc”.
Esportazione dal gestionale di dati destinati ad alimentare documenti di word (n.d.r. nel presente manuale verranno definiti modelli ma da un punto di vista formale sono a tutti gli effetti documenti .doc o .docx di word NON modelli .dot o .dotx) opportunamente trattati.
Il flusso di processo è il seguente:
▪un programma gestionale prepara i dati da mandare alla produzione del documento
esempi standard: cogv92m, cogo25m;
esempio con file di dati multipli: cogz82m che a sua volta chiama cogzs9
•chiama wordmdl con operazione APRI-XML e passandogli i parametri:
Parametro |
Descrizione |
Esempio |
wordmdl-ope |
APRI-XML |
|
wordmdl-modello |
fullpath cartella modelli o fullpath file modello |
move ext-mod-dir to wordmdl-modello |
wordmdl-modello-loc |
location del -modello passato C=client,S=Server(default=S) |
move "S" to wordmdl-modello-loc |
wordmdl-info |
fullpath (formato server) del nome file di informazioni. Il file di informazioni in molti programmi in questa fase non è nominato come .xml di solito ma come .txt, si occuperà poi wordmdl di cambiare l'estensione come .xml ed aggiungere il numero di occurrence al nome. |
move w-nome-xmldoc to wordmdl-info |
wordmdl-file-occ |
n° di occurence del file di informazioni (nel caso siano più di uno) |
move w-dc-file-occ to wordmdl-file-occ |
wordmdl-attendi-esito |
richiede che wordmdl attenda l'esito della creazione del file di info |
move "S" to wordmdl-attendi-esito |
•chiama ripetutamente wordmdl.cob con operazione AGGIUNGI-XML per fargli creare il/i file di dati (es. origine_nnnn.xml) passandogli i tag ed i dati da inserire nel tag
Parametro |
Descrizione |
Esempio |
wordmdl-ope |
AGGIUNGI-XML |
|
wordmdl-tag |
nome del tag da valorizzare |
move "TOT-IVATO" to wordmdl-tag |
wordmdl-tag-idx |
Indice del tag (attualmente non usato) |
move 0 to wordmdl-tag-idx |
wordmdl-dato |
Valore dell'informazione da aggiungere al tag |
move u10-edit to wordmdl-dato |
wordmdl-fl-tag |
Modalita' di gestione del tag: vuole comporre la info direttamente con WORDMDL In tal caso si dovra' richiamare "n" volte "A": Apro il tag e inizializzo la info "D": Tante volte quante sono le colonne "I": Chiudo la info con <fr> e scrivo la info "C": Chiudo il tag |
move " " to wordmdl-fl-tag |
wordmdl-attendi-esito |
richiede che wordmdl attenda l'esito della creazione del file di info |
move "S" to wordmdl-attendi-esito |
▪chiama wordmdl per chiudere il file xml con operazione CHIUDI-XML o per lanciare l'esecuzione tramite la ESEGUI della macro (che implica la chiusura dell'xml)
Parametro |
Descrizione |
Esempio |
wordmdl-ope |
CHIUDI-XML |
|
wordmdl-tag |
||
wordmdl-tag-idx |
move 0 to wordmdl-tag-idx |
|
wordmdl-dato |
move u10-edit to wordmdl-dato |
|
wordmdl-fl-tag |
Modalita' di gestione del tag: vuole comporre la info direttamente con WORDMDL In tal caso si dovra' richiamare "n" volte "A": Apro il tag e inizializzo la info "D": Tante volte quante sono le colonne "I": Chiudo la info con <fr> e scrivo la info "C": Chiudo il tag |
move " " to wordmdl-fl-tag |
wordmdl-attendi-esito |
richiede che wordmdl attenda l'esito della creazione del file di info |
move "S" to wordmdl-attendi-esito |
Esempio AGGIUNGI-XML per tabella.
*---------------------------------------------------------------
* Ora ogni riga del file di transito diventa una riga di tabella
* NB: per ora do' per scontato che la riga di capitolato abbia un
* formato fisso
*---------------------------------------------------------------
initialize util-wordmdl
move "Aggiungi-XML" to wordmdl-ope
move "TAB-CAPITOLATO" to wordmdl-tag
move 0 to wordmdl-tag-idx
move w-xml-info to wordmdl-dato
move w-xml-dato-size to wordmdl-dato-size
move w-dc-file-occ to wordmdl-file-occ
move "A" to wordmdl-fl-tag
call "WORDMDL" using stringhe util-wordmdl
*---------------------------------------------------------------
* Voce
*---------------------------------------------------------------
initialize util-wordmdl
move "Aggiungi-XML" to wordmdl-ope
move "TAB-CAPITOLATO" to wordmdl-tag
move 0 to wordmdl-tag-idx
move "D" to wordmdl-fl-tag
if t-det-voce <> a-voce
move t-det-voce to wordmdl-dato
move t-det-voce to a-voce
end-if
call "WORDMDL" using stringhe util-wordmdl
*---------------------------------------------------------------
* Descrizione
*---------------------------------------------------------------
initialize util-wordmdl
move "Aggiungi-XML" to wordmdl-ope
move "TAB-CAPITOLATO" to wordmdl-tag
move 0 to wordmdl-tag-idx
move "D" to wordmdl-fl-tag
move t-det-des to wordmdl-dato
move "S" to wordmdl-converti-crlf
call "WORDMDL" using stringhe util-wordmdl
*---------------------------------------------------------------
* UM
*---------------------------------------------------------------
initialize util-wordmdl
move "Aggiungi-XML" to wordmdl-ope
move "TAB-CAPITOLATO" to wordmdl-tag
move 0 to wordmdl-tag-idx
move "D" to wordmdl-fl-tag
move t-det-um to wordmdl-dato
call "WORDMDL" using stringhe util-wordmdl
*---------------------------------------------------------------
* Quantita'
*---------------------------------------------------------------
initialize util-wordmdl
move "Aggiungi-XML" to wordmdl-ope
move "TAB-CAPITOLATO" to wordmdl-tag
move 0 to wordmdl-tag-idx
move "D" to wordmdl-fl-tag
move t-det-qta to zeta7v3
move zeta7v3 to wordmdl-dato
move 11 to wordmdl-dato-size
call "WORDMDL" using stringhe util-wordmdl
*---------------------------------------------------------------
* Prezzo
*---------------------------------------------------------------
initialize util-wordmdl
move "Aggiungi-XML" to wordmdl-ope
move "TAB-CAPITOLATO" to wordmdl-tag
move 0 to wordmdl-tag-idx
move "D" to wordmdl-fl-tag
if t-det-pre = 0
move " " to wordmdl-dato
else
initialize util-u10
move "Edita" to u10-ope
perform z-u10-t-det-pre
move u10-edit to wordmdl-dato
end-if
move 11 to wordmdl-dato-size
call "WORDMDL" using stringhe util-wordmdl
*---------------------------------------------------------------
* Importo voce
*---------------------------------------------------------------
initialize util-wordmdl
move "Aggiungi-XML" to wordmdl-ope
move "TAB-CAPITOLATO" to wordmdl-tag
move 0 to wordmdl-tag-idx
move "D" to wordmdl-fl-tag
initialize util-u10
move "Edita" to u10-ope
perform z-u10-t-det-imp
move u10-edit to wordmdl-dato
move 11 to wordmdl-dato-size
call "WORDMDL" using stringhe util-wordmdl
add t-det-imp to a-tot-raggr
initialize util-wordmdl
move "Aggiungi-XML" to wordmdl-ope
move "TAB-CAPITOLATO" to wordmdl-tag
move 0 to wordmdl-tag-idx
move "I" to wordmdl-fl-tag
call "WORDMDL" using stringhe util-wordmdl
initialize util-wordmdl
move "Aggiungi-XML" to wordmdl-ope
move "TAB-CAPITOLATO" to wordmdl-tag
move 0 to wordmdl-tag-idx
move "C" to wordmdl-fl-tag
call "WORDMDL" using stringhe util-wordmdl
▪terminata la preparazione dei dati il programma gestionale
E’ possibile dal gestionale esportare dati che possono essere accolti in modelli di word.
La procedura appoggia sui seguenti file:
-file di testo contenente le informazioni;
-file con estensione xml in cui sono contenuti i dati;
-modello di word (formato .doc);
-file di word contente la macro vba (xmltodoc.doc).
il nome del file di testo contenente le informazioni comprende il nome del file word con la macro + “_info” secondo le convenzioni da noi adottate: “xmltodoc_info.txt”.
alcuni esempi validi di contenuto del file:
I file xml contenenti i dati “devono” avere la seguente forma:
Esempio 3
<COD-CLI>
WIL123123
</COD-CLI>
<RAGSOC-CLI>
Prova Ragione Sociale
</RAGSOC-CLI>
<CLI-IND>
Indirizzo del cliente
</CLI-IND>
<CAPLOCAPROV-CLI>
Roma
</CAPLOCAPROV-CLI>
<PREV-NUM>
1234111
</PREV-NUM>
<ALTRO-DATO>
</ALTRO-DATO>
<PREV-DATA>
12-12-2009
</PREV-DATA>
<LOD-COMMESSA>
COMM12121212
</LOD-COMMESSA>
<TAB-DET>
@fondi;a) contratto a distanza: il contratto avente per oggetto beni o servizi stipulato tra un fornitore e un consumatore nell'ambito di un sistema di vendita o di prestazione di<ac> servizi a distanza organizzato dal fornitore che, per tale contratto, impiega esclusivamente una<ac> o più tecniche di comunicazione<ac> a distanza fino alla conclusione del contratto, compresa la conclusione del contratto stesso<FR>
XXXXX merce numero<ac> uno;12;123,89;14.567.890,00;1.345.678,99;1.456.456.300,90<FR>
XXXXX merce numero<ac> due;12;123,89;14.567.890,00;1.345.678,99;1.456.456.300,90<FR>
XXXXX merce numero tre;12;123,89;14.567.890,00;1.345.678,99;1.456.456.300,90<FR>
XXXXX merce numero quattro;12;123,89;14.567.890,00;1.345.678,99;1.456.456.300,90<FR>
</TAB-DET>
Il contenuto racchiuso fra i tag <_> </_> è quello che sarà copiato nel documento modello.
Se il contenuto è nullo occorre indicare una riga vuota fra il tag di apertura e quello di chiusura.
Nel caso ci fosse una tabella da popolare il tag deve iniziare con <TAB vedi “esempio 4” <TAB_DET>
Nell’esempio si può vedere che il contenuto della tabella è definito in righe che terminano obbligatoriamente con <FR> o <fr>.
Ogni riga racchiude il contenuto dei “campi” ed il contenuto del campo è separto dal delimitatore “;”.
Se il campo contiene il tag <ac> verrà aggiunto un ritorno a capo all’interno del medesimo.
Esiste l’eccezione della riga che contiene un solo valore significativo e che inizia con @fondi.
Questa linea viene integrata nella tabella in un sola cella (fusione delle celle).
Il documento modello dovrà contenere i tag presenti nell’archivio XML come nell’esempio 5:
<LOGO:c:\path\nomefilelogo.doc>
Spett.le (<COD-CLI>)
<RAGSOC-CLI>
<CLI-IND>
<CAPLOCAPROV-CLI>
PREVENTIVO N. <PREV-NUM> DEL <PREV-DATA> |
Rifer. <LOD-COMMESSA>
|
<ALTRO-DATO> |
||||
CODICE E DESCRIZIONE MERCE
|
QU.TA' |
IMP.UNIT. |
TOTALE |
SCONTO |
IMP.NETTO |
<TAB-DET> |
|
|
|
|
|
Restiamo a Vs. disposizione per informazioni e chiarimenti in merito e cogliamo l'occasione per porgerVi i migliori saluti.
WILOCS
<IMAGE:c:\path\nomefileimmagine.jpg>
Fine esempio 5
La macro contenuta in “xmltodoc.doc” farà da smistatrice dei dati dall’archivio xml al modello word.
In pratica si otterrà alla fine un documento come il seguente esempio 6:
WILOCS LOGO TEST SRL
Spett.le (WIL123123)
Prova Ragione Sociale
Indirizzo del cliente
Roma
PREVENTIVO N. 1234111 DEL 12-12-2009 |
Rifer. COMM12121212
|
|
||||
CODICE E DESCRIZIONE MERCE
|
QU.TA' |
IMP.UNIT. |
TOTALE |
SCONTO |
IMP.NETTO |
a) contratto a distanza: il contratto avente per oggetto beni o servizi stipulato tra un fornitore e un consumatore nell'ambito di un sistema di vendita o di prestazione di servizi a distanza organizzato dal fornitore che, per tale contratto, impiega esclusivamente una o più tecniche di comunicazione a distanza fino alla conclusione del contratto, compresa la conclusione del contratto stesso |
|||||
XXXXX merce numero uno |
12 |
123,89 |
14.567.890,00 |
1.345.678,99 |
1.456.456.300,90 |
XXXXX merce numero due |
12 |
123,89 |
14.567.890,00 |
1.345.678,99 |
1.456.456.300,90 |
XXXXX merce numero tre |
12 |
123,89 |
14.567.890,00 |
1.345.678,99 |
1.456.456.300,90 |
XXXXX merce numero quattro |
12 |
123,89 |
14.567.890,00 |
1.345.678,99 |
1.456.456.300,90 |
Restiamo a Vs. disposizione per informazioni e chiarimenti in merito e cogliamo l'occasione per porgerVi i migliori saluti.
WILOCS
Note: come si nota dall’esempio è possibile includere, nelle posizioni che si ritengono più opportune, file immagini o loghi per personalizzare il modello:
il tag <LOGO:fullpath_file.doc> inserisce un FILE all'interno del documento, quindi DEVE ESSERE un file .doc
il tag <IMAGE:fullpath_file.jpg/tif/bmp/png> inserisce un'IMMAGINE
semplicemente aggiungendo il tag <IMAGE:path+nomefile> es: <IMAGE:c:\pippologhi\logotesta.jpg> o <IMAGE:\\server\loghi\logotesta.jpg> (è ovvio che le posizioni dei file devono essere raggiungibili!)
__
Formattazione delle celle delle tabelle
Se all’inizio del modello nel modello sono presenti i seguenti termini :
#Font1
#Font2
#Font3
#Font4
#Font5
La macro processerà tutte quelle celle il cui contenuto iniziale (prefisso) è eguale a #Font1: , #Font2: , #Font3: ecc. in tal modo le celle saranno formattate secondo lo stile dei vari font.
Esempio di contenuto tabella con font:
#font1:XXXXX merce numero<ac> uno;12;123,89;14.567.890,00;1.345.678,99;1.456.456.300,90<FR>
#font1:XXXXX merce numero<ac> due;12;123,89;14.567.890,00;1.345.678,99;1.456.456.300,90<FR>
#font1:XXXXX merce numero tre;12;123,89;14.567.890,00;1.345.678,99;1.456.456.300,90<FR>
#font1:XXXXX merce numero quattro; #font2:12;123,89;14.567.890,00;1.345.678,99;1.456.456.300,90<FR>
Aggiunto il 7 ottobre 2011
-nel file check.txt prodotto alla fine della esecuzione della macro è stata aggiunta una seconda riga in cui viene indicato il numero di pagine del documento generato dalla macro
Usando la sintassi:Usando la
<LOGO:fullpath_nomefile.doc>
La macro includerà il documento di Word indicato dal fullpath (deve essere in formato client).
Per questo motivo il tag generalmente è inserito sulla pagina di sfodo del modello trattato.
Usando la sintassi:Usando la
<IMAGE:fullpath_nomefile.ext>
La macro includerà il file immagine indicato (deve essere in formato client).
NB: è conveniente introdurre il comando all'interno di una casella di testo, in questo modo l'immagine dovrebbe risultare ridimensionata all'interno della casella di testo stessa (sperimentato con un file *.PNG). Usando la
per inserire immagini all'interno di una tabella occorre utilizzare nel file di dati la sintassi:
@image@=nomeimmagine
dove nomeimmagine= shortname dell'immagine
il percorso ove recuperare l'immagine viene risolto in questo modo:
1.se nel file di informazioni è presente il campo cartellaImmagini=imagepath allora verrà usato imagepath
2.se non è presente il campo campo cartellaImmagini= allora verrà usato
imagepath=path di avvio dell'applicazione=path di dove viene lanciato xml2doc.doc
Usando la sintassi:Usando la
<EMBEDDEDFILE:fullpath_nomefile.ext>
La macro includerà il file indicato (deve essere in formato client).
Tenere conto del fatto che un file viene incluso nella pagina corrente, se eccede la pagina il contenuto viene troncato.
Per avere il contenuto completo se il file eccede la pagina di lunghezza, occorre embeddare come icona (il file compare come icona, è apribile clickandoci sopra, ma come icona viene stampato)
<EMBEDDEDASICON:fullpath_nomefile.ext>
La macro includerà il file come icona indicato (deve essere in formato client).
per inserire file all'interno di una tabella occorre utilizzare nel file di dati le sintassi corrispondenti ai comportamenti sopra descritti:
@embeddedfile@=nomefile
@embeddedasicon@=nomefile
dove nomefile= shortname del file
il percorso ove recuperare il file viene risolto in questo modo:
3.se nel file di informazioni è presente il campo cartellaEFile=filepath allora verrà usato filepath
4.se non è presente il campo campo cartellaEFile= allora verrà usato
filepath=path di avvio dell'applicazione=path di dove viene lanciato xml2doc.doc
Usando nel testo la sintassi:Usando la
@symbol=[fontname,]asciicharcode@
La macro sostituirà al posto dell' asciicharcode il singolo carattere corrispondente usando:
- se è presente il fontname allora verà usato quel font per riprodurre il carattere,
- se non è presente di default viene usato il font "Wingdings".