COGA11 -- Stampa Margine Primo Costo¶
Sorgente: cbl/coga11.cbl | Tipo: Programma di stampa con elaborazione | Program-ID: coga11
Menu: Magazzino > Stampe
Scopo¶
Stampa del margine di primo costo per cliente e merce. Analizza le bolle di vendita fatturate in un periodo, determina per ogni merce venduta il prezzo di vendita, il prezzo di acquisto (da carichi collegati o stimato) e il costo di trasporto, calcolando il margine unitario e complessivo.
File e tabelle¶
| File/Tabella | Tipo | Descrizione |
|---|---|---|
| FEURTAB | Input | Tabella generale |
| COGTESBO | Input | Testata bolle (scansione per data, chiave chia2) |
| COGMOMAG | Input | Movimenti di magazzino (chiave primaria e chia3 = mag/merce/data) |
| COGTABEL | Input | Tabelle generiche (causali tipo 15, trasporti tipo 20, divise tipo 56, vettori tipo 47) |
| COGRACCO | Input | Raccordi bolla-fattura (chiave chia2) |
| COGDISOR | Input | Distribuzione ordini/consegne (chiave chia1 e chia4) |
| COGTRASP | Input | Trasporti (dati spedizione) |
| COGGEANA | Input | Anagrafica generale (tipo "C" = clienti) |
| COGMERCI | Input | Anagrafica merci |
| COGTRANS | I/O | File di transito temporaneo (chiave: ana-cod + merce) |
| FLSTA | Output | File stampa |
| File da coga11.select | Vari | File dichiarati dalla screen |
Copybook principali¶
| Copybook | Sezione | Descrizione |
|---|---|---|
| coga11.select | FILE-CONTROL | SELECT dei file |
| coga11.fd | FILE SECTION | FD dei file |
| coga11.wrk | WORKING-STORAGE | Variabili di lavoro |
| coga11-01.scr | SCREEN SECTION | Definizione maschera |
| coga11.decla | PROCEDURE | Declaratives |
| coga11.prc | PROCEDURE | Procedure generate da Screens |
| k-u10.cpy | WORKING-STORAGE | Costanti divise |
| wrk-u10.cpy | WORKING-STORAGE | Working divise |
| utils52.cpy | WORKING-STORAGE | Utility data (COGS52) |
| utils54.cpy | WORKING-STORAGE | Utility stampa (COGS54) |
| utils65.cpy | WORKING-STORAGE | Utility selezione anagrafica (COGS65) |
| utilu09.cpy | WORKING-STORAGE | Utility consegne (COGU09) |
| utilu10.cpy | WORKING-STORAGE | Utility divise (COGU10W) |
| utilcogl61.cpy | WORKING-STORAGE | Utility prezzo medio acquisto (COGL61) |
Record di transito (COGTRANS)¶
trs-chia1:
trs-ana-cod PIC 9(05) -- codice cliente
trs-merce:
trs-mer-gru PIC X(02) -- gruppo merce
trs-mer-sot PIC X(02) -- sottogruppo merce
trs-mer-cod PIC 9(05) -- codice merce
trs-ana-des PIC X(40) -- ragione sociale
trs-mer-des PIC X(40) -- descrizione merce
trs-qta PIC 9(10)V9(03) -- quantita' totale
trs-ricavo-tot PIC S9(12)V9(06) -- ricavo totale
trs-imp PIC 9(12)V9(06) -- importo vendita
trs-prezzo-ven PIC 9(12)V9(06) -- prezzo vendita unitario
trs-prezzo-acq PIC 9(12)V9(06) -- prezzo acquisto unitario
trs-prezzo-tra PIC 9(12)V9(06) -- prezzo trasporto unitario
trs-margine PIC S9(12)V9(06) -- margine unitario medio
trs-currency PIC X(02) -- divisa
Struttura del programma¶
main section
apri -- inizializzazione
a4 -- reset maschera, apertura cogtrans
a-tm-ana-cod -- accept cliente
a-tm-da-data -- accept data inizio
a-tm-a-data -- accept data fine
a-tm-conf -- validazione
a-ricerca..ex-a -- elaborazione principale
a-10-loop -- loop su COGTESBO per data
cerca-consegne -- ricerca consegne collegate (COGU09)
cerca-carichi -- ricerca carichi collegati tramite COGDISOR
cerca-trasporti -- ricerca costi trasporto
find-dati-entrata -- ricerca presuntiva di carico
presumi-carico -- stima prezzo acquisto da carico simile
make-transito -- scrittura/aggiornamento record di transito
stampa..ex-stampa -- stampa
testa-pagina -- intestazione pagina
riga-pagina -- riga dettaglio merce
totale -- totale per cliente
totale-gen -- totale generale
fine / z-chiudi -- chiusura
Logica di elaborazione¶
Parametri¶
- Cliente (
tm-ana-cod): codice cliente. Se zero, elabora tutti i clienti. - Data inizio (
tm-da-data): default 01/01/anno corrente. - Data fine (
tm-a-data): default 31/12/anno corrente.
Elaborazione (a-ricerca)¶
- Scansione bolle: lettura COGTESBO per data (
chia2) nel range selezionato. - Filtro cliente: se
tm-ana-code' valorizzato, scarta le bolle contes-nonnodiverso. - Filtro causale: legge COGTABEL tipo 15 e verifica
euta-cb-fl-eu = "U"(causale uscita). - Filtro fatturazione: verifica raccordo COGRACCO per assicurarsi che la bolla sia fatturata.
- Loop righe magazzino: per ogni riga COGMOMAG della bolla:
- Imposta
o-prezzo-vendal prezzo di vendita (mag-prezzo), con conversione divisa. - Cerca consegne (
COGU09"cerca-consegna"): identifica le consegne collegate. - Se ci sono consegne: cerca i carichi collegati tramite COGDISOR, poi calcola il prezzo medio d'acquisto dalla somma valori/quantita'. Cerca i costi di trasporto.
- Se non ci sono consegne: esegue ricerca presuntiva del carico.
Ricerca presuntiva (presumi-carico)¶
Partendo dalla data della bolla, cerca all'indietro in COGMOMAG un carico (entrusc = "E") della stessa merce e magazzino. Se il carico e' legato a un ordine, verifica tramite COGDISOR che non sia legato a un ordine cliente (in quel caso lo scarta). Calcola il prezzo d'acquisto dal valore del carico diviso la quantita'.
Prezzo medio acquisto (fallback)¶
Se non si trova nessun carico, si ricorre al prezzo medio d'acquisto tramite COGL61 (cogl61-out-pma o cogl61-out-prezacq).
Costi di trasporto¶
Cerca prima sulla bolla di entrata (cerca-trasporti-su-entrata), poi sulla bolla di uscita (cerca-trasporti-su-uscita). Il costo unitario e' calcolato come tra-imp / tra-qta-tot.
Calcolo margine (make-transito)¶
margine = prezzo-vendita - (prezzo-acquisto + prezzo-trasporto)
Il record di transito viene creato (write) o aggiornato (rewrite) accumulando quantita', importo vendita e ricavo. Il margine e' la media tra il margine precedente e quello nuovo.
Stampa¶
Formato 200 colonne. Per ogni cliente: intestazione con codice/nome e periodo. Per ogni merce: codice, descrizione, quantita', importo vendita, ricavo, margine, prezzi unitari (vendita, acquisto, trasporto). Totali per cliente e totale generale.
CALL a programmi esterni¶
| Programma | Scopo |
|---|---|
| COGU09 | Ricerca consegne ("cerca-consegna", "cerca-magazzino") |
| COGU10W | Gestione divise, conversioni, arrotondamenti |
| COGL61 | Prezzo medio acquisto (fallback) |
| COGS52 | Input/output date |
| COGS54 | Gestione stampa |
| COGS65 | Selezione anagrafica |
Note¶
- Il programma e' computazionalmente pesante per la quantita' di letture incrociate su piu' tabelle.
- La gestione multivaluta e' pervasiva: ogni importo viene convertito nella divisa di conto tramite COGU10W.
- Il file di transito accumula i dati per cliente+merce: se lo stesso articolo e' su piu' bolle, le quantita' e gli importi vengono sommati, il margine viene mediato.