Vai al contenuto

COGM04 - Aggiornamento Listini da Listino Generale

Sorgente: cbl/cogm04.cbl | Tipo: Programma interattivo / subroutine | Program-ID: COGM04

Menu:

  • Magazzino > Archivi & Tabelle > Listini Fornitori > Ricalcolo Prezzi da Listino
  • Magazzino > Controllo Prezzi > Agg. da Listini Generali

Scopo

Ricalcola i prezzi dei listini fornitore (COGLISFO) e, se richiesto, dei listini di vendita (COGLISNW) a partire dai dati del listino generale merce-fornitore (COGGENMF).

Per ogni merce collegata a un fornitore il programma:

  1. determina un prezzo d'acquisto partendo dal prezzo netto o dal prezzo lordo del listino generale, applicando eventuali sconti (sconto particolare, sconti di gruppo) e la conversione di divisa;
  2. aggiorna il listino fornitore (COGLISFO) con il prezzo d'acquisto calcolato;
  3. se configurato e richiesto, calcola il prezzo di vendita applicando i ricarichi di listino (COGRICLS) e l'arrotondamento previsto dalla divisa/listino, e aggiorna il listino di vendita (COGLISNW) per ogni fascia di quantita' della merce.

Nota (dal commento in testa al sorgente): il programma non gestisce le fasce di quantita' in fase di calcolo del prezzo d'acquisto; le fasce sono invece considerate in scrittura sui listini di vendita (vedi cogmerfq).

Il programma puo' funzionare stand-alone (l'operatore inserisce fornitore, data listino e opzioni via maschera) oppure come subroutine richiamata da un altro programma (m04-called = 'COGM04-CALLED') per aggiornare un singolo fornitore/merce in modo automatico.


Modalita' di chiamata (linkage utilm04.cpy)

Quando il programma viene richiamato, riconosce la chiamata dal valore m04-called = 'COGM04-CALLED' e travasa i parametri di linkage nella struttura interna w-dati-called:

Campo linkage Campo interno Significato
m04-cmf w-dc-cmf Codice merce-fornitore su cui operare (spazi = tutte le merci del fornitore)
m04-cf w-dc-cf Codice fornitore
m04-cm w-dc-cm Codice merce (di gestionale)
m04-fl-lis-ven w-dc-fl-lis-ven Flag: aggiornare anche il listino di vendita
m04-fl-aggiorna-lfo w-dc-fl-aggiorna-lfo Flag: aggiornare il listino fornitore
m04-fl-aggiorna-lis w-dc-fl-aggiorna-lis Flag: aggiornare i listini

In modalita' richiamata, se la configurazione di aggiornamento listini e' "automatico" (tm-cfg-agg-lis = "A") la maschera di richiesta dati viene bypassata e l'elaborazione parte direttamente. Al termine, la tabella dati (m04-dati) viene restituita al chiamante tramite user-area.

Il programma di linkage generale e' wcont.cpy (stringhe), con utilm04.cpy (parametri specifici) e wcont1.cpy.


Interfaccia utente (tab-maschera)

Screen cogm04-01.scr. Sezioni della maschera:

Riferimenti (tm-riferimenti)

Campo Tipo Descrizione
tm-for-cod 9(05) Codice fornitore (F1 = configura, ricerca via COGS65W)
tm-for-des X(41) Ragione sociale fornitore
tm-data-listino 9(08) Data del listino (AAAAMMGG, F8 = calendario COGS52W)

Dati listino (tm-dati-listino)

Campo Tipo Descrizione
tm-info X(120) Riga informativa sulle condizioni gestite per il fornitore
tm-fl-lis-ven X(01) Aggiornare listino vendita: S/N
tm-fl-tip-agg X(01) Calcolo listino vendita da: L (lordo) / N (netto)
tm-fl-sco-lor X(01) Tipo sconto su lordo: P (particolare) / G (gruppo)
tm-fl-pn X(01) E' gestito il prezzo netto
tm-fl-pl X(01) E' gestito il prezzo lordo
tm-fl-sp X(01) E' gestito lo sconto particolare
tm-fl-sg X(01) E' gestito lo sconto gruppo
tm-fl-sg-g / tm-fl-sg-ssc / tm-fl-sg-sgr X(01) Sotto-flag: gruppo su tabella, condizioni tipo SC, condizioni tipo GR
tm-tip-sg X(01) Tipo sconto gruppo: S (per prefisso codice merce) / G (per gruppo COGGENMF)
tm-sconto-piramidale X(01) Sconto piramidale (letto da COGANAPP)

Contatori di avanzamento

