Vai al contenuto

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-chia e' normalmente mag-merce3 (merce di riga). Con TASK-5831, se tsa-merce not = k-merce-null la 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-merce NON e' valorizzato, si esegue cc-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). Se tsa-merce E' valorizzato (TASK-5831), il controllo percentuali viene saltato: si azzera w-fl-trovato-cogmercc e si salta direttamente all'etichetta cc-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' a ma2-cc-ven su map-cc), reparto da map-reparto, magazzino mag-mag1, importo mag-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:

  1. Primo tentativo — con magazzino (cc-rep-mag-mercc). st-cogmercc-notmin-chia3 con cpm-fl-tipo = "R", cpm-merce = mag-merce3 e cpm-mag = mag-mag1. Per ogni riga letta con rdnxt-cogmercc che rispetta i tre valori (tipo "R", stessa merce, stesso magazzino) si imposta w-fl-trovato-cogmercc = "S" e si scrive un movimento centri di costo.
  2. Secondo tentativo — magazzino a spazi (cc-rep-mag-mercc-190). Se il primo passaggio non trova nulla (cc-rep-mag-mercc-90 con w-fl-trovato-cogmercc ancora vuoto), si ripete la ricerca con cpm-mag = spaces (percentuali generiche non legate al magazzino).

Per ogni riga percentuale trovata (in entrambi i passaggi):

  • reparto: da cpm-rep se valorizzato, altrimenti da map-reparto (COGMERAP);
  • magazzino: da cpm-mag se valorizzato, altrimenti mag-mag1;
  • conto: cpm-liv1/2/3 -> cdc-liv1/2/3; merce mer-chia; riferimenti documento cdc-mag-*;
  • commessa/sottocommessa via CALL "COGU18" (operazione "cerca-commessa", dati riempiti da fill-u18);
  • importo: cdc-importo = w-mag-importo * cpm-perc / 100, arrotondato via CALL "COGU10W" (operazione k-u10-arrotonda); l'importo arrotondato viene accumulato in w-mag-impo-cc;
  • scrittura del record con write-cogmovcc (progressivo w-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, chiave rac-key-bolla). Se tsa-merce e' valorizzato (diverso da k-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 a cc-rep-magaz-20. L'inizializzazione del nuovo campo tsa-merce sui record COGTESAP esistenti e' a carico della utility una-tantum TEMPO814.
  • TASK-4704 — Magazzino in chiave COGMERCC. Aggiunto cpm-mag alla chiave secondaria cpm-chia3. La ricerca delle percentuali (cc-rep-magaz-cogmercc) esegue un doppio tentativo: prima con cpm-mag = mag-mag1 (percentuali del magazzino del documento), poi — se non trovate — con cpm-mag = spaces (percentuali generiche). Aggiunti i paragrafi cc-rep-mag-mercc-loop-100, cc-rep-mag-mercc-190 e rinominata l'uscita in cc-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 su cc-rep-magaz-20.

Documentazione tecnica