COGE51 — Contabilizzazione singola fattura (centri di costo)¶
Sorgente: cbl/coge51.cbl | Tipo: Subroutine (sottoprogramma) | Program-ID: coge51
Chiamanti: COGE50 (CALL "COGE51" USING stringhe wft-rec lk-area)
Scopo¶
COGE51 e' il motore contabile del ciclo attivo: riceve gli estremi di una singola fattura (o nota di accredito) e ne genera la registrazione completa di prima nota, registrando un record per ogni contropartita significativa. Per l'elemento totale (40) registra un movimento per ogni scadenza di pagamento. Non e' a menu: viene chiamato da COGE50 all'interno del ciclo di caricamento fatture in contabilita' (Co/Ge).
Oltre alle scritture contabili, COGE51 alimenta la contabilita' analitica (centri di costo):
per ogni riga di movimento magazzino della fattura genera i relativi movimenti sui centri di
costo su COGMOVCC, guidati dalle contropartite/centri di costo della merce e, quando presenti,
dalle percentuali centri di costo per merce (COGMERCC).
Interfaccia¶
CALL "COGE51" USING stringhe wft-rec lk-area
| Parametro | Copybook | Contenuto |
|---|---|---|
stringhe |
wcont.cpy + wcont1.cpy |
Area di contesto standard. In user-area e' ridefinito e51-num-doc (numero del documento di prima nota generato, restituito al chiamante) |
wft-rec |
cogfattu.cpy con replacing leading "fat-" by "wft-" |
Record della fattura da contabilizzare (copiato in fat-rec all'ingresso) |
lk-area |
lnke51.cpy |
Dati fissi passati dal chiamante: contropartite spese (lk-conto-spese, lk-sp-to) e bolli (lk-conto-bolli, lk-bo-to), tipo nota accredito (lk-tip-nac), data economica (lk-data-econ), partita da utilizzare (lk-part-utilizzata), flag fattura da ricevere (lk-fatt-da-ricev) |
File e tabelle principali¶
| File/Tabella | Copybook | Uso | Note |
|---|---|---|---|
| COGFATTU | cogfattu.cpy (fat-rec) |
I-O | Fattura da contabilizzare; aggiornata con il numero di prima nota generato |
| COGRACCO | cogracco.cpy (rac-rec) |
Input | Raccordo fattura -> documenti di magazzino: rac-key-bolla fornisce la chiave del DDT origine |
| COGTESAP | cogtesap.k01/.fd (tsa-rec) |
Input | Dati aggiuntivi del documento di magazzino. Chiave tsa-chia1 = testata documento. Campo tsa-merce = merce "Centro di Costo" di testata (TASK-5831) |
| COGMOMAG | (inline mag-*) |
Input | Righe movimento magazzino del DDT: valore riga (mag-valore), merce (mag-merce3), magazzino (mag-mag1), riferimenti documento (mag-anno/mag-tipob1/mag-bolla1/mag-prog) |
| COGMERCI | cogmerci.cpy (mer-rec) |
Input | Anagrafica merce: contropartita contabile (mer-codcontr). Chiave mer-chia |
| COGMERCC | cogmercc.cpy (cpm-rec) |
Input | Percentuali centri di costo per merce. Chiave secondaria cpm-chia3 = cpm-fl-tipo + cpm-merce + cpm-mag + cpm-cc + cpm-prog. Campi: conto (cpm-liv1/2/3), percentuale (cpm-perc), reparto (cpm-rep), magazzino (cpm-mag) (TASK-4704) |
| COGMERAP | (inline map-*) |
Input | Dati aggiuntivi merce: reparto (map-reparto), centro di costo (map-cc). Chiave map-chia |
| COGMERA2 | (inline ma2-*) |
Input | Centro di costo di vendita alternativo (ma2-cc-ven) |
| COGTABEL | cogtabel.cpy (euta-rec) |
Input | Contropartite (tipo 16) e centri di costo (tipo 18) |
| COGMOVCC | (inline cdc-*) |
Output | Movimenti centri di costo generati (contabilita' analitica): conto (cdc-liv1/2/3), reparto (cdc-rep), magazzino (cdc-mag), merce (cdc-merce), importo (cdc-importo), riferimenti documento (cdc-mag-*), commessa/sottocommessa (cdc-commessa/cdc-sottocommessa), progressivo (cdc-pro-pro) |
| COGPNONC / COGARIVA / COGPARTI / COGMOVPA | vari | Output | Prima nota non contabilizzata, righe IVA, partite aperte e movimenti partita generati dalla contabilizzazione |
Copybook di supporto principali: k-gen.cpy (k-merce-null), k-tipi-cogtabel.cpy, wgrave,
wnscr, wopenf, wstato. Utility: util-u10 (COGU10W), util-u18 (COGU18).
Logica di elaborazione¶
Il flusso generale (lettura fattura, determinazione divisa, ricerca conti CoGe, validazioni, scadenze, loop sugli elementi con registrazione IVA + prima nota, partite aperte, aggiornamento COGFATTU) e' descritto nel flusso Moduli di servizio. Questa scheda approfondisce il blocco centri di costo, dove si concentrano le modifiche recenti.
Blocco centri di costo (x-cc-mag-cont / cc-rep-magaz)¶
A partire dalla fattura, cc-rep-age scandisce COGRACCO per risalire ai documenti di magazzino
raccordati; per ogni raccordo esegue x-cc-mag-cont, che elabora sia i movimenti di magazzino
(cc-rep-magaz) sia i movimenti "no merci" (cc-rep-cogcontr).
1. Lettura testata DDT (COGTESAP) — TASK-5831.
Prima di elaborare le righe, x-cc-mag-cont legge la testata del documento di magazzino su
COGTESAP (rd-cogtesap con tsa-chia1 = rac-key-bolla). Se la lettura fallisce, tsa-rec viene
azzerato. Il campo tsa-merce (merce "Centro di Costo", articolo Servizio) valorizzato in testata
modifica il comportamento del blocco successivo.
2. Ciclo sulle righe di magazzino (cc-rep-magaz).
Con st-cogmomag-notmin + rdnxt-cogmomag si scandiscono le righe COGMOMAG del DDT
(mag-testa = rac-key-bolla). Per ogni riga:
- Lettura merce (COGMERCI). La chiave
mer-chiae' normalmentemag-merce3(merce di riga). Con TASK-5831, setsa-merce not = k-merce-nullla chiave usata e'tsa-merce: tutto il documento viene ricondotto alla merce "Centro di Costo" di testata invece che alla merce di riga. - Controllo percentuali per merce (COGMERCC) — TASK-2086. Se
tsa-merceNON e' valorizzato, si eseguecc-rep-magaz-cogmercc: se esistono percentuali per merce (w-fl-trovato-cogmercc = "S") la ripartizione avviene per percentuale e la riga viene chiusa (go to cc-rep-magaz-10-loop). Setsa-merceE' valorizzato (TASK-5831), il controllo percentuali viene saltato: si azzeraw-fl-trovato-cogmercce si salta direttamente all'etichettacc-rep-magaz-20. - Ripartizione standard (
cc-rep-magaz-20). Se la merce ha una contropartita (mer-codcontr) coincidente col conto di prima nota in lavorazione, si compone e scrive un record COGMOVCC: conto/centro di costo da COGTABEL (tipo 16/18, con priorita' ama2-cc-vensumap-cc), reparto damap-reparto, magazzinomag-mag1, importomag-valore(convertito in divisa di conto via COGU10W se necessario), riferimenti documento e commessa/sottocommessa via COGU18.
Ripartizione per percentuali (cc-rep-magaz-cogmercc) — TASK-2086 + TASK-4704¶
Quando la merce ha percentuali centri di costo definite su COGMERCC, l'importo di riga
(w-mag-importo = mag-valore, eventualmente convertito in divisa di conto) viene ripartito su piu'
record COGMOVCC secondo le percentuali. La ricerca avviene in due passaggi sulla chiave cpm-chia3:
- Primo tentativo — con magazzino (
cc-rep-mag-mercc).st-cogmercc-notmin-chia3concpm-fl-tipo = "R",cpm-merce = mag-merce3ecpm-mag = mag-mag1. Per ogni riga letta conrdnxt-cogmerccche rispetta i tre valori (tipo "R", stessa merce, stesso magazzino) si impostaw-fl-trovato-cogmercc = "S"e si scrive un movimento centri di costo. - Secondo tentativo — magazzino a spazi (
cc-rep-mag-mercc-190). Se il primo passaggio non trova nulla (cc-rep-mag-mercc-90conw-fl-trovato-cogmerccancora vuoto), si ripete la ricerca concpm-mag = spaces(percentuali generiche non legate al magazzino).
Per ogni riga percentuale trovata (in entrambi i passaggi):
- reparto: da
cpm-repse valorizzato, altrimenti damap-reparto(COGMERAP); - magazzino: da
cpm-magse valorizzato, altrimentimag-mag1; - conto:
cpm-liv1/2/3->cdc-liv1/2/3; mercemer-chia; riferimenti documentocdc-mag-*; - commessa/sottocommessa via
CALL "COGU18"(operazione"cerca-commessa", dati riempiti dafill-u18); - importo:
cdc-importo = w-mag-importo * cpm-perc / 100, arrotondato viaCALL "COGU10W"(operazionek-u10-arrotonda); l'importo arrotondato viene accumulato inw-mag-impo-cc; - scrittura del record con
write-cogmovcc(progressivow-cdc-prog, con retry su chiave duplicata).
Rettifica del residuo di arrotondamento. Alla chiusura di ciascun passaggio (cc-rep-mag-mercc-90
per il primo, cc-rep-mag-mercc-190 per il secondo), se w-fl-trovato-cogmercc = "S" e la somma
ripartita (w-mag-impo-cc) differisce dall'importo totale di riga (w-mag-importo), l'ultimo record
scritto viene corretto per il residuo (rwr-cogmovcc) in modo da riquadrare la ripartizione.
Chiamate a sottoprogrammi¶
| Programma | Ruolo nel blocco centri di costo |
|---|---|
| COGU18 | Operazione "cerca-commessa": risolve commessa (u18-o-tsc -> cdc-commessa) e sottocommessa (u18-o-sot -> cdc-sottocommessa) a partire dai riferimenti del movimento magazzino (fill-u18) |
| COGU10W | Operazione "Cambio" per la conversione dell'importo in divisa di conto e operazione k-u10-arrotonda per l'arrotondamento dell'importo ripartito |
Fuori dal blocco centri di costo, COGE51 richiama inoltre i servizi di contabilizzazione generale (scadenze, IVA, partite) descritti nel flusso di servizio.
Storico modifiche¶
- TASK-5831 — Centro di Costo da testata DDT. Aggiunta la lettura di COGTESAP in
x-cc-mag-cont(rd-cogtesap, chiaverac-key-bolla). Setsa-mercee' valorizzato (diverso dak-merce-null), la merce "Centro di Costo" (articolo Servizio) di testata sostituisce la merce di riga (mag-merce3) come chiave COGMERCI (mer-chia); inoltre viene saltato il controllo sulle percentuali per merce, saltando direttamente acc-rep-magaz-20. L'inizializzazione del nuovo campotsa-mercesui record COGTESAP esistenti e' a carico della utility una-tantum TEMPO814. - TASK-4704 — Magazzino in chiave COGMERCC. Aggiunto
cpm-magalla chiave secondariacpm-chia3. La ricerca delle percentuali (cc-rep-magaz-cogmercc) esegue un doppio tentativo: prima concpm-mag = mag-mag1(percentuali del magazzino del documento), poi — se non trovate — concpm-mag = spaces(percentuali generiche). Aggiunti i paragraficc-rep-mag-mercc-loop-100,cc-rep-mag-mercc-190e rinominata l'uscita incc-rep-mag-mercc-999. - TASK-2086 (precedente). Introduzione della ripartizione dei centri di costo per percentuali
merce (
cc-rep-magaz-cogmercc): se presenti percentuali su COGMERCC si usano quelle, altrimenti l'inserimento e' quello standard succ-rep-magaz-20.
Documentazione tecnica