Vai al contenuto

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)

  1. Scansione bolle: lettura COGTESBO per data (chia2) nel range selezionato.
  2. Filtro cliente: se tm-ana-cod e' valorizzato, scarta le bolle con tes-nonno diverso.
  3. Filtro causale: legge COGTABEL tipo 15 e verifica euta-cb-fl-eu = "U" (causale uscita).
  4. Filtro fatturazione: verifica raccordo COGRACCO per assicurarsi che la bolla sia fatturata.
  5. Loop righe magazzino: per ogni riga COGMOMAG della bolla:
  6. Imposta o-prezzo-ven dal prezzo di vendita (mag-prezzo), con conversione divisa.
  7. Cerca consegne (COGU09 "cerca-consegna"): identifica le consegne collegate.
  8. 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.
  9. 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.