COGV96 — Pulizia e riorganizzazione movimenti di prima nota magazzino¶
Sorgente: cbl/cogv96.cbl | Tipo: interattivo a maschera (batch di riorganizzazione) | Program-ID: cogv96
Menu: Magazzino > Produzione > Commesse > Creazione da Archivio ; Sistema > Archivi > Riorganizzazioni > Prime Note Magazzino
Scopo¶
Il programma fonde (compatta) tutti i movimenti di prima nota magazzino di un dato anno, creando un unico movimento aggregato per ogni combinazione magazzino/anno/causale/merce. L'intestazione stessa della maschera lo descrive: "Questo programma fonde tutti i movimenti di prima nota magazzino assieme creando un unico movimento per ogni magazzino/anno". Lo scopo e' recuperare spazio archivio dopo un consolidamento contabile: i singoli movimenti storici di p.n. (tipo bolla "P") vengono cancellati e sostituiti da pochi movimenti di sintesi.
L'elaborazione avviene in due fasi. In una prima fase scandisce le testate bolla (COGTESBO) e i movimenti (COGMOMAG) dell'anno, accumula quantita' e valori in un file di transito indicizzato temporaneo (cogtrans, $#COGV96.001), convertendo eventualmente gli importi nella divisa dell'anno tramite COGU10, e cancella gli originali. In una seconda fase rilegge il transito e ricrea le testate e i movimenti di sintesi (massimo 100 righe per documento) su COGTESBO/COGMOMAG. Il recupero effettivo dello spazio richiede poi la funzione di compattazione archivi.
L'anno elaborabile non puo' superare l'ultimo anno interamente consolidato: la data consolidato viene letta da COGTABEL tipo 57 (euta-dc-*) e confrontata con l'anno richiesto (w-anno-cfr).
File e tabelle principali¶
| File/Tabella | Copybook | Uso |
|---|---|---|
| COGTESBO | COGTESBO.CPY, cogtesbo.k01, cogtesbo.k01-agg, cogtesbo.k02 |
Testate bolla: lettura per anno (chiave secondaria chia2), cancellazione delle p.n. originali, scrittura testate di sintesi |
| COGMOMAG | COGMOMAG.CPY, cogmomag.k01, cogmomag.k01-agg |
Movimenti di magazzino: lettura per bolla, cancellazione originali, scrittura righe di sintesi |
| COGTABEL | COGTABEL.CPY, cogtabel.k01 |
Parametri: tipo 57 (data consolidato/riorganizzazione), tipo 15 (causali con flag con-gia/con-val) |
| cogtrans | (FD inline trs-rec), cogtrans.k01 |
File indicizzato temporaneo di transito per l'accumulo qta/valore per magazzino+causale+merce; nome $#COGV96.001 senza codice operatore |
| feurtab | cogfiles.cpy |
Tabella file di sistema |
Flusso principale¶
inizio/open-files— apertura file,rd-azi, lettura divisa conto corrente viaCOGU10(GetDivisaConto). Costruzione nome file di transito (ext-tmp-dir+$#COGV96.001).- Gestione ripartenza anomala — apre in input
cogtrans; se esiste (stato "00") significa che un'elaborazione precedente e' terminata in modo anomalo: emette segnalazione e, se l'operatore preme F1, prosegue senza reinizializzare il transito (fl-open="I"), altrimenti termina. a3a— display mascheramm-1, lettura data consolidato daCOGTABELtipo 57; se non c'e' consolidamento (w-data-ult=0) esce.a10— accettazione anno da elaborare viaCOGS52; validazione che non superi l'ultimo anno completamente consolidato (w-anno-cfr). Determinazione della divisa dell'anno viaCOGU10.a25-acc— richiesta conferma (acc-conf).a30-loop(Fase 1, selezione e fusione) — scansione testate bolla dell'anno (rdnxt-cogtesbo-lk); considera solotes-tipob="P". Per ogni testata determina la causale di destinazione in base ai flagcon-gia/con-val(tabellatab-causalicon combinazioni SS/SN/NS/NN).a40-loop— scansione movimenti della bolla (rdnxt-cogmomag-lk); accumula qta/valore nel record di transito (converte il valore nella divisa dell'anno viaz-u10-mag-valore), poi cancella il movimento (del-cogmomag).a50— cancellazione della testata (del-cogtesbo) e registrazione evento tramiteGESEVLOG(tipok-evl-canc-cogtesbo).a80/a100-loop(Fase 2, ricreazione) — rilettura del transito ordinato; per ogni cambio magazzino/causale o superamento delle 100 righe scrive una nuova testata (a1-scrivi-testata); scrive la riga di movimento di sintesi suCOGMOMAGcalcolando prezzo = valore/qta e arrotondandolo viaCOGU10(Arrotonda).a200/a200-cancel— messaggio di fine, chiusura ed eventualedelete file cogtrans(se creato ex-novo),z-chiudi.
Sottoprogrammi chiamati¶
| Programma | Ruolo |
|---|---|
| COGU10 | Conversione/arrotondamento importi in divisa (GetDivisaConto, Cambio, Arrotonda) e divisa dell'anno |
| COGS52 | Accettazione/verifica dell'anno di elaborazione |
| GESEVLOG | Registrazione evento di cancellazione testata (log eventi) |
Configurazioni (RNEWCONF)¶
Nessuna chiave RNEWCONF utilizzata. I parametri di controllo (data consolidato, causali) sono letti da COGTABEL.
Note¶
- Il file di transito viene creato volontariamente senza codice operatore (nome fisso
$#COGV96.001) "per essere sicuri di trovarlo agevolmente in caso di problemi" (commento nel sorgente); da qui la gestione esplicita della ripartenza anomala all'avvio. - Elaborazione a forte impatto: cancella fisicamente le prime note originali dell'anno e le sostituisce con movimenti di sintesi. La maschera avverte esplicitamente ("ATTENZIONE !!!") e sottolinea che il recupero spazio richiede la successiva funzione di compattazione archivi.
- Titolo runtime mostrato: "Pulizia Movimenti di Prima Nota Magazzino";
prog-err/w-nome-hlpvalorizzati con "COGV28". - Codice legacy: uso estensivo di
GO TOe delle etichettea30-loop/a40-loop/a100-loopper i cicli, ePERFORM intesta THRU-like non presente qui ma numeroseGO TO ...loop. La ripartenzasearch-fileusa unGO TO ... DEPENDING ON. Il paragrafoz-chiudichiudecogmomag cogtesbo cogtabeled esce dal programma. - La conversione divisa dei valori usa la data movimento
mag-da2come data cambio.