Vai al contenuto

COGK57 - Situazione Clienti / Fornitori (Saldi)

Sorgente: cbl/cogk57.cbl | Program-ID: COGK57 | Tipo: Programma di stampa interattivo

Menu: Contabilita' > Clienti a Part.Aperte > Stampe > Situazione Clienti (e analogo lato fornitori)


Scopo

Programma derivato da COGE49. Stampa i saldi aggregati (dare / avere / saldo) per ogni cliente o fornitore in un dato periodo. Per ogni anagrafica con almeno un movimento, stampa una riga con il totale dare, il totale avere e il saldo netto con il segno (D/A). In fondo riepiloga i totali complessivi. Il programma puo' lavorare sia su clienti (dep-tipo = "C") che su fornitori (dep-tipo = "F"), determinato dal parametro wo-parametro ricevuto in linkage.


File e tabelle

File/Tabella Tipo Modalita' Descrizione
FEURTAB ISAM Input Tabella features/abilitazioni utente
COGTABEL ISAM Input Tabella parametri contabili: tipo 66 (esercizio), tipo 45 (conti partite aperte), tipo 65 (tipi operazione)
COGGEANA ISAM Input Anagrafica clienti/fornitori (lettura dati soggetto: ana-nome, ana-rifmas, ana-rifcon, ana-val)
COGPNONC ISAM Input Prima nota per conto (partite aperte): fonte dei movimenti da sommare
COGPNCON ISAM Input Piano dei conti: verifica esistenza mastro e conto
COGWPNO ISAM Input Movimenti partite aperte (apertura in lettura ma logica principale su COGPNONC)
COGSLPCO ISAM Input Saldi partite per conto: lettura saldo iniziale precedente al periodo (via st-cogslpco-min + rdprv-cogslpco)

Copybook utilizzate

Copybook Descrizione
cogk57.select Definizioni SELECT dei file
cogk57.fd FD dei file principali
cogk57.wrk Working storage specifica: tab-maschera, righe di stampa
cogk57-01.scr Schermata principale (Screen Designer)
cogk57.decla Declaratives I/O
cogk57.prc Procedure di I/O sui file del programma
cogpnonc.k02 Chiave secondaria COGPNONC (per scansione per mastro/conto/soggetto)
cogconta.cpy Record COGTABEL (euta-rec, conta-rec)
cogazien.cpy Dati azienda (az-ges-ip, az-int)
wgrave.cpy, wstato.cpy, wopenf.cpy, wnscr.cpy Standard di programma
utile65.cpy Strutture per COGE65 (ricerca tipo operazione)
utils52.cpy Strutture per editing date
utils54.cpy Strutture per COGS54 (selezione destinazione stampa)
utils65.cpy Strutture per COGS65W (ricerca anagrafica)
utils77.cpy Strutture per supporto (non usato attivamente)
utilu10.cpy Strutture per COGU10W (formattazione importi)
k-u10.cpy Costanti operazioni COGU10W
wcont.cpy, wcont1.cpy Linkage section standard
grave.cpy, mmmask.cpy, opengen.cpy, stato.cpy, stato1.cpy, winmsg.cpy Infrastruttura standard
getdcont.cpy Gestione contatori di controllo

Struttura della working storage

tab-maschera (tm-*)

Parametri di selezione della maschera: - tm-tipo: tipo soggetto ("C" = clienti, "F" = fornitori; derivato da euta-p-tipo del conto trovato) - tm-tipo-disp: descrizione testuale ("Clienti" / "Fornitori") - tm-mastro, tm-conto: conto partite aperte (proposto da COGTABEL tipo 45) - tm-prov: flag inclusione prima nota provvisoria (visibile solo se az-ges-ip = "S") - tm-869, tm-8, tm-6, tm-9: flag per modalita' inclusione provvisorio estesa (attivabili con F8/F6/F9 in sequenza) - tm-cli-cod-da / tm-cli-des-da: codice/descrizione soggetto di partenza - tm-cli-cod-a / tm-cli-des-a: codice/descrizione soggetto di arrivo - tm-data-da / tm-data-a: range date di movimento - tm-top / tm-top-des: primo tipo operazione da escludere - tm-top1 / tm-top1-des: secondo tipo operazione da escludere

