COGMAC - Preparazione (esplosione) giri per giorno¶
Panoramica¶
Programma batch-interattivo che genera i "giri" giornalieri (esplosione per data) a partire dalla definizione dei giri per periodo. L'operatore indica un intervallo di date (Da data / A data); il programma, per ogni giro di testata (COGGRTES) e per ogni giorno dell'intervallo, determina in base allo schema configurato quale dettaglio di periodo (COGGRPER) si applica a quel giorno e scrive i corrispondenti record esplosi in COGGRDAY. E' il passaggio che trasforma la pianificazione a periodo (settimanale/mensile/annuale) nell'agenda operativa giorno per giorno.
Prima della generazione, i giri giornalieri gia' presenti nell'intervallo vengono marcati come cancellati logicamente (rielaborazione idempotente dell'intervallo).
Posizione nel menu¶
| Menu | Percorso |
|---|---|
| Magazzino | Uscite > Giri > Preparazione giri |
Struttura del programma¶
File e tabelle utilizzati¶
| File/Tabella | Tipo | Descrizione |
|---|---|---|
| FEURTAB | Input | Tabella di sistema |
| COGGRTES | Input | Testate giri: fornisce i codici giro (grt-cod) e l'operatore (grt-operatore) da esplodere |
| COGGRPER | Input | Dettaglio giri per periodo: contiene, per combinazione giro/mese/settimana/giorno, i destinatari del giro |
| COGGRDAY | I-O | Giri esplosi per giorno: file di output della preparazione (scritto/riscritto, marcatura logica di cancellazione) |
I verbi usati nel sorgente (st-coggrtes-notmin, rdnxt-coggrtes, st-coggrper-notmin, rdnxt-coggrper, rd-coggrper, st-coggrday-notmin-chia3, rdnxt-coggrday, rd-coggrday, wr-coggrday, rwr-coggrday) confermano l'uso di COGGRTES/COGGRPER/COGGRDAY. La FD e' generata da Screens (cogmac.select / cogmac.fd).
Copybook principali¶
| Copybook | Descrizione |
|---|---|
| coggrday.k03 | Chiave secondaria di COGGRDAY per data (grd-data), inclusa manualmente per la scansione st-coggrday-notmin-chia3 |
| cogfiles.cpy | FD di FEURTAB |
| cogmac-01.scr | Screen section (form Da data / A data) |
| cogmac.decla / cogmac.prc | Declaratives e procedure di I/O generate |
| wgrave.cpy / wnscr.cpy / wopenf.cpy / wstato.cpy | Working storage standard |
| cogazien.cpy | Dati azienda |
| utils52.cpy | Interfaccia data/calendario (accept date con F8) |
| utilu20.cpy | Interfaccia utility U20 |
| utilncnf.cpy | Configurazioni RNEWCONF |
| utilgesdate.cpy | Interfaccia a GESDATE (calcolo date, giorno/settimana) |
| wcont.cpy / wcont1.cpy | Aree di linkage comuni |
| grave.cpy / mmmask.cpy / opengen.cpy / stato.cpy / stato1.cpy / winmsg.cpy | Copybook finali di procedura |
Chiamate a sottoprogrammi (CALL)¶
| Programma | Scopo |
|---|---|
| RNEWCONF | Lettura della configurazione MAGAZZINO / SCHEMA-GIRI (schema di periodizzazione dei giri) |
| GESDATE | Per ogni giorno dell'intervallo: somma giorni alla data di partenza e restituisce data risultante, numero/nome del giorno della settimana, settimana del mese e settimana dell'anno |
Logica di elaborazione¶
1. Inizializzazione (apri / x99-confi)¶
Controllo abilitazione, init programma, lettura azienda, apertura file. Legge da RNEWCONF la chiave MAGAZZINO / SCHEMA-GIRI in tm-cfg-schema-giri, che determina lo schema di esplosione (valori A, B, C, D). Attiva i tasti F1 (configura), F3 (conferma), F8 (calendario) e visualizza la maschera "Preparazione giri".
2. Immissione date (a-tm-da-data / a-tm-a-data)¶
Accept della data di inizio e della data di fine intervallo (con supporto calendario F8 via COGS52). x-controlla-tm-a-data richiede la Da data obbligatoria e verifica che A data non sia inferiore a Da data. La conferma (F3 -> a-fine-dati -> acc-conf) avvia l'elaborazione (elabora).
3. Pulizia intervallo (elabora, fase A)¶
Scandisce COGGRDAY per data (st-coggrday-notmin-chia3 a partire da tm-da-data) e per ogni record esploso marca il flag di cancellazione logica grd-fl-canc = "C" (rwr-coggrday), fino a superare l'intervallo. In questo modo la successiva rigenerazione riparte pulita per l'intervallo indicato.
4. Costruzione tabella destinatari (elabora, fase B)¶
Scandisce tutte le testate giro in COGGRTES (st-coggrtes-notmin + loop). Per ogni giro con operatore valorizzato (grt-operatore > 0) esegue giro-giorno per ciascun giorno dell'intervallo:
- richiama GESDATE (
SOMMA-GIORNI) per ottenere la data del giorno corrente e i suoi attributi (giorno-settimana, settimana-mese, settimana-anno); - in base a
tm-cfg-schema-giricerca in COGGRPER (rd-coggrper) il dettaglio applicabile: - schema A: per giro + settimana-del-mese + giorno-settimana; in fallback per giro + solo giorno-settimana;
- schema B: per giro + mese + settimana-del-mese + giorno-settimana; in fallback senza settimana;
- schema C: per giro + settimana-dell-anno + giorno-settimana;
- schema D: per giro + mese + giorno-del-mese; in fallback per giro + solo giorno-del-mese;
- se il dettaglio esiste,
carica-tabaccumula inw-tab(fino a 2000 elementi) chiave giro, data e operatore; se manca, emette un messaggio "Manca definizione giro ..."; - il ciclo per giro termina al raggiungimento di
tm-a-datao del limite tabella.
5. Generazione COGGRDAY (elabora, coda)¶
Per ogni elemento accumulato in w-tab, scandisce i dettagli COGGRPER del giro/periodo (st-coggrper-notmin + loop sulla chiave giro/mese/settimana/giorno) e, per ciascun destinatario:
- verifica se esiste gia' il record giornaliero (operatore + data + progressivo) in COGGRDAY (
rd-coggrday): se assente lo crea (wr-coggrday); - valorizza sequenza, anagrafica (
grp-ana), destinazione (grp-dst) e ripuliscegrd-fl-canc(record attivo), quindi riscrive (rwr-coggrday).
6. Chiusura (fine / z-chiudi)¶
Chiude i file e la finestra ed esce.
Note tecniche¶
- Configurazione schema giri: la chiave RNEWCONF SCHEMA-GIRI (gruppo
MAGAZZINO) governa completamente il criterio con cui un dettaglio di periodo (COGGRPER) viene associato a una data specifica; i quattro schemi A/B/C/D corrispondono ad altrettante interpretazioni di mese/settimana/giorno documentate nel copybookcoggrper.cpy. - Cancellazione logica (pcase-2468): dalla modifica del 22/01/2019 la pulizia dei giorni non usa piu' la cancellazione fisica (
del-coggrday) ma il flaggrd-fl-canc = "C"; in fase di rigenerazione i record riusati vengono riattivati azzerando il flag. Questo preserva le chiavi/record esistenti. - Chiave secondaria COGGRDAY: la scansione per data richiede
coggrday.k03, inclusa manualmente in coda alla procedure division (le chiavi secondarie non sono generate automaticamente da Screens). - GESDATE: tutto il calcolo di calendario (data risultante, giorno della settimana, settimana del mese e dell'anno) e' delegato alla subroutine GESDATE, non ricalcolato internamente.
- Limite tabella: l'accumulo destinatari e' limitato a 2000 elementi (
w-ele-tab occurs 2000); raggiunto il limite l'esplosione del giro si interrompe.