COGK69 - Suddivisione Merci su Centri di Costo¶
Sorgente: cbl/cogk69.cbl | Tipo: Programma con interfaccia grafica (maschera + griglia) | Program-ID: COGK69
Menu: Contabilita' > Centri di Costo > Tabelle > Suddivisione Merci su Centri Costo
Scopo¶
Definisce la matrice di ripartizione percentuale delle merci sui centri di costo per ogni categoria merceologica. Per la coppia (codice merce, tipo) la griglia accoglie n righe ciascuna con centro di costo, reparto, magazzino e percentuale. La somma delle percentuali deve essere pari a 100% per ciascun magazzino (il totale puo' essere alternativamente 0 se per quel magazzino non si vuole alcuna ripartizione).
L'archivio popolato (COGMERCC) viene usato dalle elaborazioni di centri di costo per distribuire automaticamente i valori di acquisto/movimentazione merce.
Struttura del programma¶
File e tabelle utilizzati¶
| File/Tabella | Tipo | Descrizione |
|---|---|---|
| COGMERCI | Input | Anagrafica merci (validazione tm-da-merce) |
| COGMERCC | I-O | Tabella delle percentuali merci/centri di costo (chiave: merce + tipo + magazzino + cc + progressivo) |
| COGCCOPR | Input | Anagrafica centri di costo (lookup descrizione) |
| COGTABEL (feurtab, tipo 85) | Input | Reparti (lookup descrizione) |
| COGMAGAZ | Input | Magazzini (validazione e descrizione) |
| COGTRANS | Output (I-O) | File temporaneo indicizzato per accumulare le percentuali per magazzino durante la validazione (vedi sotto) |
Copybook principali¶
| Copybook | Descrizione |
|---|---|
| cogk69.select / .fd / .wrk | Generati da Screens |
| cogk69-01.scr | Screen della maschera |
| cogk69.prc | Procedure division accessoria |
| feurtab.fd, cogfiles.cpy | Tabella generica |
| wstato, wopenf, wgrave, wnscr | Stati di file/I/O |
| wgrid, utilgdad | Gestione griglia |
| utils68, utils92, utilu20, utilf11, utilncnf, utilw36 | Utility (input lookup, ricerca tabelle, ricerca magazzino W36) |
| cogtrans.k01 | Chiave del file di transito |
Chiamate esterne¶
| Programma | Funzione |
|---|---|
| GRIDADMN | Modifica/aggiunta/cancellazione record nella griglia visiva |
W36 (send-w36) |
Ricerca generica di magazzino |
| Screens runtime (rd/wr/rwr/del/st/rdnxt-cogmercc) | Operazioni indicizzate sulle tabelle gestite da Screens |
Logica di business¶
Flusso operativo¶
- Lettura intestazione (
a-tm-da-merce,a-tm-fl-tipo): l'utente seleziona la categoria merceologica (codice + tipo) di cui modificare le ripartizioni. - Caricamento dati (
carica-dati): scan COGMERCC per la coppia (merce, tipo) e popolamento della tabella internatm-tab(max 900 righe). Per ogni riga vengono risolte le descrizioni di centro di costo, reparto e magazzino. - Editing nella griglia (
a-grid): l'utente puo' aggiungere (Ctrl+A), modificare (Invio) o cancellare (Ctrl+E) righe. Ogni riga ha cc, reparto, magazzino e percentuale. - Conferma (
x-controlla-tutto->x-controlla-perc): validazione complessiva e, se OK, scrittura su COGMERCC (a-aggiorna). - Aggiornamento (
a-aggiorna): cancella le righe preesistenti per la coppia (canc-precedente) e riscrive l'intera tabella.
Controllo percentuali per magazzino (x-controlla-perc)¶
La somma delle percentuali deve essere pari a 100% per ciascun magazzino, oppure 0 se per quel magazzino non si vuole nessuna ripartizione. Per gestire l'aggregazione il programma utilizza un file indicizzato di transito COGTRANS:
1. Costruisce un nome univoco: ext-tmp-dir/#$cogk69_<HHMMSScc>.arc
2. CLOSE + OPEN OUTPUT cogtrans (test "funzione in uso" se OPEN fallisce)
3. CLOSE + OPEN I-O cogtrans
4. Scan tm-tab (i = 1..tm-pnt):
- skip righe con tm-cc = 0
- rd-cogtrans (chiave: trs-mag = tm-mag(i))
- se invalido: wr-cogtrans (inizializza il record con tm-mag(i))
- somma tm-perc(i) a trs-perc, rwr-cogtrans
5. st-cogtrans-notmin + rdnxt-cogtrans loop:
- per ogni magazzino con totale != 100 e != 0:
segnala "Magazzino 'XX' Errore Somma % : NNN,NN; deve essere 100% !!"
6. CLOSE + DELETE FILE cogtrans
Il flag w-ok-perc = "X" indica che almeno un magazzino non ha quadrato e blocca la conferma.
Caso particolare: nuovo flusso per magazzino¶
Prima del fix la somma delle percentuali era unica per merce; ora le righe vengono raggruppate per magazzino e la quadratura e' calcolata indipendentemente per ciascuno. Questo consente, per la stessa categoria merceologica, di avere ripartizioni diverse a seconda del magazzino di acquisto/scarico.
Scrittura su COGMERCC (a-aggiorna)¶
Per ogni riga della griglia (con tm-liv1 != 0) si compone un record COGMERCC con:
- cpm-merce = codice merce dell'intestazione
- cpm-fl-tipo = tipo merce
- cpm-mag = magazzino della riga (tm-mag(k))
- cpm-cc = centro di costo
- cpm-prog = progressivo (incrementato; in caso di chiave duplicata si itera su w-prog)
- cpm-perc = percentuale
- cpm-rep = reparto
Prima della riscrittura canc-precedente cancella tutte le righe preesistenti per la coppia (merce, tipo).
Particolarita' implementative¶
- File temporaneo cogtrans: dichiarato manualmente nel SELECT/FD del programma (non gestito da Screens) e creato/cancellato per ogni invocazione del controllo percentuali. Il nome include il timestamp per evitare collisioni tra utenti concorrenti.
- Locking di esclusivita': l'OPEN OUTPUT iniziale serve come test "funzione in uso": se fallisce, il programma esce con messaggio "Funzione in uso !!".
- Ricerca magazzino: il campo magazzino accetta F8 per ricerca tramite
send-w36(utility universale di ricerca tabelle). - Tabella interna max 900 righe: il limite e' definito da
k-max-ele-tab.
Consumatori della tabella COGMERCC¶
Le percentuali scritte da COGK69 vengono consumate dalle routine di contabilizzazione in cc-rep-mag-mercc-* di:
| Programma | Tipo movimento | File aggiornato |
|---|---|---|
| COGE21 | cpm-fl-tipo = "C" (costi — fatture clienti) |
COGMOVCC |
| COGE21IC | cpm-fl-tipo = "C" (costi — fatture clienti, variante CICAM) |
COGMOVCC |
| COGE51 | cpm-fl-tipo = "R" (ricavi — fatture clienti emesse) |
COGMOVCC |
Dopo l'introduzione di cpm-mag come parte della chiave (TASK-4704), ciascun consumatore esegue una doppia scansione sulla tabella:
- Prima passata:
st-cogmercc-notmin-chia3con chiave(fl-tipo, merce, magazzino_documento)-> se trovata, vengono generate le righe di COGMOVCC con la ripartizione specifica del magazzino. - Seconda passata (fallback): se la prima non ha trovato alcuna riga (
w-fl-trovato-cogmercc not = "S"), si rilanciast-cogmercc-notmin-chia3con chiave(fl-tipo, merce, spazi)per applicare la ripartizione "globale" (storica) eventualmente residua.
Per ogni passata viene mantenuto il bilanciamento del totale ripartizione vs valore movimento (w-mag-impo-cc confrontato con w-mag-importo); l'eventuale differenza dovuta agli arrotondamenti viene riassorbita aggiornando l'ultima riga di COGMOVCC scritta.
Storico modifiche¶
- 2026-05 (TASK-4704): consumatori COGE21/COGE21IC/COGE51 estesi per leggere COGMERCC con il nuovo
cpm-magdi chiave. Doppio loop: prima per magazzino del documento, poi fallback per magazzino vuoto. Mantenuto compatibile con configurazioni precedenti. - 2026-05: il controllo somma percentuali e' stato esteso al per-magazzino. Introdotto il file di transito COGTRANS per accumulare le percentuali raggruppate per magazzino. Aggiunto
tm-mag (k)nelle scritture dia-aggiorna(prima la chiave magazzino era sempre spazi).