Righe di stampa

  • st1: riga di intestazione con nome azienda, titolo e pagina
  • st2: riga di colonne ("Codice Ragione Sociale ... Dare ... Avere ... Saldo D/A")
  • st2-s: riga separatore (all "_")
  • d1: riga dati per soggetto: d1-codcli (codice), d1-descli (nome 35c), d1-dare, d1-avere, d1-saldo, d1-segno ("D"/"A")

Variabili di elaborazione

  • saldodare / saldoavere: accumulatori per il soggetto corrente
  • saldo-prec: saldo iniziale letto da COGSLPCO (prima del periodo)
  • cli-dare / cli-avere: totali complessivi di tutti i soggetti
  • mem-cli / mem-tip-cli: memorizzazione soggetto corrente per rilevare cambio nominativo
  • fl-pno-pro: flag tipo prima nota ("P" = provvisoria, "O" = provvisoria + flag 869)
  • fl-vis-provv: "S" se il campo tm-prov non e' visibile (azienda senza gestione provvisorio)

Logica di elaborazione

Flusso principale

Fase 1 - Configurazione iniziale (apri)

  1. Inizializzazione standard, ctr-abil, rd-azi, open-files.
  2. Lettura esercizio contabile da COGTABEL (tipo 66).
  3. Impostazione titolo maschera in base a dep-tipo: "Stampa saldi clienti" o "Stampa Saldi Fornitori".
  4. Ricerca del conto partite aperte (cerca-wuta, tipo-cerca-wuta = 1): scansione COGTABEL tipo 45 cercando il record con euta-p-tipo = dep-tipo. Carica tm-mastro, tm-conto, tm-prov.

Fase 2 - Acquisizione parametri (a4 → campi maschera)

Sequenza di accept: - a-tm-mastro: codice mastro (con verifica su COGPNCON) - a-tm-conto: codice conto (con verifica su COGPNCON e ricerca in COGTABEL tipo 45 per determinare tm-tipo) - a-tm-prov: flag prima nota provvisoria (solo se az-ges-ip = "S"). La pressione di F8/F6/F9 abilita progressivamente i flag tm-8, tm-6, tm-9 che formano tm-869. - a-tm-cli-cod-da: codice soggetto partenza (ricerca COGS65W, verifica COGGEANA) - a-tm-cli-cod-a: codice soggetto arrivo (ricerca COGS65W, verifica COGGEANA) - a-tm-data-da: data inizio con COGS52W - a-tm-data-a: data fine con COGS52W (se zero → forzato a 99999999) - a-tm-top: tipo operazione da escludere 1 (con F8 apre COGE65) - a-tm-top1: tipo operazione da escludere 2 (con F8 apre COGE65)

