Vai al contenuto

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 tipo 67, campo euta-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 quando tm-agg non 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

  1. Inizializzazione (a000): controllo abilitazione (ctr-abil), z-99-init-program, apertura file (open-files), lettura azienda (rd-azi), lettura data di sistema (century-date).
  2. Determina la divisa conto tramite COGU10W (u10-ope = "GetDivisaConto") in w-currency-conto.
  3. Crea il file di transito cogtrans: nome fisico costruito in name-trs con ext-tmp-dir, ext-os-slash, prefisso #$SCR. e l'operatore wo-oper; open output + close + open i-o per azzerarlo.
  4. Prepara la maschera (rd-msk-pop, z-costruisci-controlli, tasti F3/F8).
  5. Impostazione valori di default (a4/a05): magazzino '1', divisa = divisa conto, flag aggiorna saldi = 'N', data azzerata.
  6. Accept parametri (con navigazione F2 indietro / F3 conferma / F8 aiuto/calendario / mouse):
  7. a-tm-magMagazzino (con aiuto F8 via send-w36, controllo esistenza su COGMAGAZ).
  8. a-tm-data-daData da stampare (calendario COGS52 via util-s52).
  9. a-tm-aggAggiorna saldi (radio/check via util-s60).
  10. Conferma (a-richiesta-confermaa222): controlli complessivi (x-imposta-conferma) e richiesta divisa/parametri di stampa via COGS54 (s54-id = 'COGB01').
  11. 1ª fase — creazione transito (ela-00ela-50-ctr):
  12. start/read next su COGMOMAG per chiave data (mag-chia2), filtrando magazzino, data e tipo bolla = 'D'.
  13. Per ogni riga valida: lettura merce (COGMERCI), calcolo litri, calcolo valore con IVA/cambio, e read/rewrite/write sul transito cogtrans sommando trs-pezzi, trs-litri, trs-val; accumulo nella tabella contrassegni.
  14. Se n-release = 0 a fine scansione: messaggio "ESTREMI DI ELABORAZIONE ERRATI".
  15. 2ª fase — stampa (st-00st-90):
  16. start/read next sul transito cogtrans in ordine di chiave (trs-chia1 = merce + numero bolla).
  17. 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).
  18. Gestione salto pagina su ctr-rig e ristampa testata (testa).
  19. A fine file: totale ultima merce (wr-tot), riepilogo per capacita' (wr-riep: tab-contrassegni, "TOTALE LITRI"), salto pagina finale.
  20. Chiusura stampa (fine-stampa): COGS54 con s54-after-print = "S", poi cancel "COGS54".
  21. 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 numerosi GO TO per il flusso della maschera e dell'elaborazione. E' codice storico ("Conversione win : Daniele"); le convenzioni attuali del progetto (solo PERFORM semplici, niente GO 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: cogtrans e' ricreato a ogni esecuzione con nome basato sull'operatore in ext-tmp-dir; non gestisce esecuzioni concorrenti dello stesso operatore.
  • Origine: intestazione del sorgente "Stampa bollato vendite x prodotto — Programma apposito x CANTINA".