COGD23 — Preparazione Imballi alla Fatturazione¶
| Campo | Valore |
|---|---|
| Sorgente | cbl/cogd23.cbl |
| Program-ID | cogd23 |
| Tipo | Programma interattivo (maschera GUI) |
| Posizione menu | Vendite > Fatturazione > Periodica > Imballi > Preparazione |
Scopo¶
COGD23 prepara i saldi degli imballi da fatturare periodicamente ai clienti (fatturazione a fine mese del residuo imballi). Partendo dai saldi consolidati per cliente e merce imballo (archivio COGSLIMD), il programma ricostruisce i movimenti di consegna/reso avvenuti dalla data di consolidato imballi fino a una data fine elaborazione indicata dall'operatore, e aggiorna in COGSLIMD i saldi provvisori (record con sld-data = 99999999) da cui la successiva fatturazione periodica ricava le quantita' da addebitare.
L'obiettivo e' evitare che vengano emesse fatture di soli imballi: il saldo "da fatturare" viene conteggiato solo per i clienti che, nel periodo in esame, hanno anche movimenti di merce diversa dagli imballi.
La modalita' di gestione imballi del cliente e' governata dal campo ana-ges-imb (COGGEANA):
"F"= fatturazione a fine mese del residuo imballi;"S"= mantenimento del saldo (nessuna fatturazione).
La data di riferimento del consolidato imballi e' l'anagrafica azienda az-data-imb (valorizzata quando az-imballi = "B").
Struttura / Flusso¶
Il programma e' organizzato secondo lo schema standard delle maschere GUI generate da Screen Designer (main / apri).
Fase interattiva¶
apri: controllo abilitazione (ctr-abil), inizializzazione programma (z-99-init-program), caricamento lingua, lettura anagrafica azienda (rd-azi), apertura file (open-files), lettura data di sistema (century-date) e divisa di conto (get-divisa-conto). Viene attivato il tasto F3 (conferma) e F8 (calendario).- Nome file di transito: il file indicizzato temporaneo
cogtransviene creato con un nome fisico costruito daext-tmp-dir+ slash +#$+ program-id +.+ numero operatore (wo-oper). Ina4il file viene aperto inoutputcome lock di funzione (se lo stato non e'"00"la funzione e' gia' in uso da un altro operatore e si esce), quindi riaperto ini-o. a-tm-data: accept del solo campo di input della maschera, la data fine elaborazione (tm-data), con supporto calendario (COGS52) e gestione eventi/mouse.a-richiesta-conferma: alla pressione di F3, controllo di validita' e conferma (acc-conf); se confermato si lanciaelabora.
Elaborazione (elabora)¶
Tre passi in sequenza:
e1-canc-data9— Cancella tutti i record COGSLIMD consld-data = 99999999(i saldi provvisori della precedente elaborazione), scandendo per chiave 3.e2-creo-saldo— In due parti:- Creazione saldi provvisori per cliente: scandisce COGGEANA (clienti,
ana-tipo = "C"); per ogni cliente legge i saldi COGSLIMD alla data di consolidato imballi (az-data-imb) e riporta il saldo attuale (sld-saldo-att) sui record provvisori (sld-data = 99999999, chiave cliente+merce), sommandolo asld-saldo-pre. - Ricerca movimenti imballi: a partire dal giorno successivo alla data di consolidato imballi (calcolata con DTPRG/PRGDT su
az-data-imb), scandisce le testate COGTESBO per data (chiave 2) fino atm-data. Per ogni bolla di cliente (causale coneuta-cb-cli-for = "C"da COGTABEL tipo 15) legge le righe COGMOMAG: per le merci imballo (mer-vuoto = "I") accumula le quantita' rese (mag-entrusc = "E"→sld-resi) o consegnate (altrimenti →sld-consegnati) sui record provvisori; per le merci non imballo memorizza il cliente incogtrans(marcatura "cliente con movimenti di merce diversa da imballi"). e3-aggiorna— Rilegge i record provvisori COGSLIMD (sld-data = 99999999) e calcola i saldi definitivi:- Se il cliente e' in gestione fatturazione imballi (
ana-ges-imb = "F") e ha movimenti di merce non imballo nel periodo (presenza incogtrans):sld-fatturati = sld-saldo-pre - sld-resi,sld-saldo-att = sld-consegnati; se il fatturato risulta negativo viene azzerato e sottratto dal saldo attuale. - Altrimenti:
sld-fatturati = 0esld-saldo-att = sld-saldo-pre - sld-resi + sld-consegnati(nessuna fattura di soli imballi). - Viene impostata
sld-data-ela = tm-datacome data di elaborazione corrente.
Chiusura (fine / z-chiudi)¶
Chiusura file (z-close-files), chiusura e cancellazione fisica del file di transito cogtrans, chiusura finestra, z-99-exit-program, exit program.
Nota: il sorgente usa lo stile legacy con
PERFORM ... THRUeGO TOinterni ai paragrafie1/e2/e3; e' codice preesistente e non segue le convenzioni attuali (PERFORM semplice / niente GO TO) previste per il nuovo codice.
File e tabelle principali¶
| File logico | Record | Chiave usata | Uso |
|---|---|---|---|
| COGSLIMD | sld-rec |
chiave 1 (sld-chia1 = ana+data+merce), chiave 3 (.k03) |
Saldi imballi (archivio principale letto/aggiornato). Record provvisori con sld-data = 99999999 |
| COGGEANA | ana-rec |
ana-chia (tipo+cod) |
Anagrafica clienti/fornitori; scan clienti (ana-tipo = "C"), lettura ana-ges-imb |
| COGTESBO | tes-rec |
chiave 2 (tes-chia2, per data) |
Testate documenti di magazzino; scan bolle per data fino a tm-data |
| COGMOMAG | mag-recz |
chiave 1 (mag-testa + mag-prog) |
Righe movimenti di magazzino della bolla; mag-merce3, mag-entrusc, mag-qtamagaz, mag-tipocf, mag-nonno |
| COGMERCI | mer-rec |
mer-chia |
Anagrafica merci; flag imballo mer-vuoto = "I" |
| COGTABEL | euta-rec |
tipo 15 + tes-causale |
Causali di bolla; flag euta-cb-cli-for ("C" = bolla cliente) |
| COGTRANS | trs-rec |
trs-chia1 (tipo+cod cliente) |
File indicizzato temporaneo di lavoro: clienti con movimenti di merce non imballo nel periodo |
Dettaglio COGSLIMD (sld-rec)¶
| Campo | Descrizione |
|---|---|
sld-ana (sld-ana-tip + sld-ana-cod) |
Codice anagrafico di riferimento (cliente) |
sld-data |
Data di competenza del saldo; 99999999 = record provvisorio in elaborazione |
sld-merce (sld-mer-gru/sot/cod) |
Codice merce imballo |
sld-saldo-pre |
Saldo precedente |
sld-consegnati |
Quantita' consegnata nel periodo |
sld-resi |
Quantita' resa nel periodo |
sld-fatturati |
Quantita' da fatturare |
sld-saldo-att |
Saldo attuale |
sld-data-ela |
Data di elaborazione corrente (per i record con sld-data = 99999999) |
File di transito COGTRANS (trs-rec)¶
File indicizzato temporaneo dichiarato manualmente nel sorgente (SELECT/FD, non gestito da Screen Designer). Nome fisico in w-trs-name, cancellato fisicamente in chiusura.
01 trs-rec.
02 trs-chia1.
03 trs-tip-cli pic x(01).
03 trs-cod-cli pic 9(05).
02 trs-dati.
03 trs-des-cli pic x(40).
Copybook principali¶
Screen Designer (generati)¶
| Copybook | Contenuto |
|---|---|
cogd23.select |
SELECT dei file gestiti dalla maschera |
cogd23.fd |
FD dei file |
cogd23.wrk |
Working storage della maschera |
cogd23.decla |
Declaratives |
cogd23-01.scr |
Definizione screen |
cogd23.prc |
Routine di I/O e servizio |
Record e strutture¶
| Copybook | Contenuto |
|---|---|
feurtab.fd / cogfiles.cpy |
FD feurtab |
cogslimd.cpy / cogslimd.k03 |
Record e routine I/O chiave 3 COGSLIMD |
cogtesbo.k02 |
Routine I/O chiave 2 (data) COGTESBO |
cogtrans.k01 |
Routine I/O del file di transito COGTRANS |
cogazien.cpy |
Anagrafica azienda (az-data-imb, az-main-mag) |
k-u10.cpy |
Costanti COGU10 |
Working storage / utility comuni¶
| Copybook | Contenuto |
|---|---|
wgrave.cpy / wnscr.cpy / wopenf.cpy / wstato.cpy |
Working storage comuni (stato, apertura file, ecc.) |
utilu10.cpy |
Interfaccia COGU10W (divisa/importi) |
utils52.cpy |
Interfaccia COGS52 (calendario) |
wcont.cpy / wcont1.cpy |
Linkage stringhe |
grave.cpy / mmmask.cpy / opengen.cpy / stato.cpy / stato1.cpy / winmsg.cpy |
Routine standard (errori gravi, maschera, apertura generica, gestione stato, messaggi) |
getdcont.cpy |
Paragrafo get-divisa-conto (chiama COGU10W) |
Sottoprogrammi chiamati (CALL)¶
| Programma | Scopo |
|---|---|
| DTPRG | Conversione data → progressivo (per calcolare il giorno successivo a az-data-imb) |
| PRGDT | Conversione progressivo → data (inverso di DTPRG) |
| cogu10w | Recupero divisa di conto per data (via getdcont.cpy) |
COGS52 (calendario) e' invocato tramite l'interfaccia utils52.cpy nel campo data.
Note¶
- Il file di transito COGTRANS e' un archivio indicizzato temporaneo, univoco per operatore (nome che include
wo-oper), aperto inoutputall'avvio come lock di funzione: se non riesce ad aprirlo con stato"00"il programma segnala "Funzione gia' in uso dall'operatore!!" ed esce. Alla chiusura viene cancellato fisicamente (delete file). - La ricerca dei movimenti parte dal giorno successivo alla data di consolidato imballi (
az-data-imb+ 1 giorno, calcolata via DTPRG/PRGDT): modifica marcata270307nel sorgente, in precedenza si partiva direttamente daaz-data-imb. - La logica che distingue i clienti "con movimenti di merce non imballo" (marcatura in COGTRANS, modifica
150307) serve a non fatturare imballi a clienti che nel periodo non hanno avuto altre movimentazioni, evitando fatture di soli imballi. - I record provvisori di lavoro sono quelli con
sld-data = 99999999; l'elaborazione li cancella (e1), li ricrea dai saldi consolidati (e2) e li chiude con il calcolo finale (e3). special-names. decimal-point is comma.: il programma usa la virgola come separatore decimale.