Fase 3 - Conferma e stampa (a-richiesta-conferma)

  1. Verifica tutti i campi obbligatori (x-imposta-conferma).
  2. Richiesta conferma con acc-conf.
  3. Chiamata a COGS54 per selezione destinazione stampa.
  4. Se tm-cli-cod-a = 0 → forza a 99999.
  5. Imposta fl-pno-pro:
  6. spazio: solo movimenti definitivi
  7. "P": include prima nota provvisoria
  8. "O": include provvisoria con flag 869 (modalita' estesa)

Fase 4 - Elaborazione (tra-50 → loop per soggetto)

Loop su COGGEANA da tm-cli-cod-da a tm-cli-cod-a: - Filtra per ana-tipo, ana-rifmas, ana-rifcon (deve coincidere con mastro/conto configurato) - Salta i soggetti con ana-val valorizzato (valuta estera / conti speciali) - Legge saldo iniziale da COGSLPCO (movimento precedente al periodo: rdprv-cogslpco) - Scansione COGPNONC (chiave2: per mastro/conto/soggetto):

perform st-cogpnonc-notmin-chia2
perform rdnxt-cogpnonc
  if pno-datamov < tm-data-da or > tm-data-a → skip
  if tm-top = pno-to o tm-top1 = pno-to → verifica data valuta e skip se supera data-a
  if pno-currency != w-currency-conto → conversione con COGU10W
  if pno-segno = "D" → add to saldodare / else to saldoavere
  • Al cambio soggetto (o fine file): chiama tot-cli per stampare la riga del soggetto

Fase 5 - Stampa riga soggetto (tot-cli)

  • Skip se saldodare = 0 AND saldoavere = 0 AND saldo-prec = 0
  • Lettura COGGEANA per nome (se errore: all "*" come nome)
  • Formattazione d1-dare, d1-avere con COGU10W
  • Calcolo saldo: se dare > avere → saldo D; se avere > dare → saldo A
  • Il saldo-prec viene sommato al relativo accumulatore prima del calcolo finale
  • Salto pagina se ctr-riga > s54-stm-lin - 9 (chiama saltop)
  • write riga from d1

Fase 6 - Totali finali (tot-fin)

Stampa riga " * * T O T A L I * * " con i totali complessivi cli-dare e cli-avere.


Paragrafi principali

Paragrafo Descrizione
apri Inizializzazione, ricerca configurazione conto partite aperte
a4 Reset maschera e avvio ciclo acquisizione parametri
a-tm-mastro / a-tm-conto Acquisizione e validazione mastro/conto
a-tm-prov Flag prima nota provvisoria con gestione F8/F6/F9
a-tm-cli-cod-da / a-tm-cli-cod-a Acquisizione range soggetti
a-tm-data-da / a-tm-data-a Acquisizione range date
a-tm-top / a-tm-top1 Acquisizione tipi operazione da escludere
a-richiesta-conferma Verifica parametri, conferma, avvio stampa
tra-50 Loop principale su COGGEANA (soggetti)
tra-51 Loop interno su COGPNONC (movimenti del soggetto)
tot-cli Stampa riga saldo per soggetto
tot-fin Stampa riga totali complessivi
leggi-saldo-iniziale Lettura saldo da COGSLPCO precedente al periodo
saltop Stampa intestazione di pagina
fine-sta Chiusura stampa, richiamo COGS54 post-stampa
cerca-wuta Ricerca configurazione conto partite aperte in COGTABEL tipo 45
x-imposta-conferma Verifica tutti i campi obbligatori
x-controlla-tm-mastro / x-controlla-tm-conto Validazione mastro/conto vs COGPNCON e COGTABEL
controlla-ordine Verifica che codice arrivo >= codice partenza
fine / z-chiudi Chiusura file e uscita

Chiamate a sottoprogrammi

Programma Utilizzo
COGE65 Ricerca tipo operazione incasso/pagamento (F8 su tm-top e tm-top1)
COGS54 Selezione destinazione stampa e stampa
COGS65W Ricerca anagrafica cliente/fornitore per tm-cli-cod-da e tm-cli-cod-a
COGU10W Formattazione importi (dare, avere, saldo) e conversione divisa estera

Note implementative

  • Il programma e' derivato da COGE49 (commento in testa al sorgente: "derivato da coge49").
  • Il conto partite aperte viene trovato automaticamente da COGTABEL tipo 45, non richiesto esplicitamente all'utente come primo passo: il valore viene proposto e puo' essere modificato.
  • La chiave secondaria di COGPNONC (.k02) viene inclusa esplicitamente a fine sorgente (copy "cogpnonc.k02"): permette la scansione per mastro/conto/soggetto.
  • La lettura di COGSLPCO con rdprv-cogslpco recupera il saldo progressivo precedente all'anno corrente: il campo con-prodare/con-proavere viene sommato agli accumulatori del soggetto solo se mastro/conto/soggetto coincidono.
  • I movimenti in divisa estera (pno-currency != w-currency-conto) vengono convertiti via COGU10W con operazione k-u10-edita prima di essere sommati.
  • I tipi operazione da escludere filtrano su pno-to: se la data di valuta supera tm-data-a, il movimento viene saltato.
  • La stampa usa larghezza 108 caratteri (st2 = 108c), adatta a stampa in orizzontale o font ridotto.