COGM18 - Visualizzazione LIFO¶
Intestazione¶
| Campo | Valore |
|---|---|
| Programma | COGM18 |
| Titolo | Visualizzazione Valorizzazione Magazzino LIFO |
| Posizione menu | Magazzino > Controllo Magazzino > Lifo > Visualizzazione |
Scopo e logica generale¶
COGM18 e' un programma interattivo per la visualizzazione della valorizzazione del magazzino con metodo LIFO. Presenta una maschera con parametri di selezione (magazzino, tipo prezzo, divisa) e visualizza per ogni articolo la giacenza, il prezzo d'acquisto, il residuo LIFO e il valore LIFO su un arco di 15 anni. Il programma include anche funzionalita' di stampa (F9), calcolo valore totale magazzino (F5), ricerca merce (F6) e creazione archivio LIFO (F7).
Nota nel sorgente: se la divisa dei record letti e' diversa da quella richiesta, il programma converte i valori rimettendoli sui campi di COGMEMOR originali. Non eseguire modifiche su COGMEMOR.
Flusso principale¶
- Inizializzazione (
a0): controllo abilitazione (ctr-abil), apertura file (open-files), lettura azienda (rd-azi), display maschera - Accept parametri (
a4→a5→a70→a80→a99): a5: Magazzino (tm-mag) - con aiuto WIN036 (F8). Valida che sia interno (magz-fl-tip = 'I')a70: Tipo prezzo (tm-costo) - tramite COGS21, valori M/U/Va80: Divisa (tm-divisa) - tramite COGS60, valori L (Lira) / E (Euro)a99: Conferma (acc-conf)- Determinazione periodo: legge tabella tipo 57 record 1 per ottenere l'anno dell'ultimo consolidamento (
euta-dc-aa-acc/euta-dc-mm-acc). Se mese = 12, anno-fin = anno; altrimenti anno-fin = anno - 1. Anno-ini = anno-fin - 14 - Elaborazione articolo (
ela-15-loop→ela-20): scansione sequenziale di COGMERCI, per ogni merce calcola: loop-mav: dati consolidato da COGMEMOR (giacenze e prezzi per anno)loop-lifo: calcolo residuo LIFO (distribuzione della giacenza corrente per strato annuale)loop-tot: calcolo valore LIFO (prezzo * residuo per ogni strato)- Navigazione (
ela-30-s): accetta tasti funzione per scorrere merci (PgUp/PgDn), anni (frecce), oppure attivare funzioni speciali - Chiusura (
fine→z-chiudi): chiusura file
File e tabelle acceduti¶
| File logico | Record/Copybook | Modalita' | Uso |
|---|---|---|---|
| FEURTAB | cogfiles.cpy |
Input | Tabella Eurosystem (nomi file) |
| COGTABEL | cogtabel.cpy |
Input | Tabella generica (tipo 57: data ultimo consolidamento) |
| COGMERCI | cogmerci.cpy |
Input | Anagrafica merci (scansione sequenziale) |
| COGMAGAZ | cogmaga2.cpy |
Input | Anagrafica magazzini (validazione tipo interno) |
| COGMEMOR | cogmemor.cpy |
Input | Consolidato di magazzino (giacenze e valori per anno/merce/magazzino) |
| COGMLIFO | cogmlifo.cpy |
I-O | Archivio LIFO (scrittura da F7) |
| FLSTA | flsta.cpy |
Input | File stampe |
Chiavi di accesso principali¶
- COGMEMOR: chiave secondaria
mav-chia2= anno + gruppo + sottogruppo + codice + magazzino - COGMERCI: chiave primaria
mer-chia= gruppo + sottogruppo + codice - COGMLIFO: chiave primaria
lif-chia(mag + anno + merce)
Copybook¶
feurtab.fd/cogfiles.cpy-- file tabella Eurosystemcogtabel.fd/cogtabel.cpy-- tabella genericacogmerci.fd/cogmerci.cpy-- anagrafica mercicogmaga2.fd/cogmaga2.cpy-- anagrafica magazzinicogmemor.fd/cogmemor.cpy-- consolidato magazzinocogmlifo.fd/cogmlifo.cpy-- archivio LIFOflsta.fd/flsta.cpy-- gestione stampewstato.cpy,wgrave.cpy,wopenf.cpy,wnscr.cpy-- working-storage standardcogazien.cpy-- dati aziendawdisp001.cpy-- display utilityutils21.cpy,utils22.cpy,utils50.cpy,utils54.cpy,utils60.cpy,utils68.cpy-- utility varieutilu10.cpy-- utility gestione divise/arrotondamentiutilw36.cpy-- utility selezione magazzinowcont.cpy,wcont1.cpy-- linkage sectioncogtabel.k01,cogmaga2.k01,cogmerci.k01,cogmlifo.k01-- routine di I/Ostato.cpy,stato1.cpy,winmsg.cpy,grave.cpy,open1.cpy,mmmask.cpy-- routine standarddtab.cpy-- display tabellatstfun2.cpy-- test funzioni tastierapdisp001.cpy-- display utility
Logica di elaborazione¶
Calcolo dati consolidato (loop-mav)¶
Per ogni anno nell'intervallo (15 anni), il programma legge tutti i record COGMEMOR corrispondenti alla merce corrente. Se il magazzino e' specificato, filtra solo quel magazzino; altrimenti somma tutti i magazzini interni.
- Prezzo medio (M): somma
mav-val-acq(1..12)emav-qta-acq(1..12), poi divide valore/quantita' - Ultimo prezzo (U): prende
mav-pre-acqdal magazzino sede (az-main-mag) - Valore rimanenze (V): calcola
mav-val-rim / mav-qta-gia(12)
Se il magazzino e' "tutti", i prezzi vengono accumulati in variabili w-* e calcolati in loop-costo-1.
La giacenza LIFO (tm-gia-lifo(k)) e' la quantita' mav-qta-gia(12) (giacenza a dicembre). Le giacenze negative vengono forzate a zero.
Conversione divisa¶
Se mav-currency e' diverso da tm-divisa, tutti i valori del record vengono convertiti tramite COGU10 con operazione "Cambio".
Calcolo residuo LIFO (loop-lifo)¶
Algoritmo a strati LIFO iterato per i 15 anni:
- Anno 1: il residuo coincide con la giacenza
- Anni successivi: riporta i residui dell'anno precedente, poi:
- Se giacenza corrente > precedente: la differenza va nello strato dell'anno corrente
- Se giacenza corrente < precedente: scala la differenza dagli strati piu' recenti verso i piu' antichi (
x4-lifo) - Se uguale: nessuna modifica
Calcolo valore LIFO (loop-tot)¶
Per ogni anno k, il valore LIFO e' la somma di tm-pre-lifo(k1) * tm-res-lifo(k, k1) per k1 da 1 a k. Ogni moltiplicazione viene arrotondata tramite COGU10.
Creazione archivio LIFO (x7-creo-arc)¶
La funzione F7 scrive un record su COGMLIFO per ogni merce con LIFO > 0, contenente: magazzino, anno (ultimo), merce, padre, quantita', prezzo unitario (valore/quantita'), valore totale, divisa, flag rottamato = 'N'. Prima della scrittura, pulisce i record preesistenti per lo stesso magazzino/anno (pulisci-lif).
Stampa LIFO (x6-stampa)¶
La funzione F9 apre la finestra COGS54 per la selezione stampante, poi scansiona tutte le merci e stampa una riga per ogni anno con: anno, giacenza, prezzo, residuo LIFO, valore LIFO. In testata: data, pagina, descrizione merce. A fine stampa: riepilogo totali per anno.
Valore totale magazzino (b11-val-mag)¶
La funzione F5 scansiona tutte le merci, accumula tm1-tot-lifo(k) per i 15 anni, e mostra il riepilogo in una finestra popup (screen-2).
Chiamate esterne¶
| Programma | Modalita' | Descrizione |
|---|---|---|
COGU10 |
CALL | Gestione divise: conversione cambio, arrotondamento, display/edit valori |
COGS21 |
CALL | Selezione opzione (tipo prezzo M/U/V) |
COGS50 |
CALL | Composizione stringa descrizione merce |
COGS54 |
CALL | Gestione stampante |
COGS60 |
CALL | Selezione divisa (combo box) |
COGS68 |
CALL | Selezione merce con ricerca (gruppo/sottogruppo/codice) |
WIN036.COB |
CALL | Selezione magazzino |
WIN004.COB |
CALL | Ricerca alfabetica merci |
WIN054.COB |
CALL | Ricerca alfabetica merci per stringa |
Variabili principali (tab-maschera)¶
| Campo | Descrizione |
|---|---|
tm-mag |
Codice magazzino selezionato |
tm-art (gru/sot/cod) |
Codice merce corrente |
tm-costo |
Tipo prezzo: M/U/V |
tm-divisa |
Divisa: L/E |
tm-anno-ini / tm-anno-fin |
Intervallo anni (15 anni) |
tm-aa-lifo(k) |
Anno per strato k |
tm-gia-lifo(k) |
Giacenza per strato k |
tm-pre-lifo(k) |
Prezzo acquisto per strato k |
tm-tot-lifo(k) |
Valore LIFO per strato k |
tm-res-lifo(k, k1) |
Residuo LIFO: strato k, anno acquisto k1 |
tm1-tot-lifo(k) |
Totale magazzino per strato k (accumulatore F5) |
Note implementative¶
- Il programma usa
PERFORM ... THRUestensivamente (pattern legacy) - La tabella
tab-mascheracontiene una matrice 15x15 per i residui LIFO (225 elementi) - L'interfaccia e' a carattere con display/accept diretto (non usa Screen Designer)
- I file vengono aperti tramite
open1.cpycon ricerca nomi file da FEURTAB