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¶
main / apri- init,rd-azi,open-files; crea e apre in I/O il file temporaneoCOGTRANS(#$COGR18.<operatore>inext-tmp-dir); se gia' in uso avvisa e termina. Legge la divisa di conto via COGU10W (GetDivisaConto) inw-currency-conto.- Maschera "Ricalcolo Ricarico":
a-tm-mag(magazzino, aiuto F8send-w36),a-tm-data(data inizio, calendario F8),a-tm-merce(merce facoltativa). F3 ->a-richiesta-conferma-> conferma ->b-elabora. b-elabora- scandisceCOGMERCI(tutte o la merce indicata, esclusa la sentinella999999999); per ogni merce eseguec-ela-merce.c-ela-merce- legge la giacenza attualemsal-qtadaCOGSLMAG(salta se saldo assente o giacenza negativa); eseguec1-src-carper costruire il transito dei carichi; poi scandisce a ritroso i movimenti di uscita.c1-src-car- risaleCOGMOMAG(chiave 3,read previous) per la merce/magazzino; considera movimenti di tipoC(bolla, sempre) oppureR/Pin entrata (mag-entrusc = "E"), con causale che concorre alla giacenza (euta-cb-con-gia = "SI", o causale =az-cau-con); accumula inCOGTRANS, per bolla, quantita' e valore (convertiti a divisa di conto), sommando le entrate e sottraendo le uscite.- Ciclo uscite in
c-ela-merce- risale ancoraCOGMOMAG; per i movimenti di uscita (mag-entrusc = "U") con quantita' non nulla e causale che concorre alla giacenza, aggiorna la giacenza progressivamsal-qta, converte il valore di vendita a divisa di conto, calcola il ricarico cone-calc-rice riscrivemag-ricsul movimento (rewrite mag-recz). e-calc-ric- scandisce il transitoCOGTRANSa ritroso (FIFO): calcola il prezzo medio di carico per bolla (trs-val / trs-qta, arrotondato via COGU10W), accumula l'importo di caricow-imp-carcorrispondente alla quantita' venduta, quindiw-ric = (100 * valore-vendita / importo-carico) - 100. Se non trova movimenti di carico sufficienti avvisa e imposta ricarico zero.fine- chiude ed elimina il file temporaneoCOGTRANS.
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 coneuta-cb-con-gia = "SI"(tabella 15) oppure causale uguale alla causale di consegna aziendaleaz-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 (tipiC/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
COGTRANSe' 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 TOe riscrive direttamenteCOGMOMAG(rewrite mag-recz); e' un sorgente legacy pre-convenzioni attuali.