Vai al contenuto

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 temporanei w-ltd-nome (#$COGZ84.<op>) e w-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 bitmap labodonto e 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 a a-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 (COGS98W find+display, per numero se tm-cli = 0 altrimenti per prescrizione; blocca se prescrizione inesistente).
  • a-fine-dati: cerca-presc prepara 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), imposta tm-piano e tm-num.
  • a-90 / COGS54: apre il file di stampa via COGS54 (emulazione HPLJ3, s54-chr-stampa = 250); in archiviazione con w-dc-fl-cogz50 = "S" salta la richiesta periferica (a-90-ok); in archiviazione con w-dc-fl-cogz50 = "N" apre senza richiesta (s54-richiesta = "N", s54-fl-manual = "O").
  • a-90-ok: b-stampa; se non in archiviazione (o w-dc-fl-cogz50 = "N") chiude la stampa (s54-after-print = "S"); imposta lct-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 tabella w-righe-commessa (max 500) le azioni da stampare — per ciascuna legge LODPNRIG, verifica il flag laz-fl-su-scheda di LODAZION, applica i filtri prestazioni/note (cerca-prestazioni-o-note) e il filtro SOLO-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-r volte): per ogni azione, se e' una consegna (w-rc-fl-check = "C") stampa b5-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 progettazione B/C salvo eccezioni Lanzi/Lori), i materiali (LODPNMAT tipo "M" + lotti da LODCMMTA + descrittivi da LODPNMDS), eventuale lotto di default (COGMERLT via b44-cerca-lotto-default se anticipo-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-blocchi b41-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 ... THRU e GO TO in 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 solo move az-int to tm-int.
  • Output HP-GL/2 (emulazione HPLJ3), pagina orizzontale (&l26a&l0O in b1-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.k06 serve 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.