COGQP0 - Produzione giornaliera alimentari¶
Sorgente: cbl/cogqp0.cbl | Tipo: Programma a menu | Program-ID: COGQP0
Menu: Magazzino > Produzione > Produzione giornaliera alimentari
Scopo¶
Gestisce l'intero ciclo della produzione giornaliera per aziende del settore alimentare. Partendo dai documenti di vendita del giorno, il programma calcola le quantita' da produrre, esplode le distinte base, verifica la disponibilita' di materie prime e semilavorati, crea i movimenti di magazzino, traccia i lotti di produzione e collega i lotti finiti ai DDT di vendita originali.
Il flusso si articola in 6 fasi sequenziali:
| Fase | Nome | Cosa fa |
|---|---|---|
| 1 | Analisi richieste | Carica DDT di vendita del giorno e calcola "Qta da produrre" per articolo |
| 2 | Calcolo fabbisogni | Esplode distinte base, genera fabbisogni Materie Prime / Semilavorati / Prodotti finiti |
| 3 | Analisi disponibilita' | Selezione lotti FIFO per scadenza, gestione merci alternative e merci miste |
| 4 | Movimentazione | Crea DDT di scarico/carico via COGS26 e collegamenti tra lotti |
| 5 | Collegamento DDT vendita | Collega lotti prodotti finiti ai DDT di vendita originali |
| 6 | Chiusura | Produzione completata |
L'avanzamento tra fasi e' guidato da F3; F7 riporta indietro (con conferma e perdita modifiche manuali).
File e Tabelle¶
Principali¶
| File/Tabella | Uso |
|---|---|
| FEURTAB (cogfiles) | Parametri generali azienda |
| COGTESBO | Testate documenti vendita (lettura) |
| COGRIGBO | Righe documenti vendita (lettura) |
| COGDISTB | Distinta base (esplosione fabbisogni) |
| COGMERCI | Anagrafica merci |
| COGMERLT | Lotti merci (giacenze) |
| COGMERLK | Merci collegate (alternative AL, sostitutive) |
| COGMOMAG | Movimenti magazzino |
| CLCPGTES | Testate produzione giornaliera (sessione/data) |
| CLCPGDO | Righe produzione - documenti richiesta |
| CLCPGFA | Righe produzione - fabbisogni esplosi |
| CLCPGTS | Stato fase per sessione |
| CLCPGLGL | Collegamento lotti merci prodotte/utilizzate |
Tabelle temporanee (TRAN)¶
| Tabella | Uso |
|---|---|
| TRAN-S26 (external) | Buffer righe per chiamata COGS26 (creazione DDT) |
cogqp0-d-fab |
File temporaneo dettaglio fabbisogno per griglia |
Programmi chiamati¶
| Programma | Scopo |
|---|---|
| COGS26 | Creazione DDT di magazzino (scarico MP, carico SL, carico PF, carichi automatici TASK-4918) |
| COGV35 | Consultazione movimenti merce |
| COGQP0D1 | Sottofunzione consultazione griglia |
| COGMA3 | Gestione anagrafica merci |
| COGMAK | (commentata) gestione raggruppamenti |
| COGU10 | Conversione unita' di misura |
| COGU11 | Utility u11 |
| GRIDADMN | Gestione griglie video |
| DIALOGS | Dialoghi di scelta F-key (utilizzato per popup "Carichi Automatici") |
| RNEWCONF | Lettura configurazioni |
Copybook principali¶
cogqp0.wrk,cogqp0.select,cogqp0.fd,cogqp0.prc— Screen Designercogqp0.tm— definizionetab-maschera(tm-*)k-u10.cpy,k-personal.cpy,k-tipi-cogtabel.cpy— costantiutildlg.cpy— dialoghiutilncnf.cpy,utilu10.cpy,utils26.cpy— interfacceutilgesdebug.cpy— logging
Configurazioni RNEWCONF¶
| Gruppo | Chiave | Tipo | Note |
|---|---|---|---|
| ORDINI | GESTIONE-DISTINTE-KIT | x | Gestione kit |
| PROGCOGV51 | euta-c041-db-sca | x | Db scarico |
| PROGCOGV51 | euta-c041-db-esc | x | Db esclusioni |
| produzione | cau-ent-prod-interna | n | Causale magazzino "entrata produzione interna" (usata per i carichi semilavorati automatici) |
| produzione | carichi-automatici | x | (TASK-4918) Abilita la generazione automatica dei DDT di carico per articoli "Mancanti" in fase 3. Valori: N (default, disattivato), S (solo Semilavorati), M (solo Materie Prime), T (Tutti) |
| produzione | cau-carichi-no-fat | n | (TASK-4918) Causale di magazzino usata per il carico automatico delle Materie Prime (carichi non fatturati) |
Logica di elaborazione¶
Avvio¶
All'apertura del programma (paragrafo iniziale, intorno alla riga 550) viene letta la configurazione (x99-confi), valorizzato tm-data con la data di sistema e, da TASK-4918 (2026-05-26), invocato cerca-data-ult per determinare la data dell'ultima produzione effettiva (fase >= 6) scorrendo CLCPGTES all'indietro su chiave 2 (data discendente).
Avanzamento fase 3 → 4 (verifica mancanti)¶
In tre punti distinti (paragrafi a-accept-grid-ric, a-accept-grid-fab, a-accept-grid-lot, intorno alle righe 1290, 1660, 2010) viene eseguito x-verifica-mancanti. Se ci sono articoli "Mancanti":
- Se
tm-cfg-carichi-automatici = "N": messaggio bloccante "Presenza di articoli 'Mancanti': impossibile eseguire fase di aggiornamento documenti magazzino" e ritorno alla griglia. - Altrimenti (
S/M/T): si esegue il paragrafocarichi-automatici(TASK-4918, vedi sotto). Se l'utente accetta e l'esito e' positivo, il flusso salta ina-inizio-caricamentoper rieseguire il caricamento delle griglie con le nuove giacenze.
Paragrafo carichi-automatici (TASK-4918, da riga ~2305)¶
Sequenza:
- Dialogo via
DIALOGS("Creazione Carichi Automatici") con due opzioni: - F5 = Creazione Carichi → procede
-
F9 = No Creazione Carichi → ritorno con
w-ok-carichi-autom = "N"(errore bloccante invariato) -
Creazione carichi Semilavorati (paragrafo
carico-semi-lavorati), solo setm-cfg-carichi-automatici = "S"o"T": - Scan di
t-grid-fabfiltrando pert-gor-k-tipo = "S"et-gor-k-prod-manc = "M" - Per ogni riga: scrittura su TRAN-S26 con
trs-s26-segno = "E", lotto =tm-datasemer-lotti = "S", quantita' =qta-uti - qta-esist - Ogni 500 righe scarica con
crea-car-s26(chiamata a COGS26) -
Causale:
tm-cfg-cau-ent-prod-interna -
Creazione carichi Materie Prime (paragrafo
carico-materie-prime), solo setm-cfg-carichi-automatici = "M"o"T": - Stessa logica ma filtro su
t-gor-k-tipo = "M" -
Causale:
tm-cfg-cau-carichi-no-fat -
Paragrafo
crea-car-s26(chiamata a COGS26): s26-ope = "Inserimento",s26-doc-tipo = "C"(carico),s26-fl-link = "N",s26-fl-gia = "S",s26-ana-tip = "F",s26-ana-nonno = az-for-int(fornitore interno)s26-prog-caller = "COGQP0"— segnala a COGS26 che la chiamata viene da qui (vedi COGS26 - storico modifiche): provoca l'uso dimag-da2(data DDT) invece didatasiscome data lotto.- Al ritorno:
s26-prog-callerriportato a spaces e numero documento creato loggato viagesdebug-write.
Nota implementativa: il codice contiene blocchi commentati
carico-sl-15-loop/carico-mp-15-loopche gestivano la sostituzione con merci alternative (COGMERLK tipoAL). E' stato deciso di caricare la merce originale del fabbisogno, non l'alternativa, perche' il carico automatico deve reintegrare l'articolo richiesto in distinta base.
Paragrafo cerca-data-ult (TASK-4918, riga ~8670)¶
Scan all'indietro di CLCPGTES su chiave 2 (date) partendo da 99999999, leggendo solo record con pgts-fase >= 6 (produzione completata). Aggiorna tm-data-ult con la data dell'ultima sessione chiusa. Utilizzato per validazioni e display.
Creazione movimenti standard (fase 4)¶
Paragrafo f422-scarico-sl-e-pf e successivi: chiama COGS26 per generare in sequenza i 4 documenti (scarico MP, carico SL, scarico SL utilizzati, carico PF). Per i collegamenti tra lotti, paragrafo dedicato in fase 4.4.3.1 (inserimento su CLCPGLGL).
Vincoli e Note¶
- PERFORM THRU e
GO TOsono presenti diffusamente per ragioni storiche; intervenire con cautela. - Il programma usa
MMMASK.cpy(standalone). - Il flusso "carichi automatici" e' opt-in tramite configurazione: per default e' disattivato (
N) e il comportamento bloccante storico e' preservato. - I 500 righe per chiamata COGS26 sono un limite hard-coded per non saturare TRAN-S26.
Storico modifiche¶
TASK-4918 (2026-05-26) - Carichi automatici per articoli "Mancanti"¶
Introdotta gestione automatica della creazione DDT di carico per articoli risultati mancanti in fase 3 di verifica disponibilita'. Configurabile via chiavi RNEWCONF produzione/carichi-automatici (modalita') e produzione/cau-carichi-no-fat (causale MP). Aggiunto paragrafo cerca-data-ult per recupero data ultima produzione effettiva. Vedi dettagli sopra.
Documentazione creata automaticamente dal processo di auto-documentazione (2026-05-27)