COGR07 - Ricostruzione ricerca: Codice Merce¶
Sorgente: cbl/cogr07.cbl | Tipo: Programma di menu / utility batch | Program-ID: COGR07
Menu: Sistema > Archivi > Ricostruzioni > Ricerche [Codice Merce]
Scopo¶
COGR07 ricostruisce da zero l'indice invertito di ricerca per codice merce COGSTCME. A differenza di COGR06 (che indicizza le parole della descrizione), qui le "parole chiave" indicizzate sono le componenti del codice merce: il sottogruppo (mer-sot) e il codice numerico (mer-cod). Per ogni merce, per ciascuna di queste componenti valorizzate, memorizza un riferimento compatto (il numero interno ram-nume letto da COGRACME) nella lista associata a quella "parola". E' l'indice che consente la ricerca rapida di una merce digitandone parti del codice.
Il programma svuota fisicamente COGSTCME e lo riscrive scandendo tutta l'anagrafica COGMERCI.
File e tabelle principali¶
| File/Tabella | Copybook (record) | Uso |
|---|---|---|
| COGMERCI | cogmerci.cpy (mer-rec) |
Anagrafica merce: sorgente scandita in sequenza; da ogni record si prendono mer-sot (sottogruppo, X(02)) e mer-cod (codice, 9(05)) |
| COGRACME | cogracme.cpy (ram-rec) |
Raccordo merce/numero: si legge per ottenere ram-nume (numero interno della merce) |
| COGSTCME | cogstcme.cpy (stcm-rec) |
Indice ricostruito: parola (componente codice) -> lista di numeri merce. Svuotato e riscritto |
| COGTABEL | cogtabel.cpy (euta-rec, tipo 70) |
Configurazione ricerche: record RICE/DEFINE |
| feurtab | cogfiles.cpy |
File tabellare di servizio |
Programmi chiamati¶
Il programma non richiama subroutine applicative per costruire l'indice. Nota: nonostante la copybook utils34.cpy sia inclusa in working-storage, la CALL a COGS34 non viene eseguita in questo programma (le "parole" da indicizzare - mer-sot e mer-cod - vengono prese direttamente dai campi anagrafici senza tokenizzazione). L'inserimento nell'indice e' interamente svolto dai paragrafi interni aggpal / aggpal-1..4. Vengono usate solo le routine standard delle copybook (finestre, messaggi, apertura file).
Configurazione (COGTABEL tipo 70 - RICE/DEFINE)¶
Legge da COGTABEL (euta-tipo=70, euta-cfg-arg=RICE, euta-cfg-key=DEFINE). Se assente: "Configurazione Assente!!" e termina.
Flag euta-c008 |
Uso in COGR07 |
|---|---|
euta-c008-cm |
Abilitazione ricerca su codice interno merce. Se = N -> "Manca Abilitazione !!" e termina |
Flusso principale¶
main / a000- init (ctr-abil,open-files,rd-azi), finestra di avviso con contatori "Merci Lette", "Stringhe Scritte", "Stringhe Riscrit.".- Lettura configurazione e controllo abilitazione
euta-c008-cm. a010-acc-conf: ESC esce, solo F3 prosegue.a020- reinizializzazione fisica:close cogstcme,open output cogstcme,close cogstcme,open i-o cogstcme.a1-agg-mer- scansione anagrafica (start/read nextsuCOGMERCIda low-values):- per ogni merce incrementa "Merci Lette";
read cogracme key ram-chia1conram-chia1=mer-chia: recuperaram-nume;- costruisce l'array locale
tabella(2 elementi,tab-mer): semer-sotnon e' spaces lo aggiunge come "parola"; semer-codnon e' zero lo aggiunge come "parola"; aggpal: per ognuna delle (fino a 2) parole valorizzate inserisceram-numenell'indice COGSTCME.fine- "Fine Elaborazione !!", chiusura dicogmerci,cogracme,cogstcme,cogtabele uscita.
Logica dell'indice COGSTCME¶
Ogni componente del codice diventa una chiave stcm-paro1 (X(05)). Come per COGSTDME, la lista dei numeri merce puo' superare la capacita' del record (stcm-tabe occurs 0 to 40) e viene impaginata con il progressivo di chiave stcm-prog1:
aggpal-1- la parola non esiste: crea il primo record (prog. 0) con il primo codice.aggpal-2- la parola esiste e c'e' spazio (stcm-ulti < 40): aggiunge il codice in coda e riscrive.aggpal-3/aggpal-4- record pieno (multipli di 40): crea/aggiorna un record aggiuntivo con progressivo maggiore di zero (calcolato condivide ... by 40), aggiornando i puntatoristcm-ulti(elementi occupati) estcm-punt(indice tabella) sul record capofila.
Note¶
- COGR07 dipende da un
COGRACMEgia' ricostruito e coerente (fornisceram-nume). La sequenza corretta e' COGR05 prima di COGR07. - La chiave dell'indice e' X(05): sia
mer-sot(2 caratteri) siamer-cod(5 cifre) vi rientrano;mer-codnumerico viene indicizzato come tale (l'edit visivo eventuale e' a carico della ricerca). - L'inclusione di
utils34.cpyin COGR07 e' residuale/ereditata dal programma gemello COGR06: qui l'areautil-s34non viene passata ad alcuna CALL. Se in futuro servisse indicizzare via COGS34 andrebbe aggiunta esplicitamente la chiamata. - La ricostruzione e' 1:n per merce (0, 1 o 2 voci indicizzate per merce, a seconda di quali componenti del codice sono valorizzate).