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 paginast2: 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 correntesaldo-prec: saldo iniziale letto da COGSLPCO (prima del periodo)cli-dare/cli-avere: totali complessivi di tutti i soggettimem-cli/mem-tip-cli: memorizzazione soggetto corrente per rilevare cambio nominativofl-pno-pro: flag tipo prima nota ("P" = provvisoria, "O" = provvisoria + flag 869)fl-vis-provv: "S" se il campotm-provnon e' visibile (azienda senza gestione provvisorio)
Logica di elaborazione¶
Flusso principale¶
Fase 1 - Configurazione iniziale (apri)
- Inizializzazione standard,
ctr-abil,rd-azi,open-files. - Lettura esercizio contabile da COGTABEL (tipo 66).
- Impostazione titolo maschera in base a
dep-tipo: "Stampa saldi clienti" o "Stampa Saldi Fornitori". - Ricerca del conto partite aperte (
cerca-wuta,tipo-cerca-wuta = 1): scansione COGTABEL tipo 45 cercando il record coneuta-p-tipo = dep-tipo. Caricatm-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)
- Verifica tutti i campi obbligatori (
x-imposta-conferma). - Richiesta conferma con
acc-conf. - Chiamata a COGS54 per selezione destinazione stampa.
- Se
tm-cli-cod-a = 0→ forza a 99999. - Imposta
fl-pno-pro: - spazio: solo movimenti definitivi
- "P": include prima nota provvisoria
- "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-cliper 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-averecon COGU10W - Calcolo saldo: se dare > avere → saldo D; se avere > dare → saldo A
- Il
saldo-precviene sommato al relativo accumulatore prima del calcolo finale - Salto pagina se
ctr-riga > s54-stm-lin - 9(chiamasaltop) 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-cogslpcorecupera il saldo progressivo precedente all'anno corrente: il campocon-prodare/con-proavereviene 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 operazionek-u10-editaprima di essere sommati. - I tipi operazione da escludere filtrano su
pno-to: se la data di valuta superatm-data-a, il movimento viene saltato. - La stampa usa larghezza 108 caratteri (
st2= 108c), adatta a stampa in orizzontale o font ridotto.