COGV92M - Ristampa preventivi (versione wordmdl)¶
Descrizione¶
Worker di stampa/ristampa preventivi che genera un documento Word tramite modello
(motore WORDMDL). E' derivato da COGV92N e ne condivide la logica; la peculiarita'
di questa variante e' la produzione di tag XML specifici (es. CAPLOCAPROV-CLI =
CAP + localita' + provincia del cliente su una singola riga) e l'uso di descrizioni
merce estese.
Il programma non e' a menu (non presente in prog.txt): viene richiamato come
sotto-programma di stampa preventivo, ricevendo in linkage l'anno/numero/collegamento
del preventivo (lku-anno, lku-numero, lku-des, lku-ncoll in wcont.cpy).
Flusso operativo (paragrafo main):
- Ricerca del modello Word tramite
COGPA3(tipoCOGV92), da cui ricavacogpa3-modelloe le tabelle di dettaglio (TAB-DET-MM,TAB-CAPVAR); - Selezione periferica di stampa via
COGS54(emulazioneHPLJ3); - Eventuale archiviazione della versione preventivo nel dossier (solo chiamate di
laboratorio, quando
tm-cfg-genera-dossier = "S"e la chiamata ha classe"L"); - Elaborazione (
b-elaborazione): apertura del file XML (WORDMDLoperazioneApri-XML), scrittura dei tag di testata (testa) e di dettaglio, totali, note finali, partita IVA / codice fiscale, chiusura del file (Chiudi-XML) ed esecuzione del modello (Esegui).
Il dettaglio puo' essere stampato in modalita' standard (a-stampa-standard)
oppure capitolato (a-stampa-capitolato), scelta in base alla presenza della
merce configurata come "inizio voce" (tm-cfg-merce-ini-voce).
I dati di stampa sono passati a WORDMDL esclusivamente tramite tag (paragrafo
scrivi-tag / operazione Aggiungi-XML); il file appoggio e' un file temporaneo
in ext-tmp-dir (cogv92m.txt).
Storico modifiche¶
2026-07-16 - TASK-5584: descrizione merce estesa rcm-des valorizzata solo se non vuota¶
Nel comporre la descrizione di riga w-mer-descr (paragrafo di preparazione dati
riga, intorno alla lettura di COGRACMC con rd-cogracmc-chia2) la logica e' stata
irrobustita per evitare descrizioni vuote:
- si parte sempre da
mer-descr(descrizione anagrafica della merceCOGMERCI); - se la descrizione estesa e' significativa (
rcm-len >= 36) si usarcm-desdiCOGRACMCsolo sercm-des not = spaces(in precedenzarcm-desveniva copiato incondizionatamente, con il rischio di sovrascrivere la descrizione con spazi); - come rete di sicurezza, se dopo la composizione
w-mer-descrrisulta comunque a spazi si ripristinamer-descr.
move " " to w-mer-descr
if mer-descr <> "."
move mer-descr to w-mer-descr
if rcm-len >= 36
if rcm-des not = spaces
move rcm-des to w-mer-descr
end-if
end-if
if w-mer-descr = spaces
move mer-descr to w-mer-descr
end-if
end-if
Inoltre, in tutti i punti in cui la lettura di COGRACMC (rd-cogracmc-chia2)
fallisce (w-verbo-invalido / not w-verbo-ok) si esegue ora una inizializzazione
difensiva della chiave e della lunghezza:
initialize rcm-chia1 rcm-chia2 rcm-len
al posto del precedente move spaces to rcm-cod-ava. Questo azzera anche rcm-len
(evitando che una rcm-len >= 36 residua di una riga precedente attivi
erroneamente il ramo della descrizione estesa) ed e' applicato nei paragrafi di
composizione descrizione, nel blocco della merce collegata alla matricola di
assistenza (tag C-M-MER-CMA) e in x-compatta-merce (composizione nome file
allegato).
2026-07-16 - Formattazione CAP/localita'/provincia senza parentesi vuote¶
Nella scrittura dei tag CAPLOCAPROV-CLI e CD-CAPLOCAPROV-CLI (paragrafo testa),
la stringa CAP + localita' + provincia viene ora composta condizionalmente in base
alla presenza della provincia:
- se la provincia (
ts4-prov/w-ts4-prov) e' vuota, la stringa viene costruita senza le parentesi()(in precedenza venivano stampate parentesi vuote()); - se la provincia e' presente, si usa il formato
(PROV).
move "CAPLOCAPROV-CLI" to w-xml-tag
if ts4-prov = spaces
string ts4-cap " " ts4-loca " " ts4-prov " "
delimited " " into w-xml-info
else
string ts4-cap " " ts4-loca " (" ts4-prov ") "
delimited " " into w-xml-info
end-if
Nota: il tag FAT-CAPLOCAPROV-CLI (indirizzo di fatturazione) mantiene il formato
(...) incondizionato e non e' interessato da questa modifica.
Tabelle utilizzate¶
| Tabella | Accesso | Descrizione |
|---|---|---|
| FEURTAB | Lettura | Tabella parametri euristici |
| COGTESPR | Lettura | Testata preventivo (rd-cogtespr) |
| COGTPRAG | Lettura | Dati aggiuntivi/raggruppamento testata preventivo (rd-cogtprag) |
| COGTPRNT | Lettura | Note testata preventivo (rd-cogtprnt) |
| COGRIGPR | Lettura scansione | Righe del preventivo (st-cogrigpr-notmin) |
| COGRPRAG | Lettura | Dati aggiuntivi riga preventivo (rd-cogrprag) |
| COGMERCI | Lettura | Anagrafica merci; fornisce mer-descr (rd-cogmerci) |
| COGRACMC | Lettura chiave 2 | Codice merce avanzato / descrizione estesa (rcm-cod-ava, rcm-des, rcm-len); accesso via rd-cogracmc-chia2 |
| COGRACBB | Lettura chiave 2 | Raccordo codici merce (rd-cogracbb-chia2) |
| COGMERCL | Lettura | Merce/cliente: codice e descrizione personalizzati (rd-cogmercl) |
| COGMERA3 | Lettura | Merce - dati manodopera (rd-cogmera3) |
| COGGEANA | Lettura | Anagrafica generale (clienti/nominativi) (rd-coggeana) |
| COGANAPP | Lettura | Anagrafica appoggio (CAP, localita' alternativi) (rd-coganapp) |
| COGANCAP | Lettura | Tabella CAP (rd-cogancap) |
| COGAPPOG | Lettura | Anagrafica di appoggio (rd-cogappog) |
| COGRIFER | Lettura scansione chiave 2 | Riferimenti/persone del cliente (st-cogrifer-notmin-chia2); usata con tm-cfg-persona-rif |
| COGRIGCM | Lettura scansione chiave 2 | Righe commessa/tessera commessa preventivo (st-cogrigcm-notmin-chia2) |
| COGTESCM | Lettura | Testata commessa (descrizione breve) (rd-cogtescm) |
| COGDESCR | Lettura scansione | Descrizioni (blocco descrizioni IVA agevolata, tipo D1) (st-cogdescr-notmin) |
| COGDESAG | Lettura scansione | Descrizioni aggiuntive (st-cogdesag-notmin) |
| COGIMAGE | Lettura scansione chiave 2 | Immagini/allegati merce (tip. AM, oggetto ALLEGATO) (st-cogimage-notmin-chia2) |
| COGTABEL | Lettura | Tabella euristica (rd-cogtabel) |
| COGSNAGG | Lettura | Dati aggiuntivi serial number (rd-cogsnagg) |
| PRNTOPER | Lettura | Anagrafica operatori di stampa/inserimento (rd-prntoper) |
| ASNCHPRV | Lettura scansione chiave 2 | Aggancio preventivo -> chiamata assistenza (st-asnchprv-notmin-chia2) |
| ASNCHTES | Lettura | Testata chiamata assistenza (dossier, classe, cliente fatt.) (rd-asnchtes) |
| ASNCHDET | Lettura | Dettaglio chiamata assistenza (rd-asnchdet) |
| ASNMATRI | Lettura | Matricole di assistenza (rd-asnmatri) |
| ASNMTRTP | Lettura | Tipo matricola (rd-asnmtrtp) |
| ASNMODEL | Lettura | Modelli macchine (rd-asnmodel) |
| ASNMARCH | Lettura | Marche macchine (rd-asnmarch) |
| CRMANAGR | Lettura | Anagrafica nominativi CRM (rd-crmanagr) |
| CRMANANF / CRMANANN | Lettura | Note/informazioni nominativi CRM (rd-crmananf / rd-crmanann) |
| CRMINFOR / CRMINFTR | Lettura | Informazioni CRM (rd-crminfor / rd-crminftr) |
| LODTMDES | I-O temporaneo | File di appoggio locale per il caricamento delle descrizioni; aperto/eliminato dal programma |
| COGV92-T-DETTAGLIO | I-O temporaneo | Tabella temporanea dettaglio capitolato (clone di COGTRANS, chiave t-det-chia1) |
| COGV92-T-MERCI | I-O temporaneo | Tabella temporanea elenco articoli per allegati (clone di COGTRANS, chiavi t-mer-chia1 / t-mer-chia2) |
Copybook¶
| Copybook | Ruolo |
|---|---|
cogv92m.select, cogv92m.fd, cogv92m.wrk, cogv92m.prc |
Definizioni file, working e procedure generate da Screens |
feurtab.fd, cogfiles.cpy |
Definizione FEURTAB |
lodtmdes.fd, lodtmdes.cpy, lodtmdes.k01 |
File temporaneo descrizioni |
costanti-assist.cpy |
Costanti ambiente assistenza |
k-personal.cpy |
Costanti di personalizzazione azienda (k-personal-endonova, k-personal-artic-seals) |
cogazien.cpy |
Parametri azienda (az-assist, az-personal, az-cli-pot, ...) |
wgrave.cpy, wnscr.cpy, wopenf.cpy, wstato.cpy |
Working standard (errori, schermo, apertura file, stato) |
utils54.cpy, utils68.cpy |
Interfaccia COGS54 (periferica) e COGS68w |
utilu03.cpy, utilu22.cpy, utilu20.cpy, utilu10.cpy, utilu06.cpy |
Interfacce moduli utility COGU03/COGU22/COGU20/COGU10/COGU06 |
utilcrms10.cpy, utilcrms06.cpy |
Interfacce CRMS10 (dossier) e CRMS06 (informazioni CRM) |
utilncnf.cpy |
Interfaccia RNEWCONF (lettura configurazioni) |
utilgesstr.cpy |
Interfaccia GESSTR (gestione stringhe/note) |
utilw92.cpy |
Interfaccia COGW92 (destinazioni diverse - send-w92) |
utilzde.cpy |
Interfaccia COGZDEW |
utilwordmdl.cpy |
Interfaccia motore stampa WORDMDL |
utilcogpa3.cpy |
Interfaccia COGPA3 (ricerca modello e tabelle) |
l-copiaf.cpy, u-copiaf.cpy |
Interfaccia COPIAF (copia file allegati) |
wcont.cpy, wcont1.cpy |
Area di contesto linkage (con lku-user-area) |
grave.cpy, mmsubw.cpy, opengen.cpy, stato.cpy, stato1.cpy, winmsg.cpy |
Routine standard di fine procedure |
sendw92.cpy, sendu22.cpy |
Routine di invio a COGW92 / COGU22 |
cogrigcm.k02, cogrifer.k02, cogracbb.k02, cogracmc.k02, cogimage.k02, asnchprv.k02 |
Chiavi secondarie delle relative tabelle |
printer.cpy |
Costanti/utility di stampa |
cogtrans.k01 (con REPLACING) |
Genera le routine di I/O per le due tabelle temporanee (cogv92-t-dettaglio, cogv92-t-merci) |
Programmi chiamati¶
| Programma | Scopo |
|---|---|
| WORDMDL | Motore di generazione documento Word da modello e tag XML (Apri-XML / Aggiungi-XML / Chiudi-XML / Esegui) |
| COGPA3 | Ricerca del modello di stampa e delle tabelle di dettaglio associate al preventivo |
| COGS54 | Selezione periferica di stampa |
| COGS68w | Utility (composizione codice/descrizione merce) |
| COGU03 / COGU10 / COGU10W / COGU20W / COGU06 | Utility di editing/estrazione (COGU06: estrazione allegato da documento) |
| GESSTR | Gestione stringhe/note descrittive |
| CRMS06 | Lettura informazioni CRM (partita IVA / codice fiscale del nominativo) |
| CRMS10 | Archiviazione allegato nel dossier (operazione ALLEGA-DOC) |
| COPIAF | Copia dei file allegato in cartella locale / di scarico |
| COGZDEW | Utility (cancellata in chiusura) |
| RNEWCONF | Lettura delle configurazioni (vedi sezione successiva) |
Configurazioni RNEWCONF¶
Lette nel paragrafo x99-confi (blocco ncnf-pac-gen = "C"):
| Gruppo | Chiave | Uso |
|---|---|---|
| PRNTPREVEN | euta-c031-des-mer | tm-cfg-des-mer |
| PRNTPREVEN | euta-c031-int | tm-cfg-int |
| PRNTPREVEN | euta-c031-tip-sta | tm-cfg-tip-sta |
| PRNTPREVEN | euta-c031-cmc | tm-cfg-cmc |
| PRNTPREVEN | euta-c031-cmc-des | tm-cfg-cmc-des |
| assist | riferimento-preventivi | tm-cfg-tipo-num-prv |
| ASS-STRUM | GENERAZIONE-DOSSIER | tm-cfg-genera-dossier |
| STAMPE | PERIFERICA-STAMPA-FILE | tm-cfg-prf-stampa |
| STAMPE | PATH-STAMPA-FILE | tm-cfg-path-stampa |
| CONTATTI | POSIZIONE-INVIO-PREVENTIVI | tm-cfg-persona-rif |
| PREVENTIVI | STAMPA-DESC-AGG-MERCE | tm-cfg-stampa-descr-agg-m |
| PREVENTIVI | MERCE-INIZIO-VOCE | tm-cfg-merce-ini-voce (attiva la modalita' capitolato) |
| ARC-OTT | PATH-APRI-FILE | tm-cfg-path-locale |
| PREVENTIVI | GESTIONE-ALLEGATI | tm-cfg-allegati ("D" = scarico su cartella dedicata) |
| PREVENTIVI | CARTELLA-SCARICO-ALLEGATI | tm-cfg-cartella-allegati |
| PREVENTIVI | TIPO-SCHEDA-PREVENTIVO | tm-cfg-tipologia-crm |
| preventivi | stampa-desc-agg-merce-modalita | tm-cfg-stampa-descr-agg-m2 |
Note¶
- Il programma usa tre file temporanei indicizzati con nome contenente l'operatore
(
wo-oper) e la directory temporanea (ext-tmp-dir):LODTMDESper le descrizioni,COGV92-T-DETTAGLIOper il capitolato eCOGV92-T-MERCIper l'elenco articoli da cui costruire la tabella allegati.LODTMDESviene aperto inoutput(verifica esclusivita' operatore) e in chiusura viene cancellato condelete file. tm-cfg-blocco-dese' forzato a"B"nelmain(descrizioni incluse nella cella della descrizione merce), indipendentemente dalla configurazione.- Per
az-personal = k-personal-artic-sealsla stampa riga usa il paragrafo dedicatoa-riga-articanziche'a-riga. - Il totale manodopera (
w-totale-mo) e' calcolato cometpra-manodopera * tpra-pn-manodopera(prezzo unitario memorizzato sul preventivo) ed emesso nei tagTEMPO-MO,IMPORTO-MO,MO-CALC-Q,MO-CALC-V. - L'archiviazione al dossier (
b-tipo-elaborazione = "A") e' prevista solo per le chiamate di laboratorio dotate di dossier associato.
Casistica problemi noti¶
Descrizione di riga vuota per rcm-len residuo (2026-07-16)¶
- Sintomo: nella stampa/ristampa preventivi alcune righe articolo risultavano prive di descrizione.
- Causa:
rcm-len(comp-4) non veniva azzerato dopo una lettura fallita diCOGRACMC(rd-cogracmc-chia2) e poteva conservare un valore residuo>= 36, attivando erroneamente il ramo della descrizione estesa che copiavarcm-desa spazi sopra la descrizione anagrafica. - Correzione (TASK-5584):
rcm-desusata solo senot = spaces, ripristino dimer-descrquando la descrizione composta resta a spazi e inizializzazione difensiva (initialize rcm-chia1 rcm-chia2 rcm-len) dopo ogni letturaCOGRACMCfallita. - Riferimento: dettaglio bug | ClickUp 869e3xecn