Vai al contenuto

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

  1. Ricerca del modello Word tramite COGPA3 (tipo COGV92), da cui ricava cogpa3-modello e le tabelle di dettaglio (TAB-DET-MM, TAB-CAPVAR);
  2. Selezione periferica di stampa via COGS54 (emulazione HPLJ3);
  3. Eventuale archiviazione della versione preventivo nel dossier (solo chiamate di laboratorio, quando tm-cfg-genera-dossier = "S" e la chiamata ha classe "L");
  4. Elaborazione (b-elaborazione): apertura del file XML (WORDMDL operazione Apri-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 merce COGMERCI);
  • se la descrizione estesa e' significativa (rcm-len >= 36) si usa rcm-des di COGRACMC solo se rcm-des not = spaces (in precedenza rcm-des veniva copiato incondizionatamente, con il rischio di sovrascrivere la descrizione con spazi);
  • come rete di sicurezza, se dopo la composizione w-mer-descr risulta comunque a spazi si ripristina mer-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): LODTMDES per le descrizioni, COGV92-T-DETTAGLIO per il capitolato e COGV92-T-MERCI per l'elenco articoli da cui costruire la tabella allegati. LODTMDES viene aperto in output (verifica esclusivita' operatore) e in chiusura viene cancellato con delete file.
  • tm-cfg-blocco-des e' forzato a "B" nel main (descrizioni incluse nella cella della descrizione merce), indipendentemente dalla configurazione.
  • Per az-personal = k-personal-artic-seals la stampa riga usa il paragrafo dedicato a-riga-artic anziche' a-riga.
  • Il totale manodopera (w-totale-mo) e' calcolato come tpra-manodopera * tpra-pn-manodopera (prezzo unitario memorizzato sul preventivo) ed emesso nei tag TEMPO-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 di COGRACMC (rd-cogracmc-chia2) e poteva conservare un valore residuo >= 36, attivando erroneamente il ramo della descrizione estesa che copiava rcm-des a spazi sopra la descrizione anagrafica.
  • Correzione (TASK-5584): rcm-des usata solo se not = spaces, ripristino di mer-descr quando la descrizione composta resta a spazi e inizializzazione difensiva (initialize rcm-chia1 rcm-chia2 rcm-len) dopo ogni lettura COGRACMC fallita.
  • Riferimento: dettaglio bug | ClickUp 869e3xecn