Vai al contenuto

COGR18 - Ricostruzione ricarico di vendita

Sorgente: cbl/cogr18.cbl | Tipo: Programma di menu / elaborazione | Program-ID: COGR18

Menu: Sistema > Archivi > Ricostruzioni [Ricarico Vendita]


Scopo

COGR18 ricalcola il ricarico percentuale sui movimenti di vendita di magazzino (mag-ric su COGMOMAG). Per ogni merce, partendo dalla giacenza attuale, scandisce a ritroso i movimenti di uscita (vendite) dall'ultimo fino alla data indicata; per ciascun movimento determina il costo di carico della quantita' venduta usando un criterio FIFO ricostruito dai movimenti di carico, calcola il ricarico percentuale del valore di vendita sul valore di acquisto e lo riscrive sul movimento stesso. Tutti i valori sono convertiti alla divisa di conto (via COGU10W) per rendere confrontabili carichi e scarichi.

L'esecuzione e' interattiva su un singolo magazzino (obbligatorio), a partire da una data (obbligatoria), con merce facoltativa (tutte se non indicata).

File e tabelle principali

File/Tabella Copybook Uso
COGMAGAZ cogmagaz.fd (magz-rec) Validazione magazzino selezionato (obbligatorio)
COGMERCI cogmerci.fd (mer-rec) Anagrafica merce: ciclo su tutte le merci o sulla merce indicata
COGSLMAG cogslmag.fd (msal-rec) Saldo merce/magazzino: giacenza attuale msal-qta da cui parte il calcolo a ritroso
COGMOMAG cogmomag.fd (mag-rec) chiave 3 Movimenti di magazzino: scansione a ritroso (uscite per il ricarico, carichi per il costo); riscrittura di mag-ric
COGTESBO cogtesbo.fd (tes-rec) Testata bolla del movimento: causale (tes-causale), data
COGTABEL cogtabel.fd (euta-rec, tipo 15) Causali: flag euta-cb-con-gia (la causale concorre alla giacenza)
COGTRANS (temporaneo) dichiarato nel sorgente (trs-rec) Archivio di transito per merce dei movimenti di carico (quantita'/valore FIFO), file #$COGR18.<oper> in tmp

Flusso principale

  1. main / apri - init, rd-azi, open-files; crea e apre in I/O il file temporaneo COGTRANS (#$COGR18.<operatore> in ext-tmp-dir); se gia' in uso avvisa e termina. Legge la divisa di conto via COGU10W (GetDivisaConto) in w-currency-conto.
  2. Maschera "Ricalcolo Ricarico": a-tm-mag (magazzino, aiuto F8 send-w36), a-tm-data (data inizio, calendario F8), a-tm-merce (merce facoltativa). F3 -> a-richiesta-conferma -> conferma -> b-elabora.
  3. b-elabora - scandisce COGMERCI (tutte o la merce indicata, esclusa la sentinella 999999999); per ogni merce esegue c-ela-merce.
  4. c-ela-merce - legge la giacenza attuale msal-qta da COGSLMAG (salta se saldo assente o giacenza negativa); esegue c1-src-car per costruire il transito dei carichi; poi scandisce a ritroso i movimenti di uscita.
  5. c1-src-car - risale COGMOMAG (chiave 3, read previous) per la merce/magazzino; considera movimenti di tipo C (bolla, sempre) oppure R/P in entrata (mag-entrusc = "E"), con causale che concorre alla giacenza (euta-cb-con-gia = "SI", o causale = az-cau-con); accumula in COGTRANS, per bolla, quantita' e valore (convertiti a divisa di conto), sommando le entrate e sottraendo le uscite.
  6. Ciclo uscite in c-ela-merce - risale ancora COGMOMAG; per i movimenti di uscita (mag-entrusc = "U") con quantita' non nulla e causale che concorre alla giacenza, aggiorna la giacenza progressiva msal-qta, converte il valore di vendita a divisa di conto, calcola il ricarico con e-calc-ric e riscrive mag-ric sul movimento (rewrite mag-recz).
  7. e-calc-ric - scandisce il transito COGTRANS a ritroso (FIFO): calcola il prezzo medio di carico per bolla (trs-val / trs-qta, arrotondato via COGU10W), accumula l'importo di carico w-imp-car corrispondente alla quantita' venduta, quindi w-ric = (100 * valore-vendita / importo-carico) - 100. Se non trova movimenti di carico sufficienti avvisa e imposta ricarico zero.
  8. fine - chiude ed elimina il file temporaneo COGTRANS.

Sottoprogrammi chiamati

Programma Ruolo
COGU10W Divisa di conto (GetDivisaConto), cambio valuta (Cambio) e arrotondamento (Arrotonda) di prezzi/valori
COGS68W / COGS52 / COGS60 / COGS93 / COGS95 Gestori ausiliari maschera, selezione merce, calendario/data
SEND-W36 Aiuto magazzino (sendw36.cpy)
DIALOGS / box-msg / vbx-msg Dialoghi e messaggistica

Note

  • Il "movimento di uscita" utile al ricarico richiede: mag-entrusc = "U", quantita' non nulla, causale con euta-cb-con-gia = "SI" (tabella 15) oppure causale uguale alla causale di consegna aziendale az-cau-con, e data del movimento non anteriore alla data indicata in maschera.
  • Il costo di carico e' ricostruito per merce in un archivio di transito temporaneo COGTRANS, per bolla, sommando le entrate e sottraendo le uscite dei movimenti di carico (tipi C/R/P). Il ricarico viene poi determinato con logica FIFO consumando questo transito.
  • Tutti i valori (carico e vendita) sono normalizzati alla divisa di conto valida alla rispettiva data, per rendere coerente il confronto quando i movimenti sono in divise diverse.
  • Se i movimenti di carico non bastano a coprire la quantita' venduta il ricarico calcolato e' zero e l'utente viene avvisato.
  • Il file temporaneo COGTRANS e' dichiarato manualmente nel sorgente (SELECT/FD/record) e non e' gestito da Screens; e' univoco per operatore e viene eliminato in chiusura.
  • Il codice usa GO TO e riscrive direttamente COGMOMAG (rewrite mag-recz); e' un sorgente legacy pre-convenzioni attuali.