COGR12 - Ricostruzione ricerca: List.Gen.Fornitori X Descrizione¶
Sorgente: cbl/cogr12.cbl | Tipo: Programma di menu / elaborazione batch | Program-ID: COGR12
Menu: Sistema > Archivi > Ricostruzioni > Ricerche [List.Gen.Fornitori X Descr.]
Scopo¶
COGR12 ricostruisce da zero l'archivio-indice di ricerca COGSTLFD (nome
fisico COGSTFLD.ARC), usato per trovare rapidamente una riga del listino
generale fornitori (COGGENMF) partendo dalla descrizione merce. Fa
parte della famiglia COGR* di "Ricostruzione" degli archivi ausiliari di
ricerca.
Il programma:
- svuota completamente
COGSTLFD(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 la descrizione merce
nelle sue parole/sottostringhe di ricerca (configurazione
RICLDM); - per ogni parola scrive/aggiorna in
COGSTLFDuna 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¶
COGR12 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
COGSTLFD puntera' a numeri inesistenti o errati.
File e tabelle principali¶
| File/Tabella | Copybook | Uso |
|---|---|---|
| COGSTLFD | cogstlfd.cpy (stgd-rec) |
Archivio-indice ricerca listino generale per descrizione (fisico COGSTFLD.ARC): svuotato e ricostruito |
| COGGENMF | coggenmf.cpy (gmf-rec) |
Listino generale fornitori: sorgente scandita (descrizione in gmf-dm) |
| 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-lidm) |
| FEURTAB | cogfiles.cpy |
File tabelle generale (aziende, controlli standard) |
Struttura del record indice (COGSTLFD)¶
Il record stgd-rec implementa una lista compressa di ID per ogni parola:
stgd-key1=stgd-paro1(parola di 9 byte) +stgd-prog1(progressivo di chiave,9(04)): una parola con molte occorrenze si "spezza" su piu' record a progressivo crescente. La parola e' di 9 byte (contro i 6 byte degli indici sui codici) perche' indicizza descrizioni testuali;stgd-ulti: puntatore al primo elemento tabellare libero;stgd-punt: numero di elementi validi nella tabella (OCCURS 0 TO 40);stgd-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-lidm = 'N'-> "Manca Abilitazione" e uscita. a010-acc-conf: attende la conferma. ESC esce, solo F3 prosegue.a020- azzeramento indice:open output cogstlfd,close,open i-o cogstlfd.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-dm(descrizione merce, lunghezza 36) e chiaveRICLDM: 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 readstgd-key1), crea il primo record (aggpal-1); - se esiste con spazio libero (
stgd-ulti < 40), lo appende (aggpal-2); - a lista piena calcola il record a progressivo successivo via
divide stgd-ulti by 40(quoziente/div1->stgd-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 la descrizione merce nelle parole/sottostringhe di ricerca (metodo "B", chiave RICLDM) 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-lidm | Abilitazione ricerca listino generale per descrizione (S/N); se N il programma non parte |
| RICE | RICLDM | euta-c010 | Lunghezze e delimitatori con cui COGS34 spezza la descrizione in parole di ricerca |
Note¶
- L'indice
COGSTLFDviene azzerato completamente ad ogni esecuzione e ricostruito daCOGGENMF+COGRACLF. - Indicizza la descrizione (
gmf-dm), non un codice: per questo la parola di chiave e' piu' lunga (9 byte) e la sorgente passata a COGS34 e' lunga 36 caratteri con chiaveRICLDM. E' l'unico dei quattro programmi che ricerca per testo descrittivo anziche' per codice. - Nota: il codice
gmf-dme' definitopic x(43)incoggenmf.cpymentre COGR12 passa a COGS34 una lunghezza di 36 (s34-l-str = 36): l'indice copre percio' solo i primi 36 caratteri della descrizione. - Ordine di ricostruzione della catena listino generale: COGR10 (raccordo) -> COGR11 (indice per C.M.F.) e COGR12 (indice per descrizione).
- I paragrafi usano lo stile legacy
PERFORM ... THRUeGO TO; sono qui descritti per fedelta' al sorgente, non come pattern da replicare.