COGR09 - Ricostruzione ricerca: Codice Merce Fornitore¶
Sorgente: cbl/cogr09.cbl | Tipo: Programma di menu / elaborazione batch | Program-ID: COGR09
Menu: Sistema > Archivi > Ricostruzioni > Ricerche [Codice Merce Fornitore]
Scopo¶
COGR09 ricostruisce da zero l'archivio-indice di ricerca COGSTCMF, usato dal
gestionale per trovare rapidamente una merce partendo dal codice merce
fornitore (la sigla/codice con cui il fornitore identifica l'articolo). Fa
parte della famiglia COGR* di "Ricostruzione" degli archivi ausiliari di
ricerca (indici svuotati e riscritti scandendo la tabella sorgente).
Il programma:
- svuota completamente
COGSTCMF(open output + close, poi riapertura in i-o); - scandisce l'anagrafica di legame merce interna / codice merce fornitore
COGMERFO; - per ogni legame recupera il numero di raccordo su
COGRACMF; - chiama la subroutine COGS34 per esplodere il codice merce
fornitore nelle sue parole/sottostringhe di ricerca (configurazione
RICCMF); - per ogni parola scrive/aggiorna in
COGSTCMFuna 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 lette, stringhe scritte, stringhe riscritte).
File e tabelle principali¶
| File/Tabella | Copybook | Uso |
|---|---|---|
| COGSTCMF | cogstcmf.cpy (stmf-rec) |
Archivio-indice ricerca per codice merce fornitore: svuotato e ricostruito |
| COGMERFO | cogmerfo.cpy (mfr-rec) |
Legame codice merce interno / codice merce fornitore: sorgente scandita |
| COGRACMF | cogracmf.cpy (raf-rec) |
Raccordo merce fornitore / numero (raf-nume): fornisce l'ID inserito nell'indice |
| COGTABEL | cogtabel.cpy (euta-rec, tipo 70) |
Configurazione ricerche RICE/DEFINE: flag di abilitazione (euta-c008-cmf) |
| FEURTAB | cogfiles.cpy |
File tabelle generale (aziende, controlli standard) |
Struttura del record indice (COGSTCMF)¶
Il record stmf-rec implementa una lista compressa di ID per ogni parola:
stmf-key1=stmf-paro1(parola di 6 byte) +stmf-prog1(progressivo di chiave,9(04)): una parola con molte occorrenze si "spezza" su piu' record a progressivo crescente;stmf-ulti: puntatore al primo elemento tabellare libero;stmf-punt: numero di elementi validi nella tabella (OCCURS 0 TO 40);stmf-tabe(...): fino a 40 numeri di raccordo (raf-nume) per record.
Flusso principale¶
main / a000- init (ctr-abil,rd-azi,open-files), visualizza la finestra di avviso.- Lettura configurazione:
rd-tableggeCOGTABELtipo 70, argomentoRICE, chiaveDEFINE. Se assente -> "Configurazione Assente"; seeuta-c008-cmf = 'N'-> "Manca Abilitazione" e uscita. a010-acc-conf: attende la conferma. ESC esce, solo F3 prosegue.a020- azzeramento indice:close cogstcmf,open output cogstcmf,close,open i-o cogstcmf(svuotamento fisico del file).a1-agg-mer- scansione sequenziale diCOGMERFOdalow-value(start+read next):- incrementa e mostra il contatore merci lette (
ctr-m-l); - salta i record senza fornitore (
mfr-for = zero) o senza codice merce fornitore (mfr-cod-for = spaces); a1-15-loopleggeCOGRACMFcon chiaveraf-chia1(deriva damfr-chia1) per ottenereraf-nume;a1-20-loopchiamaCOGS34passandomfr-cod-for(lunghezza 22) e chiaveRICCMF: ritorna ins34-paro(...)le parole di ricerca (s34-telementi);a1-25-loopesegueaggpalper indicizzare ogni parola.aggpal/aggpal-1..4- per ogni parola non vuota inserisceraf-numenella lista dell'indice:- se la parola non esiste (
invalid keysu readstmf-key1), crea il primo record (aggpal-1); - se esiste con spazio libero (
stmf-ulti < 40), lo appende (aggpal-2); - a lista piena calcola il record a progressivo successivo via
divide stmf-ulti by 40(quoziente/div1->stmf-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 RICCMF) 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-cmf | Abilitazione ricerca su codice merce fornitore (S/N); se N il programma non parte |
| RICE | RICCMF | euta-c010 | Lunghezze e delimitatori con cui COGS34 spezza il codice in parole di ricerca |
Note¶
- L'indice
COGSTCMFviene azzerato completamente ad ogni esecuzione e ricostruito: e' un archivio derivato, ricostruibile in qualsiasi momento daCOGMERFO+COGRACMF. - L'elemento memorizzato nell'indice e' il numero di raccordo
raf-nume(COGRACMF), non direttamente la chiave merce: la risoluzione parola -> merce passa quindi per COGRACMF. - La suddivisione a blocchi da 40 (
divide ... by 40) serve a mantenere il recordCOGSTCMFdi dimensione limitata (14-174 byte) distribuendo molte occorrenze su piu' record a progressivo crescente. - I paragrafi usano lo stile legacy
PERFORM ... THRUeGO TO; sono qui descritti per fedelta' al sorgente, non come pattern da replicare.