Vai al contenuto

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

  1. Inizializzazione (a0): controllo abilitazione (ctr-abil), apertura file (open-files), lettura azienda (rd-azi), display maschera
  2. Accept parametri (a4a5a70a80a99):
  3. a5: Magazzino (tm-mag) - con aiuto WIN036 (F8). Valida che sia interno (magz-fl-tip = 'I')
  4. a70: Tipo prezzo (tm-costo) - tramite COGS21, valori M/U/V
  5. a80: Divisa (tm-divisa) - tramite COGS60, valori L (Lira) / E (Euro)
  6. a99: Conferma (acc-conf)
  7. 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
  8. Elaborazione articolo (ela-15-loopela-20): scansione sequenziale di COGMERCI, per ogni merce calcola:
  9. loop-mav: dati consolidato da COGMEMOR (giacenze e prezzi per anno)
  10. loop-lifo: calcolo residuo LIFO (distribuzione della giacenza corrente per strato annuale)
  11. loop-tot: calcolo valore LIFO (prezzo * residuo per ogni strato)
  12. Navigazione (ela-30-s): accetta tasti funzione per scorrere merci (PgUp/PgDn), anni (frecce), oppure attivare funzioni speciali
  13. Chiusura (finez-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 Eurosystem
  • cogtabel.fd / cogtabel.cpy -- tabella generica
  • cogmerci.fd / cogmerci.cpy -- anagrafica merci
  • cogmaga2.fd / cogmaga2.cpy -- anagrafica magazzini
  • cogmemor.fd / cogmemor.cpy -- consolidato magazzino
  • cogmlifo.fd / cogmlifo.cpy -- archivio LIFO
  • flsta.fd / flsta.cpy -- gestione stampe
  • wstato.cpy, wgrave.cpy, wopenf.cpy, wnscr.cpy -- working-storage standard
  • cogazien.cpy -- dati azienda
  • wdisp001.cpy -- display utility
  • utils21.cpy, utils22.cpy, utils50.cpy, utils54.cpy, utils60.cpy, utils68.cpy -- utility varie
  • utilu10.cpy -- utility gestione divise/arrotondamenti
  • utilw36.cpy -- utility selezione magazzino
  • wcont.cpy, wcont1.cpy -- linkage section
  • cogtabel.k01, cogmaga2.k01, cogmerci.k01, cogmlifo.k01 -- routine di I/O
  • stato.cpy, stato1.cpy, winmsg.cpy, grave.cpy, open1.cpy, mmmask.cpy -- routine standard
  • dtab.cpy -- display tabella
  • tstfun2.cpy -- test funzioni tastiera
  • pdisp001.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) e mav-qta-acq(1..12), poi divide valore/quantita'
  • Ultimo prezzo (U): prende mav-pre-acq dal 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:

  1. Anno 1: il residuo coincide con la giacenza
  2. Anni successivi: riporta i residui dell'anno precedente, poi:
  3. Se giacenza corrente > precedente: la differenza va nello strato dell'anno corrente
  4. Se giacenza corrente < precedente: scala la differenza dagli strati piu' recenti verso i piu' antichi (x4-lifo)
  5. 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 ... THRU estensivamente (pattern legacy)
  • La tabella tab-maschera contiene 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.cpy con ricerca nomi file da FEURTAB