Vai al contenuto

COGR07 - Ricostruzione ricerca: Codice Merce

Sorgente: cbl/cogr07.cbl | Tipo: Programma di menu / utility batch | Program-ID: COGR07

Menu: Sistema > Archivi > Ricostruzioni > Ricerche [Codice Merce]


Scopo

COGR07 ricostruisce da zero l'indice invertito di ricerca per codice merce COGSTCME. A differenza di COGR06 (che indicizza le parole della descrizione), qui le "parole chiave" indicizzate sono le componenti del codice merce: il sottogruppo (mer-sot) e il codice numerico (mer-cod). Per ogni merce, per ciascuna di queste componenti valorizzate, memorizza un riferimento compatto (il numero interno ram-nume letto da COGRACME) nella lista associata a quella "parola". E' l'indice che consente la ricerca rapida di una merce digitandone parti del codice.

Il programma svuota fisicamente COGSTCME e lo riscrive scandendo tutta l'anagrafica COGMERCI.

File e tabelle principali

File/Tabella Copybook (record) Uso
COGMERCI cogmerci.cpy (mer-rec) Anagrafica merce: sorgente scandita in sequenza; da ogni record si prendono mer-sot (sottogruppo, X(02)) e mer-cod (codice, 9(05))
COGRACME cogracme.cpy (ram-rec) Raccordo merce/numero: si legge per ottenere ram-nume (numero interno della merce)
COGSTCME cogstcme.cpy (stcm-rec) Indice ricostruito: parola (componente codice) -> lista di numeri merce. Svuotato e riscritto
COGTABEL cogtabel.cpy (euta-rec, tipo 70) Configurazione ricerche: record RICE/DEFINE
feurtab cogfiles.cpy File tabellare di servizio

Programmi chiamati

Il programma non richiama subroutine applicative per costruire l'indice. Nota: nonostante la copybook utils34.cpy sia inclusa in working-storage, la CALL a COGS34 non viene eseguita in questo programma (le "parole" da indicizzare - mer-sot e mer-cod - vengono prese direttamente dai campi anagrafici senza tokenizzazione). L'inserimento nell'indice e' interamente svolto dai paragrafi interni aggpal / aggpal-1..4. Vengono usate solo le routine standard delle copybook (finestre, messaggi, apertura file).

Configurazione (COGTABEL tipo 70 - RICE/DEFINE)

Legge da COGTABEL (euta-tipo=70, euta-cfg-arg=RICE, euta-cfg-key=DEFINE). Se assente: "Configurazione Assente!!" e termina.

Flag euta-c008 Uso in COGR07
euta-c008-cm Abilitazione ricerca su codice interno merce. Se = N -> "Manca Abilitazione !!" e termina

Flusso principale

  1. main / a000 - init (ctr-abil, open-files, rd-azi), finestra di avviso con contatori "Merci Lette", "Stringhe Scritte", "Stringhe Riscrit.".
  2. Lettura configurazione e controllo abilitazione euta-c008-cm.
  3. a010 - acc-conf: ESC esce, solo F3 prosegue.
  4. a020 - reinizializzazione fisica: close cogstcme, open output cogstcme, close cogstcme, open i-o cogstcme.
  5. a1-agg-mer - scansione anagrafica (start/read next su COGMERCI da low-values):
  6. per ogni merce incrementa "Merci Lette";
  7. read cogracme key ram-chia1 con ram-chia1 = mer-chia: recupera ram-nume;
  8. costruisce l'array locale tabella (2 elementi, tab-mer): se mer-sot non e' spaces lo aggiunge come "parola"; se mer-cod non e' zero lo aggiunge come "parola";
  9. aggpal: per ognuna delle (fino a 2) parole valorizzate inserisce ram-nume nell'indice COGSTCME.
  10. fine - "Fine Elaborazione !!", chiusura di cogmerci, cogracme, cogstcme, cogtabel e uscita.

Logica dell'indice COGSTCME

Ogni componente del codice diventa una chiave stcm-paro1 (X(05)). Come per COGSTDME, la lista dei numeri merce puo' superare la capacita' del record (stcm-tabe occurs 0 to 40) e viene impaginata con il progressivo di chiave stcm-prog1:

  • aggpal-1 - la parola non esiste: crea il primo record (prog. 0) con il primo codice.
  • aggpal-2 - la parola esiste e c'e' spazio (stcm-ulti < 40): aggiunge il codice in coda e riscrive.
  • aggpal-3 / aggpal-4 - record pieno (multipli di 40): crea/aggiorna un record aggiuntivo con progressivo maggiore di zero (calcolato con divide ... by 40), aggiornando i puntatori stcm-ulti (elementi occupati) e stcm-punt (indice tabella) sul record capofila.

Note

  • COGR07 dipende da un COGRACME gia' ricostruito e coerente (fornisce ram-nume). La sequenza corretta e' COGR05 prima di COGR07.
  • La chiave dell'indice e' X(05): sia mer-sot (2 caratteri) sia mer-cod (5 cifre) vi rientrano; mer-cod numerico viene indicizzato come tale (l'edit visivo eventuale e' a carico della ricerca).
  • L'inclusione di utils34.cpy in COGR07 e' residuale/ereditata dal programma gemello COGR06: qui l'area util-s34 non viene passata ad alcuna CALL. Se in futuro servisse indicizzare via COGS34 andrebbe aggiunta esplicitamente la chiamata.
  • La ricostruzione e' 1:n per merce (0, 1 o 2 voci indicizzate per merce, a seconda di quali componenti del codice sono valorizzate).