Vai al contenuto

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:

  1. svuota completamente COGSTCMF (open output + close, poi riapertura in i-o);
  2. scandisce l'anagrafica di legame merce interna / codice merce fornitore COGMERFO;
  3. per ogni legame recupera il numero di raccordo su COGRACMF;
  4. chiama la subroutine COGS34 per esplodere il codice merce fornitore nelle sue parole/sottostringhe di ricerca (configurazione RICCMF);
  5. per ogni parola scrive/aggiorna in COGSTCMF 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 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

  1. main / a000 - init (ctr-abil, rd-azi, open-files), 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-cmf = 'N' -> "Manca Abilitazione" e uscita.
  3. a010 - acc-conf: attende la conferma. ESC esce, solo F3 prosegue.
  4. a020 - azzeramento indice: close cogstcmf, open output cogstcmf, close, open i-o cogstcmf (svuotamento fisico del file).
  5. a1-agg-mer - scansione sequenziale di COGMERFO da low-value (start + read next):
  6. incrementa e mostra il contatore merci lette (ctr-m-l);
  7. salta i record senza fornitore (mfr-for = zero) o senza codice merce fornitore (mfr-cod-for = spaces);
  8. a1-15-loop legge COGRACMF con chiave raf-chia1 (deriva da mfr-chia1) per ottenere raf-nume;
  9. a1-20-loop chiama COGS34 passando mfr-cod-for (lunghezza 22) e chiave RICCMF: 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 raf-nume nella lista dell'indice:
  12. se la parola non esiste (invalid key su read stmf-key1), crea il primo record (aggpal-1);
  13. se esiste con spazio libero (stmf-ulti < 40), lo appende (aggpal-2);
  14. 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.
  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 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 COGSTCMF viene azzerato completamente ad ogni esecuzione e ricostruito: e' un archivio derivato, ricostruibile in qualsiasi momento da COGMERFO + 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 record COGSTCMF di dimensione limitata (14-174 byte) distribuendo molte occorrenze su piu' record a progressivo crescente.
  • I paragrafi usano lo stile legacy PERFORM ... THRU e GO TO; sono qui descritti per fedelta' al sorgente, non come pattern da replicare.