COGZ43 - Stesura Preventivo Laboratorio¶
Sorgente: cbl/cogz43.cbl | Program-ID: COGZ43 | Tipo: Programma interattivo (generazione preventivo da commessa)
Menu: Lab.Odont. > Operativo > Stesura Preventivo
Scopo¶
Genera automaticamente un preventivo (COGTESPR/COGRIGPR) a partire da una commessa di laboratorio gia' preparata. L'operatore identifica la prescrizione/commessa tramite la ricerca generica (studio medico, paziente, progressivo, numero commessa) via COGS98W; il programma verifica che la commessa esista e sia in stato valido (non "N" = non ancora preparata, non "E" = evasa), quindi propone di creare un nuovo preventivo, agganciare/rielaborare un preventivo esistente o modificarlo.
Le righe del preventivo sono composte esplodendo il piano di fabbricazione temporaneo della commessa (LODPNMAT, tipo "T"): vengono generate righe descrittive di riferimento (paziente, prescrizione) e le righe di dettaglio per prestazioni ("P") e materiali ("M") con flag di fatturazione. I prezzi sono calcolati tramite COGS01 (listino/fascia/sconti) con arrotondamento valuta via COGU10W. Il raccordo tra commessa e preventivo e' memorizzato su COGRACBB (tipo "CV").
Il programma delega la gestione interattiva del preventivo a COGV91, la stampa a COGV92 e la visualizzazione dei preventivi del cliente a COGV93.
File e tabelle¶
| File/Tabella | Tipo | Modalita' | Descrizione |
|---|---|---|---|
| FEURTAB | ISAM | Input | Parametri generali azienda (cogfiles.cpy) |
| LODCMTES | ISAM (k02) | Input | Testata commessa via chiave 2 (lct-chia2, lct-piano, lct-coeff) |
| LODPRESC | ISAM | Input | Prescrizione (lpm-rec, lpm-stato, lpm-cod, lpm-data) - popolata da COGS98W |
| LODPNMAT | ISAM | Input | Righe piano fabbricazione temporaneo (lmt-piano-tip, lmt-piano-cod, lmt-tip, lmt-merce, lmt-qta, lmt-fl-fat, lmt-fl-qta) |
| COGMERCI | ISAM | Input | Anagrafica merci (mer-chia, mer-coeff) |
| COGGEANA | ISAM | Input | Anagrafica generale clienti (ana-riflistino, ana-fascia, ana-nome, ana-ind) |
| COGTESPR | ISAM | I-O | Testata preventivo (tpr-anno, tpr-numero, tpr-cliente, tpr-currency, ...) |
| COGRIGPR | ISAM | I-O | Righe preventivo (rpr-anno, rpr-numero, rpr-riga, rpr-merce, rpr-qta, rpr-prezzo, ...) |
| COGRACBB | ISAM (k02) | I-O | Raccordo commessa-preventivo, tipo "CV" (rbb-tip, rbb-a-bol, rbb-b-bol, rbb-pro) |
Copybook utilizzate¶
| Copybook | Descrizione |
|---|---|
cogz43.select, cogz43.fd, cogz43.wrk, cogz43-01.scr, cogz43.prc, cogz43.decla |
Screen Designer |
feurtab.fd, cogfiles.cpy |
FEURTAB |
wstato.cpy, wopenf.cpy, wgrave.cpy, wnscr.cpy, cogazien.cpy |
Working storage standard + dati azienda |
utilcogv93.cpy |
Linkage subroutine COGV93 |
utils25.cpy, utils52.cpy, utils98.cpy |
Linkage COGS25 (numeratore), COGS52, COGS98W |
utilncnf.cpy |
Linkage RNEWCONF |
utilu10.cpy |
Linkage COGU10W (arrotondamento valuta) |
utildlg.cpy |
Linkage DIALOGS |
wcont.cpy, utils01.cpy, utilz43.cpy, utilv91.cpy, utilv92.cpy, wcont1.cpy |
Linkage di chiamata (COGS01, COGV91, COGV92) |
stato1.cpy, stato.cpy, winmsg.cpy, grave.cpy, mmmask.cpy, opengen.cpy |
Copybook di fine procedure |
cogracbb.k02, lodcmtes.k02 |
Chiavi secondarie (aggiunte a fine procedure) |
Logica¶
Struttura goto-driven. Flusso principale:
- apri: init,
open-files; recupero dati di chiamata (z43-called,z43-prescrizione); legge configurazione (x99-src-cfg); abilita tasti F3, F4, F8 aiuto/calendario, F9 nuovo/ricerca avanzata; carica bitmaplabodonto/labodonto2e crea pulsanti custom "Commessa (F5)" e "Visualizza preventivi cliente (F6)";z-costruisci-controlli,z-s98-init. - a4: reset maschera (divisa da
w-currency-conto); se chiamato (w-dc-called = "S") eseguefindsu COGS98W con la prescrizione ricevuta e salta aa-10-cerca. - a-tm-cli: accept della prescrizione/commessa via COGS98W (
z-s98-tm-presc,s98-fun = "accept"); gestione esiti exit/prev/next. - a-10-cerca / a-fine-commessa:
x-controlla-commessa(COGS98Wdisplay, poi legge LODCMTES per chiave 2, verifica stato prescrizione: blocca se "N" = non preparata o "E" = evasa); recupera piano (lct-piano), coefficiente (lct-coeff), codice e data prescrizione. - a-40: cerca un raccordo esistente su COGRACBB (tipo "CV",
rbb-a-bol= numero commessa); se il preventivo di riferimento non esiste piu' cancella il raccordo, altrimenti eventualmente ripristina nome/indirizzo cliente su COGTESPR da COGGEANA. - a-tm-prv-ann / a-tm-prv-num: accept anno/numero preventivo; F6 richiama COGV93 (visualizza preventivi cliente), F9 forza nuovo preventivo (anno/numero a 0), F3 conferma.
- a-richiesta-conferma-bis: valida i campi; su nuovo preventivo (anno/numero = 0) chiede conferma inserimento; su preventivo esistente valido (
trovato-p) chiede conferma agganciamento ed esegueaggancia-cogracbb.x-controlla-tm-prv-numverifica via COGRACBB (chiave 2) e COGTESPR che il preventivo non sia gia' assegnato ad altra commessa (altra-comm), non sia di altro cliente (altro-cli) e non sia inesistente (non-trovato-p). - Se il preventivo esiste (
tm-prv-ann <> 0) apre una DIALOG (Rielabora F3 / Modifica F6 / Annulla Esc): F6 richiama COGV91 (gestione), F3 rielabora. - Rielaborazione/inserimento: legge listino/fascia cliente da COGGEANA; se nuovo (
tm-prv-ann = 0) inserisce testata (d-inserisci-testata) e righe (b-inserisci-righe); se esistente cancella le righe (c-cancella-righe) e le reinserisce, poi riaggancia. - d-inserisci-testata: chiama COGS25 per il numeratore preventivo (
s25-i-cod = 7), inizializza COGTESPR (cliente, nome/indirizzo da COGGEANA, data, listino, flag), scrive; poiaggancia-cogracbb. - b-inserisci-righe: righe descrittive (riferimento paziente, riferimento prescrizione con data) via
b1-descrizione; poib2-righeper prestazioni ("P") e materiali ("M"). - b2-righe: scorre LODPNMAT (tipo "T", piano commessa) filtrando
lmt-tip = w-tip,lmt-fl-fat = "F",lmt-qta <> 0; calcola quantita' (moltiplicata per coefficiente selmt-fl-qta = "U"e coeff <> 0), applica eventuale calo peso (tm-cfg-calopeso = "A"usamer-coeff), chiama COGS01 per prezzo/sconti, arrotonda l'importo con COGU10W, scrive la riga COGRIGPR. - a-50: DIALOG finale (Prosegui Esc / Gestione F6 = COGV91 / Stampa F9 = COGV92).
- aggancia-cogracbb: scrive COGRACBB tipo "CV" (a-bol = commessa, b-bol = preventivo).
- fine / z-chiudi:
z-close-files,cancel 'COGS98W',exit program.
Configurazioni (RNEWCONF)¶
Pacchetto "C", punto 01, percorso GESTBUONIC:
| Chiave | Uso |
|---|---|
euta-c034-calopeso |
Se "A", applica il calo peso (coefficiente merce mer-coeff) alle quantita' delle righe preventivo (tm-cfg-calopeso, x99-src-cfg) |
CALL¶
| Programma | Scopo |
|---|---|
COGS98W |
Ricerca/accept generico prescrizione-commessa (studio/paziente/progressivo/numero) |
COGS01 |
Calcolo prezzo/sconti da listino, fascia e valuta |
COGU10W |
Arrotondamento importo secondo la valuta |
COGS25 |
Numeratore progressivo preventivo (codice 7) |
COGV91 |
Gestione interattiva del preventivo (via set-win-appoggio/close-win-appoggio) |
COGV92 |
Stampa del preventivo |
COGV93 |
Visualizzazione preventivi del cliente (F6) |
DIALOGS |
Dialoghi di scelta (rielabora/modifica, prosegui/gestione/stampa) |
RNEWCONF |
Lettura configurazione calo peso |
Note¶
- Il codice usa
PERFORM ... THRUeGO TOin modo estensivo (stile legacy pre-convenzioni attuali). - Il raccordo commessa-preventivo su COGRACBB usa il tipo "CV";
rbb-a-bolcontiene il numero commessa,rbb-b-boll'anno+numero del preventivo. La ricerca inversa (dal preventivo alla commessa) usa la chiave secondariacogracbb.k02. - La commessa e' letta da LODCMTES tramite chiave secondaria
lct-chia2(studio+paziente+progressivo); servelodcmtes.k02. - Il numero commessa (
tm-num) e' popolato da COGS98W. Nel controllox-controlla-tm-prv-num, un preventivo conrbb-a-bol = 0e' considerato agganciabile (non ancora legato ad alcuna commessa). - La divisa: su rielaborazione la valuta resta quella memorizzata in testata preventivo (
tpr-currency), non quella corrente. - La numerazione preventivo usa l'anno di sistema (
sis-aa) cometpr-annoe il progressivo COGS25 cometpr-numero.