Vai al contenuto

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:

  1. svuota completamente COGSTLFD (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 la descrizione merce nelle sue parole/sottostringhe di ricerca (configurazione RICLDM);
  5. per ogni parola scrive/aggiorna in COGSTLFD 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

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

  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-lidm = 'N' -> "Manca Abilitazione" e uscita.
  3. a010 - acc-conf: attende la conferma. ESC esce, solo F3 prosegue.
  4. a020 - azzeramento indice: open output cogstlfd, close, open i-o cogstlfd.
  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-dm (descrizione merce, lunghezza 36) e chiave RICLDM: 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 stgd-key1), crea il primo record (aggpal-1);
  13. se esiste con spazio libero (stgd-ulti < 40), lo appende (aggpal-2);
  14. 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.
  15. 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 COGSTLFD viene azzerato completamente ad ogni esecuzione e ricostruito da COGGENMF + 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 chiave RICLDM. E' l'unico dei quattro programmi che ricerca per testo descrittivo anziche' per codice.
  • Nota: il codice gmf-dm e' definito pic x(43) in coggenmf.cpy mentre 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 ... THRU e GO TO; sono qui descritti per fedelta' al sorgente, non come pattern da replicare.