COGB01 — Stampa bollato vendite dettaglio (per merce)¶
Intestazione¶
| Campo | Valore |
|---|---|
| Sorgente | cbl/cogb01.cbl |
| Program-ID | cogb01 |
| Tipo | Programma di stampa interattivo (maschera + spool) |
| Posizione menu | Vendite > Stampe > Bollato Vendite Dettaglio |
Programma nato per la gestione CANTINA: produce l'elenco delle bolle di vendita al dettaglio ("bollato vendite") di un magazzino a una data, raggruppato per merce, con totali per merce e riepilogo del venduto per capacita' (litri) suddiviso per contrassegno.
Scopo e logica generale¶
COGB01 estrae dai movimenti di magazzino (COGMOMAG) le bolle di dettaglio (tipo bolla D) di un dato magazzino e di una data data, le accumula in un file di transito indicizzato temporaneo (cogtrans) sommando pezzi, litri e valore per merce+bolla, e infine stampa il bollato leggendo il transito in ordine di chiave.
Elementi caratteristici dell'elaborazione:
- Litri: se l'unita' di misura alternativa della merce e'
LT(mer-um-alt = 'LT'), i litri si ottengono moltiplicando la quantita' di magazzino per il coefficiente della merce (mag-qtamagaz * mer-coeff); altrimenti coincidono con la quantita'. - Pezzi / colli: normalmente il numero di pezzi e'
mag-qtamagaz; se il movimento ha colli significativi (mag-colli not = zero) si usa il numero di colli al posto della quantita'. - Valore: il valore riga (
mag-valore) e' un imponibile; il programma vi aggiunge l'IVA ricavando l'aliquota dalla tabella IVA (COGTABEL tipo67, campoeuta-ivali) e ricalcola l'importo lordo. Se la divisa del movimento (mag-currency) e' diversa dalla divisa richiesta (tm-div) esegue prima la conversione via COGU10W. - Contrassegni / capacita': i movimenti sono accumulati anche in una tabella interna
tab-contrassegni(max 10 tipi,tc-tipo/tc-pezzi/tc-litri) per produrre la "DISTINTA DEL VENDUTO PER CAPACITA'". - Aggiornamento saldi (opzionale): se il flag "aggiorna saldi" (
tm-agg = 'N'... in realta' aggiorna quandotm-aggnon e''N') e' attivo, al totale di ogni merce aggiorna il saldo bollato su COGSLIMB (simb-qta-dare,simb-qta-avere,simb-val-dare), creando il record se assente.
La stampa non e' inviata direttamente: le righe vengono composte nel record riga e scritte sul file di spool flsta; la testata/chiusura del job di stampa e' gestita dalla subroutine COGS54 (con s54-after-print = "S" in fase di chiusura).
Struttura / Flusso¶
- Inizializzazione (
a000): controllo abilitazione (ctr-abil),z-99-init-program, apertura file (open-files), lettura azienda (rd-azi), lettura data di sistema (century-date). - Determina la divisa conto tramite COGU10W (
u10-ope = "GetDivisaConto") inw-currency-conto. - Crea il file di transito cogtrans: nome fisico costruito in
name-trsconext-tmp-dir,ext-os-slash, prefisso#$SCR.e l'operatorewo-oper;open output+close+open i-oper azzerarlo. - Prepara la maschera (
rd-msk-pop,z-costruisci-controlli, tasti F3/F8). - Impostazione valori di default (
a4/a05): magazzino'1', divisa = divisa conto, flag aggiorna saldi ='N', data azzerata. - Accept parametri (con navigazione F2 indietro / F3 conferma / F8 aiuto/calendario / mouse):
a-tm-mag— Magazzino (con aiuto F8 viasend-w36, controllo esistenza su COGMAGAZ).a-tm-data-da— Data da stampare (calendario COGS52 viautil-s52).a-tm-agg— Aggiorna saldi (radio/check viautil-s60).- Conferma (
a-richiesta-conferma→a222): controlli complessivi (x-imposta-conferma) e richiesta divisa/parametri di stampa via COGS54 (s54-id = 'COGB01'). - 1ª fase — creazione transito (
ela-00…ela-50-ctr): start/read nextsu COGMOMAG per chiave data (mag-chia2), filtrando magazzino, data e tipo bolla= 'D'.- Per ogni riga valida: lettura merce (COGMERCI), calcolo litri, calcolo valore con IVA/cambio, e
read/rewrite/writesul transito cogtrans sommandotrs-pezzi,trs-litri,trs-val; accumulo nella tabella contrassegni. - Se
n-release = 0a fine scansione: messaggio "ESTREMI DI ELABORAZIONE ERRATI". - 2ª fase — stampa (
st-00…st-90): start/read nextsul transito cogtrans in ordine di chiave (trs-chia1= merce + numero bolla).- A ogni cambio merce (
old-merce): stampa totale merce precedente (wr-tot), intestazione articolo con riporto saldo (wr-rip), e le righe bolla (rigel: numero bolla, data, pezzi, litri, valore). - Gestione salto pagina su
ctr-rige ristampa testata (testa). - A fine file: totale ultima merce (
wr-tot), riepilogo per capacita' (wr-riep:tab-contrassegni, "TOTALE LITRI"), salto pagina finale. - Chiusura stampa (
fine-stampa):COGS54cons54-after-print = "S", poicancel "COGS54". - Uscita (
fine/z-chiudi):z-close-files,close cogtrans,z-99-exit-program,exit program.
File e tabelle principali¶
| File logico | Record | Modalita' | Uso |
|---|---|---|---|
| COGMOMAG | mag-* (mag-chia2, mag-mag2, mag-gg2/mm2/aa2, mag-bolla2, mag-tipob1, mag-gru3/sot3/cod3, mag-qtamagaz, mag-colli, mag-valore, mag-currency, mag-da3, mag-contrassegno, mag-alf) |
Input (chiave2 = magazzino+data+bolla) | Movimenti di magazzino: sorgente delle bolle di dettaglio |
| COGMERCI | mer-* (mer-gru/sot/cod, mer-descr, mer-um-alt, mer-coeff) |
Input | Anagrafica merci: descrizione, UM alternativa, coefficiente litri |
| COGMAGAZ | magz-* (magz-tipo, magz-cod, magz-nome) |
Input | Anagrafica magazzini: verifica esistenza e descrizione |
| COGTABEL (feurtab / tabelle euro) | euta-* (euta-tipo, euta-cod, euta-ivali, euta-descr) |
Input | Tabella IVA (tipo 67) per scorporo/aggiunta imposta |
| COGSLIMB | simb-rec (simb-chia1, simb-mag/gru/sot/cod, simb-nonno/padre/figlio, simb-qta-dare, simb-qta-avere, simb-val-dare, simb-currency, simb-gg/mm/aa, chiave2 simb-*2) |
I-O (lettura/scrittura/riscrittura) | Saldi bollato per merce (aggiornati solo se richiesto) |
| FEURTAB | fil-rec |
Input | Tabella nomi file (via cogfiles.cpy) |
| cogtrans | trs-rec (trs-chia1 = trs-merce [trs-gru/sot/cod] + trs-b-num, trs-pezzi, trs-litri, trs-val) |
Transito (i-o) | File indicizzato temporaneo di accumulo per merce+bolla |
| flsta | riga |
Output (spool) | File di stampa (record esterno definito in flsta.cpy), finalizzato da COGS54/UTILST |
Le SELECT/FD e le routine di lettura (rd-cogmomag/rd-cogmerci/rd-cogmagaz/rd-cogtabel/rd-cogslimb, open-files, rd-azi, gli start/read con verbo w-verbo-ok) sono generate da Screen Designer nei copybook cogb01.select, cogb01.fd, cogb01.wrk, cogb01.prc, cogb01.decla. Il file cogtrans e' invece dichiarato manualmente nel sorgente (SELECT, FD trs-rec), essendo un file temporaneo non gestibile da Screens.
Copybook principali¶
Screen Designer (maschera COGB01)¶
| Copybook | Contenuto |
|---|---|
cogb01.select |
SELECT dei file gestiti |
cogb01.fd |
FD e record dei file |
cogb01.wrk |
Working storage della maschera |
cogb01.prc |
Paragrafi generati (letture, controlli maschera, open-files, rd-azi, ecc.) |
cogb01.decla |
Declaratives |
cogb01-01.scr |
Maschera principale (screen section) |
Strutture dati e comuni¶
| Copybook | Contenuto |
|---|---|
cogfiles.cpy |
Record FEURTAB (fil-rec) |
feurtab.fd / flsta.fd / flsta.cpy |
FD FEURTAB e file di stampa flsta/riga |
cogazien.cpy |
Dati azienda |
k-u10.cpy |
Costanti COGU10 |
wstato.cpy / wgrave.cpy / wopenf.cpy / wnscr.cpy |
Working storage comuni (stato, errori gravi, apertura file, nomi schermo) |
wcont.cpy / wcont1.cpy |
Aree di contesto in linkage (stringhe) |
Utility¶
| Copybook | Contenuto |
|---|---|
utilu05.cpy |
Interfaccia COGU05 |
utilu10.cpy |
Interfaccia COGU10W (edit/arrotonda/cambio/divisa conto) — util-u10 |
utilu20.cpy |
Interfaccia COGU20 |
utils52.cpy |
Interfaccia COGS52 (calendario) — util-s52 |
utils54.cpy |
Interfaccia COGS54 (stampa/spool) — util-s54 |
utilw36.cpy |
Interfaccia aiuto magazzini (send-w36) — util-w36 |
getdcont.cpy (GetDCont.cpy) |
Routine GetDivisaConto |
sendw36.cpy |
Paragrafo send-w36 |
printer.cpy |
Stampa riga via UTILST (st-stampa-riga) |
Fine procedure division¶
stato.cpy, stato1.cpy, grave.cpy, winmsg.cpy, opengen.cpy, mmmask.cpy (programma standalone GUI: fornisce z-99-init-program / z-99-exit-program).
Sottoprogrammi chiamati (CALL)¶
| Programma | Sorgente | Scopo |
|---|---|---|
| COGU10W | cbl/cogu10w.cbl |
Divisa conto (GetDivisaConto), cambio valuta (Cambio), arrotondamento (Arrotonda), edit importi con punti (Edita) |
| COGS54 | cbl/cogs54.cbl |
Gestione stampa/spool: richiesta parametri di stampa (s54-id = 'COGB01') e chiusura job (s54-after-print = "S") |
| UTILST | cbl/utilst.cbl |
Stampa riga con meta-comandi (via printer.cpy) |
| COGS52 | (calendario) | Selezione data (accept tm-data-da, via util-s52) — richiamata dai paragrafi generati |
Sono inoltre presenti chiamate a subroutine di controllo maschera generate da Screens (COGS60 per il flag "aggiorna saldi" tramite util-s60, aiuto magazzini W36 tramite util-w36).
Note¶
- Convenzioni legacy: il sorgente usa estesamente
PERFORM ... THRU(es.cstato thru ex-cstato,wr-tot thru ex-wr-tot,wr-riep thru ex-wr-riep) e numerosiGO TOper il flusso della maschera e dell'elaborazione. E' codice storico ("Conversione win : Daniele"); le convenzioni attuali del progetto (soloPERFORMsemplici, nienteGO TO) valgono per il codice nuovo, non per questo modulo. - Solo bolle di dettaglio: vengono considerati esclusivamente i movimenti con
mag-tipob1 = 'D'; le altre tipologie sono ignorate. - Filtro rigido su magazzino e data: l'elaborazione considera un unico magazzino e un'unica data (
tm-mag,tm-data-da); non gestisce intervalli. - Divisa: tutti gli importi sono riportati nella divisa richiesta
tm-div(default = divisa conto); il programma converte i valori dei movimenti in altra divisa e i saldi COGSLIMB con divisa diversa. - Aggiornamento saldi: la scrittura su COGSLIMB avviene in fase di stampa (
wr-tot), quindi la stampa ha effetti collaterali persistenti quando il flag e' attivo; da usare con cautela nelle ristampe. - File di transito:
cogtranse' ricreato a ogni esecuzione con nome basato sull'operatore inext-tmp-dir; non gestisce esecuzioni concorrenti dello stesso operatore. - Origine: intestazione del sorgente "Stampa bollato vendite x prodotto — Programma apposito x CANTINA".