Vai al contenuto

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):

  1. apri - inizializzazione log (jasn060w.log), connessione SQL, lettura configurazione (perform x99-read-config).
  2. 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 configurazione rcfg_* (arpconfig) filtrata sui parametri di interesse (vedi Configurazione).
  3. 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.
  4. 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 - valorizza w-xml-tag (nome tag) e w-xml-info (valore), poi call-aggiungi-xml (operazione Aggiungi-XML del modulo JXML).
  • Tag/sottotag di blocchi ripetuti (righe griglia: matricole, materiali, prestazioni, ecc.): paragrafi b4-init-call-jxml-tab-* impostano jxml-tag (es. TAB-M, TAB-M-CM, TAB-M-SM per i materiali), poi per ogni sottotag si valorizzano jxml-subtag + jxml-dato (+ jxml-dato-size) e si chiama call-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"

  1. Nuovo sottotag XML ALIV (dimensione 2) nei blocchi righe materiali (b4-esporta-tab-m) e righe prestazioni (b4-esporta-tab-p), valorizzato con wi-ali (aliquota IVA della riga in percentuale). Espone l'aliquota di riga nel modello Jasper.

  2. 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 tramite b4-zeta-val anziche' b4-zeta-qta, separando la formattazione dei valori da quella delle quantita'. Rimosse alcune inizializzazioni ridondanti move 2 to jxml-dato-size sui sottotag PN/IR (la dimensione e' poi impostata esplicitamente).

  3. Totali IVA/importi estesi alla fatturabilita' "F": nel calcolo di w-tot-iva, w-tot-imp-mat e w-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".

  4. 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:

  1. w-mer-descr ampliato da pic x(60) a pic x(2000) per ospitare descrizioni merce lunghe.

  2. Nuova configurazione tm-cfg-des-merce-lunga (pic x(01), default "N"): letta dalla chiave di configurazione prntdocusc / stampa-dag-merce (riga aggiunta al filtro SQL di arpconfig e ramo when 'stampa-dag-merce' nel loader, che valorizza tm-cfg-des-merce-lunga). Quando vale "S" e j3_rmer_desc_aggiuntive non 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 in b4-esporta-tab-m (valorizzazione di w-mer-descr) ed e' propagata anche al sottotag DM del blocco materiali sotto-merce (b4-init-call-jxml-tab-smm-mat), dove w-des-1 viene ora valorizzato da w-mer-descr al posto di j3_rmer_des (modifica marcata 20260706 task-5303).

  3. Nuovo tag XML di testata C-COMMENTO-RISOLUTIVO, valorizzato con j1_rcit_commento_risolutivo (commento risolutivo dell'intervento), scritto insieme agli altri tag di testata (accanto a C-TIPO-ATT).

  4. Nuovo sottotag XML LOTTO (dimensione 40) nel blocco righe materiali (b4-esporta-tab-m, call-jxml2), valorizzato con j3_rcim_lotto. La SELECT del cursore c_join3 (esql-join3-init-select) e' stata estesa con t1.rcim_lotto, e il binding :j3_rcim_lotto aggiunto nelle OPEN ... INTO dei cursori materiali; nello stesso cursore e' letta anche t2.rmer_desc_aggiuntive (binding :j3_rmer_desc_aggiuntive) per la descrizione lunga.

  5. Nuovo sottotag ALIV (aliquota IVA di riga, wi-ali) e formattazione prezzo netto tramite b4-zeta-val distinto da b4-zeta-qta, su righe materiali (b4-esporta-tab-m) e prestazioni (b4-esporta-tab-p). Il sottotag PIV (prezzo ivato) resta a questo stadio predisposto ma commentato (attivato in seguito dalla TASK-5464, vedi sotto).

  6. Totali IVA/imponibile estesi alla fatturabilita' "F": nel calcolo di w-tot-iva, w-tot-imp-mat e w-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 DM del 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: dettaglioClickUp 869e8ptfq.