Vai al contenuto

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

  1. 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).
  2. Nome file di transito: il file indicizzato temporaneo cogtrans viene creato con un nome fisico costruito da ext-tmp-dir + slash + #$ + program-id + . + numero operatore (wo-oper). In a4 il file viene aperto in output come lock di funzione (se lo stato non e' "00" la funzione e' gia' in uso da un altro operatore e si esce), quindi riaperto in i-o.
  3. 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.
  4. a-richiesta-conferma: alla pressione di F3, controllo di validita' e conferma (acc-conf); se confermato si lancia elabora.

Elaborazione (elabora)

Tre passi in sequenza:

  1. e1-canc-data9 — Cancella tutti i record COGSLIMD con sld-data = 99999999 (i saldi provvisori della precedente elaborazione), scandendo per chiave 3.
  2. e2-creo-saldo — In due parti:
  3. 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 a sld-saldo-pre.
  4. 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 a tm-data. Per ogni bolla di cliente (causale con euta-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 in cogtrans (marcatura "cliente con movimenti di merce diversa da imballi").
  5. e3-aggiorna — Rilegge i record provvisori COGSLIMD (sld-data = 99999999) e calcola i saldi definitivi:
  6. Se il cliente e' in gestione fatturazione imballi (ana-ges-imb = "F") e ha movimenti di merce non imballo nel periodo (presenza in cogtrans): sld-fatturati = sld-saldo-pre - sld-resi, sld-saldo-att = sld-consegnati; se il fatturato risulta negativo viene azzerato e sottratto dal saldo attuale.
  7. Altrimenti: sld-fatturati = 0 e sld-saldo-att = sld-saldo-pre - sld-resi + sld-consegnati (nessuna fattura di soli imballi).
  8. Viene impostata sld-data-ela = tm-data come 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 ... THRU e GO TO interni ai paragrafi e1/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 in output all'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 marcata 270307 nel sorgente, in precedenza si partiva direttamente da az-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.