COGZ84 - Stampa Scheda (Modulo) Commessa¶
Sorgente: cbl/cogz84.cbl | Program-ID: COGZ84 | Tipo: Programma interattivo di stampa/consuntivo (allegato commessa laboratorio)
Menu: Lab.Odont. > Operativo > Stampe > Scheda Commessa
Scopo¶
Stampa la "Scheda Commessa" (modulo di lavorazione/consuntivo) di una commessa di laboratorio odontotecnico, generando un documento grafico HP-GL/2 su file di stampa (COGS54). L'operatore identifica la prescrizione/commessa tramite la ricerca generica (studio, paziente, progressivo, numero commessa) via COGS98W; il programma legge la testata commessa (LODCMTES), le righe (LODCMRIG), il piano di fabbricazione (LODPNTES/LODPNRIG/LODPNMAT) e ricompone in memoria l'intera scheda: intestazione azienda/studio/medico/paziente, elenco delle azioni con controlli, prestazioni, materiali (con lotti), consegne, note di riga e note di progetto.
Per ogni azione della commessa il programma decide se stamparla in base al flag laz-fl-su-scheda dell'anagrafica azione (default: si stampa), alla presenza di prestazioni/note/materiali (cerca-prestazioni-o-note) e alla modalita' di stampa configurata (SOLO-AGG limita alle fasi fino all'ultima aggiornata). La grafica e' costruita con primitive HP-GL/2 (rettangoli EA, linee PD, etichette LB) posizionate a coordinate assolute, con centratura testi tramite COGFNT e impaginazione descrizioni tramite COGZDEW.
Il programma puo' essere richiamato da altri moduli (z84-called = "COGZ84-CALLED"), tra cui la versione "Archiviazione": in modalita' w-dc-archivia = "Archivia" la richiesta della periferica di stampa e' saltata o gestita in modo automatico a seconda di w-dc-fl-cogz50.
File e tabelle¶
| File/Tabella | Tipo | Modalita' | Descrizione |
|---|---|---|---|
| FEURTAB | ISAM | Input | Parametri generali azienda (cogfiles.cpy) |
| LODCMTES | ISAM (k02) | I-O | Testata commessa via chiave 2, aggiorna lct-fl-sta (lct-chia2, lct-cod, lct-piano) |
| LODCMRIG | ISAM | Input | Righe commessa (lcr-com, lcr-riga, lcr-pn-cod, lcr-stato, lcr-ope, lcr-data-*, lcr-n-elementi) |
| LODCMAGG | ISAM | Input | Dati aggiuntivi commessa, ultimo progresso aggiornato (lcg-cod, lcg-prog-ult-agg-p) |
| LODCMCTR | ISAM | Input | Controlli eseguiti su riga commessa (lpc-com, lpc-riga, lpc-piano, lpc-fl-eseguito, lpc-problema) |
| LODCMMTA | ISAM | Input | Materiali/lotti assegnati alla prestazione (mpa-commessa, mpa-prs-id, mpa-merce, mpa-lotto, mpa-qta) |
| LODPNTES | ISAM | Input | Testata piano fabbricazione temporaneo (lpt-tip, lpt-cod, lpt-des) |
| LODPNRIG | ISAM | Input | Righe piano (lpr-tip, lpr-cod, lpr-prog, lpr-azione, lpr-sequenza, lpr-fl-check) |
| LODPNMAT | ISAM | Input | Materiali/prestazioni di piano (lmt-piano-*, lmt-tip, lmt-merce, lmt-qta, lmt-fl-sel/aut/canc, lmt-lotto, lmt-prs-id) |
| LODPNMDS | ISAM | Input | Materiali descrittivi di riga commessa (lmtd-commessa, lmtd-riga, lmtd-merce, lmtd-des, lmtd-lotto) |
| LODAZION | ISAM | Input | Anagrafica azioni (laz-cod, laz-des, laz-fl-su-scheda, laz-ope) |
| LODCONTR | ISAM | Input | Anagrafica piani di controllo (lcn-cod, lcn-des, lcn-da-eseguire) |
| LODRACCO | ISAM | Input | Raccordo azione-controllo tipo "AC" (lrc-tip, lrc-key-1, lrc-key-2) |
| LODRAPNC | ISAM (k06) | Input | Rapporti di non conformita' per commessa/riga (rnc-commessa, rnc-com-riga) |
| LODDESCR | ISAM | Input | Descrizioni testata/riga tipo "T1"/"P2" (lde-tip, lde-cod, lde-pro, lde-len) |
| COGMERCI | ISAM | Input | Anagrafica merci (mer-chia, mer-descr, mer-um, mer-padre) |
| COGMERLT | ISAM | Input | Lotti di default merce/operatore (mlt-merce, mlt-mag, mlt-prog, mlt-lotto) |
| COGMAGAZ | ISAM | Input | Anagrafica magazzino per intestazione azienda (magz-tipo, magz-cod, magz-ind/loca/cap/prov) |
| COGTABEL | ISAM | Input | Descrizione operatore (tipo 36, mag "O") (euta-tipo, euta-mag, euta-mag1, euta-ope-des) |
| COGDBASE | ISAM | Input | Distinta base per esplosione (dba-merce, dba-merce-f, dba-qta) - solo in esplodi-dist |
| LODTMDES | ISAM (temp) | I-O | Buffer temporaneo descrizioni per operatore (transito COGZDEW) |
| LODTRDES | ISAM (temp) | Input | Descrizioni impaginate a misura da COGZDEW (ltr-pro, ltr-des, ltr-len) |
| FLSTA | seq | Output | File di stampa HP-GL/2 (record riga) |
LODTMDES e' un temporaneo per operatore (w-ltd-nome = ext-tmp-dir + #$COGZ84.<operatore>), aperto in output esclusivo come lock di funzione; LODTRDES (w-ltr-nome = #$COGZDE.<operatore>) contiene le righe descrizione gia' impaginate da COGZDEW.
Copybook utilizzate¶
| Copybook | Descrizione |
|---|---|
cogz84.select, cogz84.fd, cogz84.wrk, cogz84-01.scr, cogz84.prc, cogz84.decla |
Screen Designer |
feurtab.fd, cogfiles.cpy |
FEURTAB |
lodtmdes.fd/.cpy/.k01, lodtrdes.fd/.cpy/.k01 |
File temporanei descrizioni |
flsta.fd/.cpy |
File di stampa |
k-personal.cpy |
Costanti personalizzazioni azienda (k-personal-lab-lanzi-cavalli, k-personal-lab-lori-padova) |
wstato.cpy, wopenf.cpy, wgrave.cpy, wnscr.cpy, cogazien.cpy |
Working storage standard + dati azienda |
utilfnt.cpy |
Linkage COGFNT (lunghezza/taglio frase) |
utils54.cpy |
Linkage COGS54 (file di stampa) |
utils98.cpy |
Linkage COGS98W (ricerca prescrizione) |
utilzde.cpy |
Linkage COGZDEW (impaginazione descrizioni) |
utilncnf.cpy |
Linkage RNEWCONF |
wcont.cpy, utilz84.cpy, wcont1.cpy |
Linkage di chiamata |
stato1.cpy, stato.cpy, winmsg.cpy, grave.cpy, mmmask.cpy, opengen.cpy |
Copybook di fine procedure |
lodcmtes.k02, lodrapnc.k06 |
Chiavi secondarie (aggiunte a fine procedure) |
Logica¶
Struttura goto-driven. Flusso principale:
- apri: init,
open-files; costruisce i nomi dei temporaneiw-ltd-nome(#$COGZ84.<op>) ew-ltr-nome(#$COGZDE.<op>); recupera dati di chiamata (z84-called,z84-archivia,z84-presc,z84-fl-cogz50); abilita tasti F1 configura, F4, F8, F9; carica bitmaplabodontoe pulsante custom "Commessa (F5)"; legge la configurazione (x99-confi);z-costruisci-controlli,z-s98-init. - a4: reset maschera, lock LODTMDES (chiude/riapre in output come lock, poi i-o),
move az-int to tm-int(la gestione azienda criptata via ENCRYPT e' rimossa - PBUG-1925, tutto commentato); se chiamato (w-dc-called = "S") va aa-fine-commessa. - a-tm-cli: accept prescrizione via COGS98W (
s98-fun = "accept"); F1 configura, F9 ricerca avanzata; esiti exit/prev/next. - a-fine-commessa:
x-controlla-commessa(COGS98Wfind+display, per numero setm-cli = 0altrimenti per prescrizione; blocca se prescrizione inesistente). - a-fine-dati:
cerca-prescprepara i dati (codice/medico/data prescrizione, paziente), legge LODCMTES (chiave 2), scarta le commesse senza progetto (s98-lpm-stato = "N"), legge LODCMAGG per l'ultimo progresso aggiornato (lcg-prog-ult-agg-p), impostatm-pianoetm-num. - a-90 / COGS54: apre il file di stampa via COGS54 (emulazione
HPLJ3,s54-chr-stampa = 250); in archiviazione conw-dc-fl-cogz50 = "S"salta la richiesta periferica (a-90-ok); in archiviazione conw-dc-fl-cogz50 = "N"apre senza richiesta (s54-richiesta = "N",s54-fl-manual = "O"). - a-90-ok:
b-stampa; se non in archiviazione (ow-dc-fl-cogz50 = "N") chiude la stampa (s54-after-print = "S"); impostalct-fl-sta = "S"su LODCMTES;z-chiudi. - b-stampa:
b1-init-page, poi legge l'intestazione azienda da COGMAGAZ, la descrizione piano da LODPNTES, il primo piano di fabbricazione dalla prima riga LODCMRIG; verifica note di progetto ("P2" su LODDESCR); scorre LODCMRIG (b-10-loop) caricando in tabellaw-righe-commessa(max 500) le azioni da stampare — per ciascuna legge LODPNRIG, verifica il flaglaz-fl-su-schedadi LODAZION, applica i filtri prestazioni/note (cerca-prestazioni-o-note) e il filtroSOLO-AGG, gestisce le consegne (lpr-fl-check = "C"), calcola il coefficiente (lct-coeff/lcr-n-elementi), determina RNC (cerca-rnc), raccoglie i piani di fabbricazione (tm-pdf). - b2-testa / b21-int-completa / b22-int-dettaglio / b23-separa-righe: disegnano intestazione azienda, riquadri della testata (numero commessa, data ingresso, consegne, studio/medico/paziente, prescrizione, P.D.F.), descrizione lavoro (note "T1" impaginate via COGZDEW) e le intestazioni di colonna del dettaglio (Azione, Descrizione, Chi, Data, Alternative/lotto, R.N.C.).
- b4-azione (eseguito
n-rvolte): per ogni azione, se e' una consegna (w-rc-fl-check = "C") stampab5-controllo; altrimenti carica i controlli (LODCMCTR, o dall'anagrafica via LODRACCO tipo "AC" se azione ancora aperta), le prestazioni (LODPNMAT tipo "P", con esclusioni per stato/db-attr; salta prestazioni nella nuova progettazioneB/Csalvo eccezioni Lanzi/Lori), i materiali (LODPNMAT tipo "M" + lotti da LODCMMTA + descrittivi da LODPNMDS), eventuale lotto di default (COGMERLT viab44-cerca-lotto-defaultseanticipo-lotti = "S"), le note di riga ("T1" via COGZDEW); verifica il salto pagina (w-siz-azione > w-pos-rig->b2-testa) e stampa la riga azione con operatore/data (COGTABEL tipo 36) e i sotto-blocchib41-controlli/b42-prestazioni/b43-materiali. - x2-set-ea / x2-set-pd / x2-set-lb / x2-set-pu: primitive HP-GL/2 (rettangolo, linea, etichetta, spostamento penna) con offset origine
w-v-ori/w-h-ori. - x3-carica-des: carica un blocco di descrizioni da LODDESCR a LODTMDES, rimuovendo i tag di creazione note nel formato
{x}({P}= 6 caratteri, altrimenti 2). - esplodi-dist: esplosione distinta base via COGDBASE (attualmente non richiamato - il blocco che lo invocava e' commentato in
b4-20). - fine / z-chiudi:
z-close-files, chiude e cancella LODTMDES/LODTRDES,cancel "COGZDEW"/"COGS98W",exit program.
Configurazioni (RNEWCONF)¶
Pacchetto "C", 4 chiavi (x99-confi):
| Gruppo/Percorso | Chiave | Uso |
|---|---|---|
odonto |
Formattazione-portrait |
Sequenza di formattazione stampante (tm-cfg-formatta, emessa in b1-init-page) |
labprepara |
modo-stampa-pm-su-scheda-commessa |
Se "SOLO-AGG", stampa solo prestazioni/materiali/azioni fino all'ultima fase aggiornata (tm-cfg-modo-stampa-pm) |
labprepara |
scheda-commessa-anticipo-lotti |
Se "S", per le righe non ancora eseguite cerca il lotto di default merce/operatore su COGMERLT (tm-cfg-anticipo-lotti) |
ABILITA |
LABOD-PROGETTAZIONE |
Modalita' progettazione: "B"/"C" (nuova progettazione) escludono le prestazioni dalla scheda, salvo aziende Lanzi/Lori (tm-cfg-modalita-prog) |
Il tasto F1 in a-tm-cli richiama x99-confi con ncnf-ope = "Modifica".
CALL¶
| Programma | Scopo |
|---|---|
COGS54 |
Apertura/chiusura file di stampa e richiesta periferica |
COGS98W |
Ricerca/accept generico prescrizione-commessa |
COGZDEW |
Impaginazione righe descrizione a misura (testata "T1", righe, note) |
COGFNT |
Calcolo lunghezza / taglio a misura delle frasi per centratura e adattamento |
RNEWCONF |
Lettura configurazioni ODONTO / labprepara / ABILITA |
ENCRYPT |
(Presente ma disabilitato, PBUG-1925: gestione azienda criptata rimossa) |
Note¶
- Il codice usa
PERFORM ... THRUeGO TOin modo estensivo (stile legacy pre-convenzioni attuali). - La gestione dell'azienda criptata (lettura LODDESCR "!!" + ENCRYPT + confronto con
az-int) e' stata rimossa con PBUG-1925; resta il solomove az-int to tm-int. - Output HP-GL/2 (emulazione
HPLJ3), pagina orizzontale (&l26a&l0Oinb1-init-page); il salto pagina in dettaglio e' governato dal confronto tra dimensione azione stimata (w-siz-azione) e spazio residuo (w-pos-rig). - Tabelle interne dimensionate: max 500 righe azione (
k-max-n-r), 20 consegne, 20 controlli, 50 materiali, 20 prestazioni, 10 piani di fabbricazione; il superamento genera un avviso all'operatore (consegne) o troncamento silenzioso. - La chiave secondaria di LODCMTES (
lodcmtes.k02) serve per l'accesso per prescrizione;lodrapnc.k06serve alla ricerca RNC per commessa+riga. - La logica di stampa dei controlli distingue tra controlli gia' registrati (LODCMCTR) e controlli attesi presi dall'anagrafica (LODRACCO tipo "AC" -> LODCONTR con
lcn-da-eseguire = "S") per le azioni ancora aperte. - TASK-1588 (2025-03): i materiali descrittivi (LODPNMDS) possono contenere merci "vere"; il codice valorizza codice e descrizione merce reale se
lmtd-merce <> k-merce-null.