JASN060 - Generazione XML rapportino intervento (Jasper)¶
Sorgente: cbl/jasn060.cbl | Program-ID: JASN060 | Tipo: Sotto-programma worker (non a menu), compilato FREE con SQL embedded
Scopo¶
JASN060 e' il worker che genera l'XML dati del rapportino di intervento di assistenza ("Stampa interventi su Modulo A4 - jxml"), poi reso in PDF da Jasper. Riceve in input l'identificativo di un intervento (jasn060-id-azi + jasn060-id-inter), legge i dati dell'intervento e di tutti i blocchi collegati (testata chiamata, cliente, destinazioni, matricole, materiali, prestazioni, difetti, schede CRM, documenti, ecc.) dalle tabelle PostgreSQL di frontiera Areagate (DB di frontiera rcit/rcim/rmer/ratpa/...) via SQL embedded, e costruisce un documento XML a tag tramite il modulo JXML.
E' tipicamente invocato dai server di stampa Areagate (iswsprint, iswsprintoc, is-testjasper) e dalle varianti verticali (jasn060_ocmis).
Struttura e flusso¶
Il programma e' un sotto-programma chiamato using util-jasn060 (copybook utiljasn060.cpy):
| Campo linkage | Significato |
|---|---|
jasn060-id-azi |
Codice azienda |
jasn060-id-inter |
Id intervento da stampare |
jasn060-fl-log / jasn060-debug-level |
Attivazione e livello di log |
jasn060-esito / jasn060-exitcode / jasn060-msg |
Esito di ritorno |
Flusso principale (main section):
apri- inizializzazione log (jasn060w.log), connessione SQL, lettura configurazione (perform x99-read-config).x99-read-config- accept delle variabili d'ambiente (path/slash di lavoro, cartelle firme/immagini), default delle configurazioni, poi lettura via SQL della tabella di configurazionercfg_*(arpconfig) filtrata sui parametri di interesse (vedi Configurazione).stampa/stampa10(perform stampa thru ex-stampa) - lettura della testata intervento (esql-join1-read-sub-azi-intervento), caricamento contratto, tecnici, modello, firme, destinazioni diverse, apertura del file XML (Apri-XML) e scrittura di tutti i tag.- Chiusura:
esql-close,exit program.
L'output e' un file XML (jasn060w_dati.xml) costruito sul modello Jasper indicato (w-modello-path).
Costruzione XML¶
- Tag di testata (semplici): paragrafo
scrivi-tag- valorizzaw-xml-tag(nome tag) ew-xml-info(valore), poicall-aggiungi-xml(operazioneAggiungi-XMLdel moduloJXML). - Tag/sottotag di blocchi ripetuti (righe griglia: matricole, materiali, prestazioni, ecc.): paragrafi
b4-init-call-jxml-tab-*impostanojxml-tag(es.TAB-M,TAB-M-CM,TAB-M-SMper i materiali), poi per ogni sottotag si valorizzanojxml-subtag+jxml-dato(+jxml-dato-size) e si chiamacall-jxml2->call-jxml(call "JXML" using util-jxml ...).
Tabelle di frontiera principali (PostgreSQL Areagate)¶
Le tabelle sono lette via cursori SQL (c_join1..c_join11) componendo dinamicamente la SELECT. Copybook inclusi con replacing leading per prefissare i campi (rcit- -> j1_rcit_, rcim- -> j3_rcim_, rmer- -> j3_rmer_, ecc.).
| Tabella | Copybook | Prefisso campi | Contenuto |
|---|---|---|---|
arpintes (rcit) |
arpintes.cpy |
j1_rcit_ |
Testata intervento/chiamata |
arptpatt (ratpa) |
arptpatt.cpy |
j1_ratpa_ |
Tipo attivita' chiamata |
arpanagr (rana) |
arpanagr.cpy |
a1_/a2_/amem_ |
Anagrafica cliente |
arpintec (rcin) |
arpintec.cpy |
j2_rcin_ |
Prestazioni (manodopera) |
arpinmat (rcim) |
arpinmat.cpy |
j3_rcim_/j4_rcim_ |
Righe materiali/merci intervento |
arpmerci (rmer) |
arpmerci.cpy |
j3_rmer_ |
Anagrafica merce |
arpmeser (rmers) |
arpmeser.cpy |
j4_rmers_/j8_rmers_ |
Merce su prestazione |
arpindet (rcid) |
arpindet.cpy |
j4_rcid_/j8_rcid_ |
Dettaglio prestazioni |
arpindif (rcii) |
arpindif.cpy |
j6_rcii_ |
Difetti rilevati |
arpchdet (rcht) |
arpchdet.cpy |
j9_rcht_ |
Dettaglio matricole/checklist |
arpconfig (rcfg) |
esql-arpconfig-wrk.cpy |
rcfg_ |
Configurazioni applicative |
Configurazione¶
La configurazione e' letta da arpconfig (rcfg_*) tramite il filtro SQL composto in esql-arpconfig-add-local-filters e il loader esql-arpconfig-consume-data (evaluate su rcfg_param_key). I default sono impostati prima della lettura (in x99-read-config, intorno alla lettura azienda).
Parametri rilevanti per le righe materiali:
rcfg_prog |
rcfg_param_key |
Campo working | Default | Effetto |
|---|---|---|---|---|
assist / azienda / ass-chiam / stampe |
vari | tm-cfg-* |
- | Provenienza portale, gestione carburanti, modelli preventivo/consegna, FTP immagini, ecc. |
prntdocusc |
stampa-dag-merce |
tm-cfg-des-merce-lunga |
"N" |
Se "S", usa la descrizione aggiuntiva/lunga della merce al posto della descrizione standard (vedi sotto) |
Nota: nel loader, il when 'stampa-dag-merce' valorizza tm-cfg-des-merce-lunga; il flag e' quindi letto dalla configurazione prntdocusc / stampa-dag-merce (riga aggiunta al filtro SQL: OR ((rcfg_prog = 'prntdocusc') AND (rcfg_param_key = 'stampa-dag-merce'))). Da non confondere con tm-cfg-stampa-dag-merce (parametro distinto che governa il formato delle descrizioni/note nei sottotag DM/DMA/DMN).
Tag XML prodotti (selezione)¶
Testata (paragrafi stampa/stampa10, scrivi-tag)¶
| Tag XML | Sorgente dato |
|---|---|
N-CHI |
j1_rcit_id_chiamata |
C-OGGETTO, C-ACCESSORI, C-STATO-DISINF |
dati chiamata |
C-CONTRATTO |
j1_rcit_id_contratto |
C-TIPO-ATT |
j1_ratpa_des (descrizione tipo attivita') |
C-COMMENTO-RISOLUTIVO |
j1_rcit_commento_risolutivo (commento risolutivo dell'intervento) |
CLI-COD |
j1_rcit_nom_ass oppure codice anagrafica cliente |
CHI-BARCODE |
w-barcode |
Righe materiali (blocco TAB-M / TAB-M-CM / TAB-M-SM, paragrafo b4-esporta-tab-m, call-jxml2)¶
| Sottotag | Dimensione | Sorgente dato |
|---|---|---|
CMI |
11 | gruppo/sottogruppo/codice merce (w-mer-cmi) |
CMA |
- | j3_rmer_cma (codice merce alternativo) |
DM / DMA / DMN |
2000 | descrizione merce + descrizioni aggiuntive/note. DM usa w-mer-descr, che con tm-cfg-des-merce-lunga = "S" contiene la descrizione lunga j3_rmer_desc_aggiuntive invece della descrizione breve; DMA/DMN variano col flag tm-cfg-stampa-dag-merce |
UM |
2 | j3_rmer_um |
QTA |
11 | j3_rcim_qnt |
SN |
30 | j3_rcim_sn |
CCO |
2 | j3_rcim_causale_mov |
LOTTO |
40 | j3_rcim_lotto (lotto della riga materiale) |
ALIV |
2 | wi-ali (aliquota IVA della riga, in percentuale) |
PIV |
11 | prezzo ivato di riga = pre_net + (pre_net * wi-ali / 100), arrotondato (w-pre-iva -> w-pre-iva-round, formattato in b4-zeta-val). Prodotto dalla TASK-5464 |
VT |
- | flag |
Il prezzo netto (PN) e' formattato tramite il campo b4-zeta-val (pic zzz.zz9,999),
distinto da b4-zeta-qta usato per le quantita'. Accanto ad esso vengono prodotti il sottotag
ALIV (aliquota di riga) e il sottotag PIV (prezzo ivato di riga, calcolato in w-pre-iva
come pre_net + pre_net * wi-ali / 100, arrotondato a due decimali in w-pre-iva-round e
formattato via b4-zeta-val). Gli stessi sottotag PN/ALIV/PIV sono prodotti anche per le
righe prestazioni (blocco TAB-P, paragrafo b4-esporta-tab-p), con sorgente
j4_rcid_pre_net / wi-ali.
La descrizione di base della riga materiale e' impostata in testa a b4-esporta-tab-m:
move j3_rmer_des to w-mer-descr
if (tm-cfg-des-merce-lunga = "S")
and (j3_rmer_desc_aggiuntive <> "")
move j3_rmer_desc_aggiuntive to w-mer-descr
end-if
Quindi, con tm-cfg-des-merce-lunga = "S" e j3_rmer_desc_aggiuntive non vuoto, la descrizione "lunga" della merce sostituisce quella standard. Il campo w-mer-descr e' dimensionato pic x(2000) (ampliato dai precedenti 60 caratteri per ospitare le descrizioni lunghe) e confluisce nei sottotag DM/DMN.
Paragrafi principali¶
| Paragrafo | Ruolo |
|---|---|
apri / main |
Init, log, connessione, config, avvio stampa |
x99-read-config |
Lettura ambiente + configurazioni rcfg_*, default |
stampa / stampa10 / ex-stampa |
Lettura intervento e scrittura XML |
scrivi-tag / scrivi-tag2 |
Scrittura tag XML semplice (testata) |
b4-estrai-tab-m / b4-esporta-tab-m |
Estrazione e scrittura righe materiali (TAB-M) |
b4-init-call-jxml-tab-m |
Init chiamata JXML per il blocco materiali |
b7-estrai-tab-matr / b7-esporta-tab-matr |
Righe matricole (TAB-MATR) |
call-jxml / call-jxml2 |
Chiamata al modulo JXML |
esql-join1..11-read-sub-azi-intervento |
Lettura cursori SQL sui blocchi di frontiera |
esql-arpconfig-consume-data / esql-arpconfig-add-local-filters |
Loader e filtro SQL delle configurazioni |
Copybook principali¶
utiljasn060.cpy (linkage), logfile.cpy/logfile.fd, DbLogDef.cpy, esql-wrk.cpy e gli esql-arp*-wrk.cpy/esql-arp*-fun.cpy (gestione SQL), i copybook delle tabelle di frontiera (arpintes.cpy, arpinmat.cpy, arpmerci.cpy, arptpatt.cpy, ...), costanti-assist.cpy, acucobol.def, utilisftp.cpy/utiliftp.cpy.
Storico modifiche¶
2026-07-04 - Aliquota IVA sulle righe (tag ALIV), formattazione prezzo e fatturabilita' "F"¶
-
Nuovo sottotag XML
ALIV(dimensione 2) nei blocchi righe materiali (b4-esporta-tab-m) e righe prestazioni (b4-esporta-tab-p), valorizzato conwi-ali(aliquota IVA della riga in percentuale). Espone l'aliquota di riga nel modello Jasper. -
Nuovo campo di formattazione
b4-zeta-val(pic zzz.zz9,999): il prezzo netto (PN,j3_rcim_pre_net/j4_rcid_pre_net) viene ora formattato tramiteb4-zeta-valanziche'b4-zeta-qta, separando la formattazione dei valori da quella delle quantita'. Rimosse alcune inizializzazioni ridondantimove 2 to jxml-dato-sizesui sottotagPN/IR(la dimensione e' poi impostata esplicitamente). -
Totali IVA/importi estesi alla fatturabilita' "F": nel calcolo di
w-tot-iva,w-tot-imp-matew-tot-imp-prest, la condizione di inclusione della riga passa da... fl-fat = "S"a... (fl-fat = "S" or fl-fat = "F"), sia per i materiali (j3_rcim_fl-fat) sia per le prestazioni (j4_rcid_fl_fat). Le righe con flag di fatturabilita' "F" concorrono quindi ai totali imponibile/IVA insieme a quelle "S". -
Il sottotag
PIV(prezzo ivato calcolato da prezzo netto + aliquota) e' predisposto ma lasciato commentato nel sorgente (non prodotto).
2026-07-06 — TASK-5303: lotto materiali, descrizione merce lunga, commento risolutivo, IVA "F"¶
Modifiche marcate 20260706 / 20260623 nel sorgente:
-
w-mer-descrampliato dapic x(60)apic x(2000)per ospitare descrizioni merce lunghe. -
Nuova configurazione
tm-cfg-des-merce-lunga(pic x(01), default"N"): letta dalla chiave di configurazioneprntdocusc/stampa-dag-merce(riga aggiunta al filtro SQL diarpconfige ramowhen 'stampa-dag-merce'nel loader, che valorizzatm-cfg-des-merce-lunga). Quando vale"S"ej3_rmer_desc_aggiuntivenon e' vuoto, la riga materiale usa la descrizione aggiuntiva/lunga (j3_rmer_desc_aggiuntive) al posto della descrizione standard (j3_rmer_des). La sostituzione avviene inb4-esporta-tab-m(valorizzazione diw-mer-descr) ed e' propagata anche al sottotagDMdel blocco materiali sotto-merce (b4-init-call-jxml-tab-smm-mat), dovew-des-1viene ora valorizzato daw-mer-descral posto dij3_rmer_des(modifica marcata20260706 task-5303). -
Nuovo tag XML di testata
C-COMMENTO-RISOLUTIVO, valorizzato conj1_rcit_commento_risolutivo(commento risolutivo dell'intervento), scritto insieme agli altri tag di testata (accanto aC-TIPO-ATT). -
Nuovo sottotag XML
LOTTO(dimensione 40) nel blocco righe materiali (b4-esporta-tab-m,call-jxml2), valorizzato conj3_rcim_lotto. La SELECT del cursorec_join3(esql-join3-init-select) e' stata estesa cont1.rcim_lotto, e il binding:j3_rcim_lottoaggiunto nelle OPEN ... INTO dei cursori materiali; nello stesso cursore e' letta anchet2.rmer_desc_aggiuntive(binding:j3_rmer_desc_aggiuntive) per la descrizione lunga. -
Nuovo sottotag
ALIV(aliquota IVA di riga,wi-ali) e formattazione prezzo netto tramiteb4-zeta-valdistinto dab4-zeta-qta, su righe materiali (b4-esporta-tab-m) e prestazioni (b4-esporta-tab-p). Il sottotagPIV(prezzo ivato) resta a questo stadio predisposto ma commentato (attivato in seguito dalla TASK-5464, vedi sotto). -
Totali IVA/imponibile estesi alla fatturabilita' "F": nel calcolo di
w-tot-iva,w-tot-imp-matew-tot-imp-prest, la condizione di inclusione riga passa da... fl-fat = "S"a... (fl-fat = "S" or fl-fat = "F"), sia per i materiali (j3_rcim_fl-fat) sia per le prestazioni (j4_rcid_fl_fat).
2026-07-21 — TASK-5464: prezzo ivato di riga (tag PIV attivato)¶
Il sottotag XML PIV (dimensione 11), predisposto ma commentato nelle modifiche precedenti, e' ora prodotto sia sulle righe materiali (b4-esporta-tab-m) sia sulle righe prestazioni (b4-esporta-tab-p). Il valore e' il prezzo di riga comprensivo di IVA:
compute w-pre-iva rounded = j3_rcim_pre_net + (j3_rcim_pre_net * wi-ali / 100)
compute w-pre-iva-round rounded = w-pre-iva
move w-pre-iva-round to b4-zeta-val
move b4-zeta-val to jxml-dato
Sulle prestazioni la sorgente e' j4_rcid_pre_net al posto di j3_rcim_pre_net. Introdotti i campi di calcolo w-pre-iva (pic s9(12)v999999) e w-pre-iva-round (pic s9(12)v99, arrotondamento a due decimali); la formattazione riusa b4-zeta-val (pic zzz.zz9,999), gia' impiegato per il prezzo netto PN. Il modello Jasper puo' quindi esporre in stampa, per ogni riga, il prezzo netto (PN), l'aliquota (ALIV) e il prezzo ivato (PIV).
2026-07-30 — TASK-5708: descrizione del blocco sotto-merce (TAB-SMM) da w-mer-descr¶
Nel sottotag DM del blocco materiali sotto-merce (b4-init-call-jxml-tab-smm-mat, quello che
alimenta la tabella di dettaglio TAB-SMM "materiali per matricola" del rapportino), la
descrizione w-des-1 era valorizzata con un move diretto di j3_rmer_des (riga marcata
20260706 task-5303). Ora la valorizzazione passa per w-mer-descr, con la stessa gestione della
descrizione estesa usata nel blocco materiali principale:
* 20260706 task-5303
* move j3_rmer_des to w-des-1
* 20260706 task-5708
move j3_rmer_des to w-mer-descr
if (tm-cfg-des-merce-lunga = "S")
and (j3_rmer_desc_aggiuntive <> "")
move j3_rmer_desc_aggiuntive to w-mer-descr
end-if
move w-mer-descr to w-des-1
La modifica allinea il blocco TAB-SMM al blocco materiali principale (uso di w-mer-descr e della
configurazione prntdocusc / stampa-dag-merce) e, insieme alla correzione dei modelli Jasper del
rapportino (versioni 01 e 02), risolve il bug della descrizione materiali ripetuta in stampa (vedi
Casistica problemi noti).
Casistica problemi noti¶
Rapportino con descrizione materiali ripetuta (bug 869e8ptfq)¶
- Sintomo: nella stampa del rapportino di intervento (Assist 2.0) l'elenco dei materiali riportava sempre la stessa descrizione merce ripetuta, pur essendo i materiali corretti a gestionale. Anomalia limitata alla stampa e presente su piu' interventi.
- Causa: la descrizione del blocco di dettaglio per matricola (TAB-SMM) rimaneva impostata
all'ultimo valore letto, senza essere riallineata riga per riga. Effetto collaterale della
TASK-5303 sul sottotag
DMdel blocco sotto-merce (b4-init-call-jxml-tab-smm-mat). - Correzione: rivista la valorizzazione della descrizione del blocco sotto-merce (deriva ora da
w-mer-descr, con gestione della descrizione estesa) e corretti i modelli Jasper del rapportino 01/02; ricompilato JASN060 (TASK-5708). - Riferimento: dettaglio — ClickUp 869e8ptfq.