ASN049 - Gestione impianti (albero matricole)¶
Sorgente: cbl/asn049.cbl (3.100 righe) | Tipo: Programma interattivo con tree-view (albero gerarchico di matricole); anche richiamabile in background come subroutine di manutenzione dell'albero
Menu: Assist 2.0 > Archivi > Impianti
Scopo¶
Gestisce un "impianto" come albero gerarchico di matricole (ASNMATRI collegate tra loro via ASNMTRLK). Un impianto e' una matricola radice (amtr-fl-impianto = 'I') con matricole figlie/sottoimpianti ('P' = parte di impianto). Il programma mostra l'impianto in un controllo tree-view e consente di:
- Agganciare matricole figlie / prima / dopo un elemento selezionato (ricerca via ASN200);
- Scollegare una matricola e il ramo sottostante;
- Spostare rami (taglia/incolla figlia/prima/dopo);
- Marcare una matricola come "fuori contratto" o "parte scollegata";
- Aprire la gestione della singola matricola (ASN030), la distinta base (ASN03B), il dossier commessa (CRMK10);
- Creare un contratto di manutenzione (ASN050).
L'ordinamento dei fratelli e' realizzato con la tecnica del "precedente" (amlk-id-prec): ogni matricola punta alla precedente sullo stesso ramo (il primo figlio ha precedente = 0).
Il programma e' anche una subroutine di manutenzione dell'albero in background: le operazioni AGGIUNGI-MATR-BKG e SCOLLEGA-MATR-BKG (usate ad es. da ASN030) manipolano ASNMTRLK senza aprire la maschera.
Interfaccia chiamato (linkage util-asn049)¶
| Campo | Uso |
|---|---|
asn049-called / asn049-caller |
Identificativi (se coincidono → w-dc-called = 'S') |
asn049-ope |
Operazione: GESTIONE (default) / AGGIUNGI-MATR-BKG / SCOLLEGA-MATR-BKG |
asn049-id-impianto |
Id matricola radice dell'impianto |
asn049-id-mtr |
Id matricola da agganciare/scollegare (operazioni background) |
asn049-selezione-attiva |
S = modalita' selezione (Invio restituisce la matricola scelta, no popup) |
asn049-id-selezionato |
Output: matricola selezionata (modalita' selezione) |
asn049-esito / asn049-msg |
Output esito/messaggio (operazioni background) |
Chiamante individuato: ASN030 usa SCOLLEGA-MATR-BKG in cancellazione matricola collegata a impianto.
File acceduti¶
Lettura/scrittura¶
| File | Copybook | Uso |
|---|---|---|
| ASNMATRI | amtr-rec |
Matricola: amtr-fl-impianto (I/P/spazio), amtr-fuori-contratto, s/n, tipo, modello, cliente. Accesso anche con lock (rd-asnmatri-lk) per aggiornare i flag |
| ASNMTRLK | amlk-rec |
Link matricola↔impianto: amlk-id-mtr, amlk-id-padre, amlk-id-prec. Chiave k02 (per padre) |
| BSNMTRLK | bmlk-rec (COPY replacing amlk-→bmlk-, asnmtrlk→bsnmtrlk) |
Vista alternativa dello stesso file link, usata per le operazioni di riorganizzazione dell'albero |
| BSNMATRI | bmtr-rec |
Aggiornamento matricole collegate a un link (per forzare l'esportazione dati) |
| ASNMTRTP | amtp-rec |
Tipo matricola (descrizione amtp-des) |
| ASNMODEL | amod-rec |
Modello matricola (amod-des) — descrizione nodo con config B |
| ASNMTRDB | amdb-rec |
Presenza distinta base (prefisso "(DB)" nella descrizione nodo) |
| ASNCNMTR | acnc-rec |
Contratti collegati alla matricola (ricerca contratto piu' recente). Chiave k02 |
| ASNCNTES | acnt-rec |
Testata contratto (acnt-data-a, acnt-fl-chiuso) |
| ASNCNTE2 | acn2-rec |
acn2-data-scadenza (disdetta anticipata, TASK-2499) |
| COGGEANA | ana-rec |
Cliente dell'impianto (nome) |
Transito¶
| File | Base | Nome fisico | Scopo |
|---|---|---|---|
| cogtrans | dichiarata inline (trs-rec: id-mtr, mtr-padre, mtr-prec, handle) |
#$asn049_<oper> in ext-tmp-dir |
File di transito temporaneo (aperto/creato/cancellato); struttura per mappare id matricola → handle di nodo tree |
Chiavi secondarie¶
cogtrans.k01,asnmtrlk.k02,asncnmtr.k02,bsnmtrlk.k02(via COPY replacing)
Programmi chiamati¶
| Programma | Contesto |
|---|---|
| ASN200 | ASN200-CALLED — F9/ricerca matricola da agganciare (filtrata per cliente impianto) |
| ASN030 | Menu tree "Gestione matricola" (ASN030 modalita' M su matricola selezionata) |
| ASN03B | Menu tree "Distinta base" (ASN03B) |
| ASN050 | Menu "Crea contratto manutenzione" (asn050-id-matricola) |
| CRMK10 | Menu tree "Dossier" — gestione dossier commessa impianto |
| RNEWCONF | Configurazioni (x99-confi) |
| W$MENU / W$BITMAP | Menu pop-up tree, menu a tendina File/Operazioni, bitmap albero (all16.bmp) |
Configurazioni RNEWCONF (x99-confi)¶
| Idx | Gruppo | Chiave | Variabile | Effetto |
|---|---|---|---|---|
| 01 | COGESYS |
DEBUG |
tm-cfg-debug |
S = mostra i dati "hidden" grezzi nella descrizione nodo (debug) |
| 02 | ASS-MTR |
SEL-DETTAGLIO-IMPIANTO |
tm-cfg-sel-des |
Formato descrizione nodo: A = tipo + s/n, B = modello + s/n, C = tipo + s/n + n. inventario |
| 03 | commesse |
commessa-impianto |
tm-cfg-commessa-impianto |
Abilita dossier commessa (pulsante F7) |
| 04 | commesse |
tipo-dossier-commessa |
tm-cfg-tipo-dossier-commessa |
Tipo dossier per commessa impianto |
(link: COGESYS, ASS-MTR, commesse)
Logica di elaborazione¶
Struttura dell'albero (amlk-id-prec)¶
Ogni riga di ASNMTRLK (e BSNMTRLK) collega una matricola al suo padre e alla matricola precedente sullo stesso ramo:
Matricola Padre Precedente
100 imp 0 <- primo figlio
75 imp 100
115 imp 75
L'inserimento/spostamento/eliminazione ricuce la catena dei "precedenti" (vedi commenti dettagliati in b1-scollega).
Caricamento (a-carica → x-init-tree)¶
- Verifica e carica la matricola radice (
x-controlla-tm-id-impianto): s/n, descrizione, modello, tipo, cliente. - Se la matricola non era ancora un impianto (tipo precedente = matricola semplice) chiede il flag "Parte di impianto?" (
tm-fl-parte), altrimenti passa oltre. x-init-treecrea il nodo radice; l'espansione dei rami avviene on-demand (msg-tv-expanding→b2-add-children→b21-espandi-matricola), che scorreASNMTRLKper padre/precedente e aggiunge i figli con l'icona appropriata.
Composizione descrizione nodo (b3-componi-des)¶
- Prefisso "(DB)" se la matricola ha distinta base (
ASNMTRDB). - Corpo secondo
sel-des(A/B/C) con tipo/modello + s/n (+ n. inventario). - Suffisso "- contr.: NNN" se collegata a un contratto (via
b4-cerca-contratto, che sceglie il piu' recente considerando la disdetta anticipata TASK-2499) e "(Scollega...)" se parte scollegata.
Operazioni sull'albero (b1-gestione-tree, via popup/tasti)¶
| Evento (Ctrl / F) | Paragrafo | Azione |
|---|---|---|
aggancia-figlia (Ctrl+F) |
b1-aggancio-figlia |
Aggancia una matricola come figlia dell'elemento selezionato |
aggancia-prima (Ctrl+J) |
b1-aggancio-prima |
Aggancia sullo stesso ramo prima dell'elemento |
aggancia-dopo (Ctrl+A) |
b1-aggancio-dopo |
Aggancia sullo stesso ramo dopo l'elemento |
elimina (Ctrl+E) |
b1-scollega + b1-imposta-parte* |
Scollega matricola e ramo dall'impianto |
taglia (Ctrl+X) |
memorizza tm-matricola-da-eliminare |
Prepara lo spostamento |
incolla-figlia/prima/dopo (Ctrl+G/P/V) |
b1-scollega + b1-aggancio-* |
Sposta il ramo tagliato |
fuori-contratto |
menu | Toggle amtr-fuori-contratto + icona |
parte-scollegata |
menu | Toggle amtr-fl-impianto P/spazio |
Controlli preventivi: b1-controlla-nuova-matricola (non gia' figlia di altro impianto, stesso cliente, non l'impianto stesso), b1-controlla-matricola-da-spostare (la destinazione non puo' essere figlia della matricola di partenza), b1-cerca-stesso-antenato (ottimizza il refresh dei rami).
Dopo ogni modifica strutturale, b1-imposta-parte/b1-imposta-parte-bis ricalcolano il flag amtr-fl-impianto (I/P/spazio) in base alla presenza di figli e/o padri.
Operazioni background (senza maschera)¶
AGGIUNGI-MATR-BKG(b-aggiungi-matr-background): cerca l'ultima matricola in sequenza sull'impianto e agganciaasn049-id-mtrin coda (b1-aggancio-dopo), impostando l'impianto come'I'.SCOLLEGA-MATR-BKG(b-scollega-matr-background): scollegaasn049-id-mtrdall'impianto (b1-scollega+b1-imposta-parte*) se risulta collegata.
Messaggi principali¶
Messaggi maschera m-asn049-NN-1 (da .prc), tra cui:
m-asn049-3-1..10-1: impedimenti di aggancio/scollegamento sulla radice (ramo 1)m-asn049-11-1: matricola gia' figlia di un altro impiantom-asn049-13-1: la matricola coincide con l'impianto in elaborazionem-asn049-16-1/17-1: conferma scollegamento con figli / destinazione figlia della partenzam-asn049-34-1/34-2: matricola di cliente diversom-asn049-43-1/44-1: id impianto mancante / inesistentem-asn049-29-1: errore apertura file transito
Storico modifiche significative (dal sorgente)¶
- 020216: menu a tendina File/Operazioni con voce "Crea contratto manutenzione" (ASN050).
- 171125 (TASK-2499): nella ricerca del contratto piu' recente (
b4-cerca-contratto) si considera la disdetta anticipata (acnt-fl-chiuso = 'D'+acn2-data-scadenza).
Note implementative¶
- Le operazioni usano la coppia
ASNMTRLK(amlk-) eBSNMTRLK(bmlk-): la seconda e' la stessa tabella richiamata con nomi di verbi/campi diversi (viaCOPY REPLACING) per gestire simultaneamente due cursori sull'albero. - Ogni modifica ai link richiama
b1-aggiorna-mtr-bsnmtrlk/b1-aggiorna-bsnmatriper "toccare" (rwr) le matricole coinvolte e garantire l'esportazione dei dati (sincronizzazione esterna). - La descrizione del nodo usa
#come separatore interno poi sostituito con spazio (inspect ... replacing all "#" by " "). - La subroutine tree-view e' agganciata via
event procedure/z-99-event-form→tree-events, che gestisce selezione, doppio click (convertito in Invio in modalita' selezione) ed espansione lazy dei rami. - In
aprigliset environment "KEYSTROKE"rimappano temporaneamente Ctrl+X / Ctrl+V come eccezioni dedicate durante l'accept del tree.