Vai al contenuto

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

  1. Lettura intestazione (a-tm-da-merce, a-tm-fl-tipo): l'utente seleziona la categoria merceologica (codice + tipo) di cui modificare le ripartizioni.
  2. Caricamento dati (carica-dati): scan COGMERCC per la coppia (merce, tipo) e popolamento della tabella interna tm-tab (max 900 righe). Per ogni riga vengono risolte le descrizioni di centro di costo, reparto e magazzino.
  3. 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.
  4. Conferma (x-controlla-tutto -> x-controlla-perc): validazione complessiva e, se OK, scrittura su COGMERCC (a-aggiorna).
  5. 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

  1. 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.
  2. Locking di esclusivita': l'OPEN OUTPUT iniziale serve come test "funzione in uso": se fallisce, il programma esce con messaggio "Funzione in uso !!".
  3. Ricerca magazzino: il campo magazzino accetta F8 per ricerca tramite send-w36 (utility universale di ricerca tabelle).
  4. 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:

  1. Prima passata: st-cogmercc-notmin-chia3 con chiave (fl-tipo, merce, magazzino_documento) -> se trovata, vengono generate le righe di COGMOVCC con la ripartizione specifica del magazzino.
  2. Seconda passata (fallback): se la prima non ha trovato alcuna riga (w-fl-trovato-cogmercc not = "S"), si rilancia st-cogmercc-notmin-chia3 con 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-mag di 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 di a-aggiorna (prima la chiave magazzino era sempre spazi).