Vai al contenuto

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-giri cerca 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-tab accumula in w-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-data o 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 ripulisce grd-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 copybook coggrper.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 flag grd-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.