Vai al contenuto

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:

  1. svuota completamente COGSTLFM (open output + close, poi riapertura in i-o);
  2. scandisce il listino generale fornitori COGGENMF;
  3. per ogni riga valida recupera il numero di raccordo su COGRACLF;
  4. chiama la subroutine COGS34 per esplodere il codice merce fornitore nelle sue parole/sottostringhe di ricerca (configurazione RICLCM);
  5. per ogni parola scrive/aggiorna in COGSTLFM una 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

  1. main / a000 - init (ctr-abil, open-files, rd-azi), visualizza la finestra di avviso.
  2. Lettura configurazione: rd-tab legge COGTABEL tipo 70, argomento RICE, chiave DEFINE. Se assente -> "Configurazione Assente"; se euta-c008-licmf = 'N' -> "Manca Abilitazione" e uscita.
  3. a010 - acc-conf: attende la conferma. ESC esce, solo F3 prosegue.
  4. a020 - azzeramento indice: open output cogstlfm, close, open i-o cogstlfm.
  5. a1-agg-mer - scansione sequenziale di COGGENMF da low-value (start + read next):
  6. incrementa e mostra il contatore letti (ctr-m-l);
  7. salta i record senza fornitore (gmf-cf = zero) o senza codice merce fornitore (gmf-cmf = spaces);
  8. imposta ral-for/ral-cmf e a1-15-loop legge COGRACLF con chiave ral-chia1 per ottenere ral-nume;
  9. a1-20-loop chiama COGS34 passando gmf-cmf (lunghezza 22) e chiave RICLCM: ritorna in s34-paro(...) le parole di ricerca (s34-t elementi);
  10. a1-25-loop esegue aggpal per indicizzare ogni parola.
  11. aggpal / aggpal-1..4 - per ogni parola non vuota inserisce ral-nume nella lista dell'indice:
  12. se la parola non esiste (invalid key su read stgm-key1), crea il primo record (aggpal-1);
  13. se esiste con spazio libero (stgm-ulti < 40), lo appende (aggpal-2);
  14. 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.
  15. 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 COGSTLFM viene azzerato completamente ad ogni esecuzione e ricostruito da COGGENMF + 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 (COGGENMF invece di COGMERFO), il raccordo (COGRACLF invece di COGRACMF) e la chiave di configurazione COGS34 (RICLCM).
  • I paragrafi usano lo stile legacy PERFORM ... THRU e GO TO; sono qui descritti per fedelta' al sorgente, non come pattern da replicare.