COGR11 - Ricostruzione ricerca: List.Gen.Fornitori X C.M.F.¶
Sorgente: cbl/cogr11.cbl | Tipo: Programma di menu / elaborazione batch | Program-ID: COGR11
Menu: Sistema > Archivi > Ricostruzioni > Ricerche [List.Gen.Fornitori X C.M.F.]
Scopo¶
COGR11 ricostruisce da zero l'archivio-indice di ricerca COGSTLFM, usato per
trovare rapidamente una riga del listino generale fornitori (COGGENMF)
partendo dal codice merce fornitore (C.M.F.). Fa parte della famiglia
COGR* di "Ricostruzione" degli archivi ausiliari di ricerca.
Il programma:
- svuota completamente
COGSTLFM(open output + close, poi riapertura in i-o); - scandisce il listino generale fornitori
COGGENMF; - per ogni riga valida recupera il numero di raccordo su
COGRACLF; - chiama la subroutine COGS34 per esplodere il codice merce
fornitore nelle sue parole/sottostringhe di ricerca (configurazione
RICLCM); - per ogni parola scrive/aggiorna in
COGSTLFMuna lista di numeri di raccordo, raggruppati per parola.
E' interattivo: mostra la finestra di avviso "Il programma distruggera' tutti i dati esistenti", attende conferma con F3 (ESC per uscire) e aggiorna a video i contatori (merci fornitore lette, stringhe scritte, stringhe riscritte).
Prerequisito¶
COGR11 legge da COGRACLF il numero progressivo (ral-nume) da inserire
nell'indice. Il raccordo COGRACLF va quindi ricostruito prima con
COGR10. Se il raccordo non e' allineato, l'indice
COGSTLFM puntera' a numeri inesistenti o errati.
File e tabelle principali¶
| File/Tabella | Copybook | Uso |
|---|---|---|
| COGSTLFM | cogstlfm.cpy (stgm-rec) |
Archivio-indice ricerca listino generale per codice merce fornitore: svuotato e ricostruito |
| COGGENMF | coggenmf.cpy (gmf-rec) |
Listino generale fornitori: sorgente scandita |
| COGRACLF | cograclf.cpy (ral-rec) |
Raccordo listino / numero (ral-nume): fornisce l'ID inserito nell'indice |
| COGTABEL | cogtabel.cpy (euta-rec, tipo 70) |
Configurazione ricerche RICE/DEFINE: flag di abilitazione (euta-c008-licmf) |
| FEURTAB | cogfiles.cpy |
File tabelle generale (aziende, controlli standard) |
Struttura del record indice (COGSTLFM)¶
Il record stgm-rec implementa una lista compressa di ID per ogni parola:
stgm-key1=stgm-paro1(parola di 6 byte) +stgm-prog1(progressivo di chiave,9(04)): una parola con molte occorrenze si "spezza" su piu' record a progressivo crescente;stgm-ulti: puntatore al primo elemento tabellare libero;stgm-punt: numero di elementi validi nella tabella (OCCURS 0 TO 40);stgm-tabe(...): fino a 40 numeri di raccordo (ral-nume) per record.
Flusso principale¶
main / a000- init (ctr-abil,open-files,rd-azi), visualizza la finestra di avviso.- Lettura configurazione:
rd-tableggeCOGTABELtipo 70, argomentoRICE, chiaveDEFINE. Se assente -> "Configurazione Assente"; seeuta-c008-licmf = 'N'-> "Manca Abilitazione" e uscita. a010-acc-conf: attende la conferma. ESC esce, solo F3 prosegue.a020- azzeramento indice:open output cogstlfm,close,open i-o cogstlfm.a1-agg-mer- scansione sequenziale diCOGGENMFdalow-value(start+read next):- incrementa e mostra il contatore letti (
ctr-m-l); - salta i record senza fornitore (
gmf-cf = zero) o senza codice merce fornitore (gmf-cmf = spaces); - imposta
ral-for/ral-cmfea1-15-loopleggeCOGRACLFcon chiaveral-chia1per ottenereral-nume; a1-20-loopchiamaCOGS34passandogmf-cmf(lunghezza 22) e chiaveRICLCM: ritorna ins34-paro(...)le parole di ricerca (s34-telementi);a1-25-loopesegueaggpalper indicizzare ogni parola.aggpal/aggpal-1..4- per ogni parola non vuota inserisceral-numenella lista dell'indice:- se la parola non esiste (
invalid keysu readstgm-key1), crea il primo record (aggpal-1); - se esiste con spazio libero (
stgm-ulti < 40), lo appende (aggpal-2); - a lista piena calcola il record a progressivo successivo via
divide stgm-ulti by 40(quoziente/div1->stgm-prog1, resto/div2-> posizione), creando (aggpal-3) o riscrivendo (aggpal-4) il record corretto. Aggiorna i contatori stringhe scritte/riscritte. fine- chiude i file ed esce (z-99-exit-program).
Sottoprogrammi chiamati¶
| Programma | Ruolo |
|---|---|
| COGS34 | Esplode il codice merce fornitore nelle parole/sottostringhe di ricerca (metodo "B", chiave RICLCM) secondo la configurazione tipo 70 |
| box-msg / DIALOGS | Finestre di avviso e messaggistica (via winmsg.cpy) |
Configurazioni (COGTABEL tipo 70)¶
| Argomento | Chiave | Campo | Uso |
|---|---|---|---|
| RICE | DEFINE | euta-c008-licmf | Abilitazione ricerca listino generale per codice merce fornitore (S/N); se N il programma non parte |
| RICE | RICLCM | euta-c010 | Lunghezze e delimitatori con cui COGS34 spezza il codice in parole di ricerca |
Note¶
- L'indice
COGSTLFMviene azzerato completamente ad ogni esecuzione e ricostruito daCOGGENMF+COGRACLF. - L'elemento memorizzato nell'indice e' il numero di raccordo
ral-nume(COGRACLF), non la chiave di listino: la risoluzione parola -> riga di listino passa quindi per COGRACLF. - Ordine di ricostruzione della catena listino generale: COGR10 (raccordo) -> COGR11 (indice per C.M.F.) e COGR12 (indice per descrizione).
- La struttura dell'indice e la logica di suddivisione a blocchi da 40 sono
identiche a quelle di COGR09; cambiano la sorgente
(
COGGENMFinvece diCOGMERFO), il raccordo (COGRACLFinvece diCOGRACMF) e la chiave di configurazione COGS34 (RICLCM). - I paragrafi usano lo stile legacy
PERFORM ... THRUeGO TO; sono qui descritti per fedelta' al sorgente, non come pattern da replicare.