Vai al contenuto

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-, asnmtrlkbsnmtrlk) 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-caricax-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-tree crea il nodo radice; l'espansione dei rami avviene on-demand (msg-tv-expandingb2-add-childrenb21-espandi-matricola), che scorre ASNMTRLK per 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 aggancia asn049-id-mtr in coda (b1-aggancio-dopo), impostando l'impianto come 'I'.
  • SCOLLEGA-MATR-BKG (b-scollega-matr-background): scollega asn049-id-mtr dall'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 impianto
  • m-asn049-13-1: la matricola coincide con l'impianto in elaborazione
  • m-asn049-16-1/17-1: conferma scollegamento con figli / destinazione figlia della partenza
  • m-asn049-34-1/34-2: matricola di cliente diverso
  • m-asn049-43-1/44-1: id impianto mancante / inesistente
  • m-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-) e BSNMTRLK (bmlk-): la seconda e' la stessa tabella richiamata con nomi di verbi/campi diversi (via COPY REPLACING) per gestire simultaneamente due cursori sull'albero.
  • Ogni modifica ai link richiama b1-aggiorna-mtr-bsnmtrlk/b1-aggiorna-bsnmatri per "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-formtree-events, che gestisce selezione, doppio click (convertito in Invio in modalita' selezione) ed espansione lazy dei rami.
  • In apri gli set environment "KEYSTROKE" rimappano temporaneamente Ctrl+X / Ctrl+V come eccezioni dedicate durante l'accept del tree.