Campo Descrizione
tm-gmf-l Merci del listino generale lette
tm-mfr-l Merci-fornitore trovate/elaborate
tm-lfo-a Listini fornitore aggiornati
tm-lis-a Listini di vendita aggiornati

Ordine di accept e tasti funzione

Fornitore > Data listino > (conferma sezione riferimenti, F3) > Aggiorna listino vendita > Calcolo listino da > Tipo sconto su lordo > Ricarichi > (conferma sezione dati listino, F3 = avvia elaborazione).

Tasto Funzione
ESC Esce / torna alla sezione precedente
F2 Campo/sezione precedente
F3 Conferma sezione e prosegue / avvia elaborazione
F1 Configura (su campo fornitore, carica configurazione RNEWCONF via x99-load-config)
F6 Lancia COGS29W sui ricarichi (lancia-s29w)
F8 Calendario (su data listino) / aiuto
F9 Ricerca avanzata
F5 Consulta log elaborazione (dialog finale, solo modalita' stand-alone)

I campi vengono abilitati/disabilitati dinamicamente in base ai flag calcolati (z-cambia-tm-fl-lis-ven, z-cambia-tm-fl-tip-agg, z-cambia-tm-fl-sco-lor, z-cambia-tm-ricarichi). In modalita' richiamata alcuni campi (fornitore, flag vendita, tipo aggiornamento) sono forzati e non modificabili.


File e tabelle principali

File logico Record Uso
FEURTAB - Tabella parametri file Eurosystem
COGGENMF gmf- Listino generale merce-fornitore (input principale; gmf-cf, gmf-cmf, gmf-pre-net, gmf-pre-lor, gmf-sco, gmf-gru, gmf-molt-pre, gmf-currency)
COGMERFO mfr- Anagrafica merci-fornitore (mfr-for, mfr-cod-for, mfr-merce, mfr-divisa); accesso via chiave secondaria cogmerfo.k04
COGMERCI mer- Anagrafica merci (mer-chia, mer-descr, mer-data-agg)
COGLISFO lfo- Listino fornitore (output prezzo acquisto; lfo-merce, lfo-for, lfo-data, lfo-prezzo(1), lfo-prezzo(2), lfo-currency)
COGLISNW lnw- Listino di vendita (output prezzo vendita; lnw-merce, lnw-tip-lis, lnw-rif, lnw-fascia, lnw-data, lnw-pre)
COGRICLS rls- Ricarichi di listino / per fornitore / per soglia acquisto (rls-tip, rls-rif, rls-for, rls-fl-per-forn, rls-ric(1..5), rls-arrot, rls-tip-arr, rls-applico-su, rls-soglia-acq, rls-imp-da-sommare); chiave secondaria cogricls.k02 (per soglia)
COGTESLS tls- Testate listini di vendita (tls-tip, tls-rif, tls-div, tls-int, tls-fascie, tls-chia1); usato in r1-leggi-cogtesls
COGSCOCF scf- Sconti/condizioni per cliente-fornitore (scf-tip, scf-cod, scf-cnd, scf-key, scf-sco-1..3, scf-fl-ven)
COGMERFQ mfq- Fasce di quantita' della merce (mfq-merce, mfq-fascia, mfq-qta)
COGPRMED prm- Prezzo unitario acquisto/prezzi medi (scritto se tm-cfg-agg-pua = "S"; prm-merce, prm-data, prm-sede, prm-currency, prm-pua)
COGTESGF tgf- Testata gestione prezzi lordi fornitore (tgf-cf)
COGTABEL euta- Tabelle generiche (tipo 19 per flag prezzo netto/lordo/sconti; tipo 56 per divise)
COGGEANA ana- Anagrafica cliente/fornitore (ana-tipo, ana-cod, ana-nome)
COGANAPP aap- Estensione anagrafica (aap-chia1, aap-sconto-piramidale)
COGCNDCF cnd- Condizioni cliente-fornitore (personalizzazione Sirecom: fornitore preferenziale, condizione FP)

Copybook principali

Screen Designer

  • cogm04.select, cogm04.fd, cogm04.wrk, cogm04.decla, cogm04.prc, cogm04-01.scr

Strutture dati e file

  • feurtab.fd / cogfiles.cpy -- FD feurtab
  • k-personal.cpy -- costanti personalizzazione (k-personal-elettrica-andreoli, k-personal-sirecom)
  • cogazien.cpy -- dati azienda (az-personal, az-main-mag)
  • cogricls.k02, cogmerfo.k04 -- chiavi secondarie (aggiunte manualmente a fine procedure division)

Utility

  • utilncnf.cpy -- struttura parametri RNEWCONF
  • utilcogs0c.cpy -- utility comune
  • utils29w.cpy -- interfaccia COGS29W (tabella listini/ricarichi s29w-)
  • utils52.cpy -- calendario (COGS52W)
  • utils65.cpy -- ricerca anagrafica (COGS65W)
  • utilu10.cpy -- interfaccia COGU10W (cambio, arrotondamento, divisa di conto)
  • utildlg.cpy -- dialog (DIALOGS)
  • utilgesdebug.cpy -- gestione log/debug (gesdebug-*)

Comuni

  • wstato.cpy, wgrave.cpy, wopenf.cpy, wnscr.cpy, k-personal.cpy
  • stato.cpy, stato1.cpy, winmsg.cpy, grave.cpy, opengen.cpy, mmmask.cpy, gesdebug.cpy

Linkage

  • wcont.cpy (stringhe), utilm04.cpy (m04-...), wcont1.cpy

Sottoprogrammi chiamati (CALL)

Programma Scopo
RNEWCONF Lettura configurazione (x99-load-config, pacchetto "C", 5 chiavi)
COGU10W Cambio divisa, arrotondamento importi, lettura divisa di conto per data (z-u10-gen, get-divisa-conto-x-data)
COGS65W Ricerca/aiuto anagrafica fornitore (z-s65-tm-for-cod)
COGS29W Gestione tabella listini/ricarichi (chiamata da lancia-s29w, F6)
DIALOGS Dialog finale "Elaborazione Terminata" con opzione log (F5), solo stand-alone

I sottoprogrammi generati da Screens (COGS52W calendario, COGS60/COGS68/COGS93/COGS95 per i controlli) sono richiamati tramite le perform z-... di cogm04.prc.


Configurazione (RNEWCONF)

Letta in x99-load-config (pacchetto "C", ncnf-pnt = 5):

# Gruppo Chiave Campo interno Descrizione
01 PROGCOGM04 EUTA-C040-PRE-VEN tm-cfg-pre-ven Default calcolo listino vendita (tm-fl-tip-agg); N = non gestito
02 PROGCOGM04 EUTA-C040-TIP-RIC tm-cfg-tip-ric Tipo ricarichi: F (fisso, da COGTESLS/COGRICLS) / R (richiesti a video via COGS29W)
03 PROGCOGM04 EUTA-C040-AGG-LIS tm-cfg-agg-lis Aggiornamento listini: S / A (automatico, salta la maschera) / N
04 LISTVEND RICARICHI-SOGLIA-ACQUISTO tm-cfg-ric-per-soglia Ricarichi per soglia di prezzo d'acquisto (S forza tm-cfg-tip-ric = "F")
05 PROGCOGM04 EUTA-C040-AGG-PUA tm-cfg-agg-pua Se S, aggiorna anche COGPRMED (prezzo unitario acquisto)

Logica di elaborazione

Preparazione dati listino (carica-dati-listino)

Determina quali condizioni sono gestite per il fornitore, leggendo COGTESGF (prezzo lordo dedicato) oppure COGTABEL tipo 19 con prodotto PN/PL/SC/GR e COGSCOCF (condizioni SC/GR). Da questi flag deriva:

  • tm-fl-pn, tm-fl-pl, tm-fl-sp, tm-fl-sg, tm-tip-sg;
  • la gestibilita' del listino vendita (get-w-fl-lis-ven): possibile se c'e' prezzo lordo con almeno uno sconto, oppure prezzo netto con ricarichi a video; se richiamato, dipende da tm-cfg-agg-lis;
  • se i ricarichi sono "fissi" (tm-cfg-tip-ric = 'F') precarica le testate listino via r1-leggi-cogtesls (COGTESLS + COGRICLS per fornitore), altrimenti prepara i dati per COGS29W.

Ciclo principale (b-elabora)

  1. Se e' gestito lo sconto gruppo (tm-fl-sg = 'S'), carica in memoria la tabella degli sconti di gruppo del fornitore (b1-gruppi) leggendo COGSCOCF (condizione GR o SC), con dimensionamento del prefisso significativo (b11-size).
  2. Scandisce COGGENMF per fornitore (gmf-cf = tm-for-cod); in modalita' richiamata puo' filtrare sulla singola merce w-dc-cmf.
  3. Per ogni riga chiama b-elabora-merce.

Elaborazione di una merce (b-elabora-merce)

  • Legge COGMERFO (chiave cogmerfo.k04, per fornitore + codice merce-fornitore). Se non esiste e non e' una chiamata mirata, salta.
  • Chiama c-agg-lfo per calcolare e aggiornare il listino fornitore.
  • Se il flag listino vendita e' attivo, legge COGMERCI e chiama d-agg-lis per aggiornare i listini di vendita.
  • In modalita' richiamata su singola merce, al termine imposta b-termina-elaborazione = "S" e interrompe la scansione.

Calcolo prezzo d'acquisto e aggiornamento listino fornitore (c-agg-lfo)

  • Ordina la tabella sconti di gruppo per lunghezza prefisso (organizza-tgs).
  • Applica il moltiplicatore di prezzo (gmf-molt-pre) e la conversione di divisa da gmf-currency a w-currency-conto (COGU10W).
  • Determina il prezzo d'acquisto (c1-pre-lor):
  • se e' presente il prezzo netto (tm-fl-pn = 'S') lo usa direttamente come costo;
  • altrimenti parte dal prezzo lordo e applica lo sconto particolare (c1-calc-sp, usa gmf-sco) e/o lo sconto gruppo (c1-calc-sg), scegliendo il risultato in base a tm-fl-sco-lor (P/G);
  • lo sconto gruppo puo' essere per prefisso codice merce (c11-calc-mer, tipo S) o per gruppo COGGENMF (c12-calc-gru, tipo G), con supporto allo sconto piramidale (c12-src-loop) o al singolo gruppo (c12-src-single-group);
  • arrotonda il prezzo d'acquisto in base alla divisa di conto (COGU10W, operazione "Arrotonda").
  • Aggiorna COGLISFO: lfo-prezzo(1) = prezzo d'acquisto in divisa di conto; se la merce-fornitore ha una divisa propria (mfr-divisa, validata su COGTABEL tipo 56) calcola anche lfo-prezzo(2) convertito.
  • Se tm-cfg-agg-pua = "S", scrive un record COGPRMED con il PUA.

Calcolo prezzo di vendita e aggiornamento listino (d-agg-lis / d1-agg-lis)

Eseguito solo se w-fl-ven = "X" e prezzo di vendita > 0. Per la personalizzazione Sirecom l'aggiornamento avviene solo per i fornitori "preferenziali" (COGCNDCF, condizione FP).

  • Precarica le fasce di quantita' della merce da COGMERFQ (tabella tab-fascie-merce).
  • Per ciascun listino di vendita precaricato (s29w-pnt elementi):
  • cerca un ricarico specifico per merce (COGRICLS su rls-merce), altrimenti usa il ricarico di listino/fornitore (s29w-lis-ricarico, s29w-lis-arrot);
  • calcola il prezzo (d11-agg-pre): conversione di divisa (COGU10W), eventuale ricerca del ricarico per soglia di acquisto (d11-cerca-ricarico-per-soglia, COGRICLS chiave k02, prima per fornitore poi generale), applicazione del ricarico per fascia, arrotondamento minimo di divisa (COGU10W) e arrotondamento di listino (d11-arrotonda, con tipo M/E), somma dell'eventuale importo aggiuntivo;
  • aggiorna COGLISNW per la fascia 1 (se la merce non ha fasce) o per ciascuna fascia della merce.
  • Se d-fl-agg-mer = "S", aggiorna la data di ultimo aggiornamento sulla merce (COGMERCI, mer-data-agg).

Logging

Tutta l'elaborazione produce un log dettagliato tramite gesdebug-* (aperto in gesdebug-apri-principale): riga d'intestazione "Codice merce fornitore;Esito", messaggi per prezzi lordo/netto/acquisto, sconti trovati, aggiornamenti COGLISFO/COGLISNW, ricarichi non trovati. In modalita' stand-alone, al termine, un dialog (DIALOGS) permette di consultare il log con F5.


Note

  • Commento in testa: il programma non gestisce le fasce di quantita' nel calcolo del prezzo d'acquisto (sono considerate solo in scrittura sul listino di vendita via COGMERFQ).
  • Personalizzazioni presenti nel codice: Elettrica Andreoli (k-personal-elettrica-andreoli, forza un punto 0 sui listini) e Sirecom (k-personal-sirecom, aggiorna il listino solo per fornitori preferenziali via COGCNDCF condizione FP).
  • Se sono presenti sia prezzo lordo sia prezzo netto, dall'8/3/18 il prezzo netto viene usato per aggiornare il listino fornitore (nota nel sorgente).
  • Se e' configurata la gestione dei ricarichi per soglia d'acquisto (tm-cfg-ric-per-soglia = "S"), i ricarichi diventano "fissi" (nessuna richiesta a video).
  • Il sorgente usa ancora PERFORM ... THRU e GO TO in vari punti (stile legacy): trattandosi di documentazione, non e' un refactoring da eseguire.
  • Le chiavi secondarie cogricls.k02 e cogmerfo.k04 sono aggiunte manualmente in coda alla procedure division (Screens genera solo la chiave primaria).

Documentazione tecnica -- 2026-07-07