Vai al contenuto

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 Designer
  • cogqp0.tm — definizione tab-maschera (tm-*)
  • k-u10.cpy, k-personal.cpy, k-tipi-cogtabel.cpy — costanti
  • utildlg.cpy — dialoghi
  • utilncnf.cpy, utilu10.cpy, utils26.cpy — interfacce
  • utilgesdebug.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 paragrafo carichi-automatici (TASK-4918, vedi sotto). Se l'utente accetta e l'esito e' positivo, il flusso salta in a-inizio-caricamento per rieseguire il caricamento delle griglie con le nuove giacenze.

Paragrafo carichi-automatici (TASK-4918, da riga ~2305)

Sequenza:

  1. Dialogo via DIALOGS ("Creazione Carichi Automatici") con due opzioni:
  2. F5 = Creazione Carichi → procede
  3. F9 = No Creazione Carichi → ritorno con w-ok-carichi-autom = "N" (errore bloccante invariato)

  4. Creazione carichi Semilavorati (paragrafo carico-semi-lavorati), solo se tm-cfg-carichi-automatici = "S" o "T":

  5. Scan di t-grid-fab filtrando per t-gor-k-tipo = "S" e t-gor-k-prod-manc = "M"
  6. Per ogni riga: scrittura su TRAN-S26 con trs-s26-segno = "E", lotto = tm-data se mer-lotti = "S", quantita' = qta-uti - qta-esist
  7. Ogni 500 righe scarica con crea-car-s26 (chiamata a COGS26)
  8. Causale: tm-cfg-cau-ent-prod-interna

  9. Creazione carichi Materie Prime (paragrafo carico-materie-prime), solo se tm-cfg-carichi-automatici = "M" o "T":

  10. Stessa logica ma filtro su t-gor-k-tipo = "M"
  11. Causale: tm-cfg-cau-carichi-no-fat

  12. Paragrafo crea-car-s26 (chiamata a COGS26):

  13. 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)
  14. s26-prog-caller = "COGQP0" — segnala a COGS26 che la chiamata viene da qui (vedi COGS26 - storico modifiche): provoca l'uso di mag-da2 (data DDT) invece di datasis come data lotto.
  15. Al ritorno: s26-prog-caller riportato a spaces e numero documento creato loggato via gesdebug-write.

Nota implementativa: il codice contiene blocchi commentati carico-sl-15-loop / carico-mp-15-loop che gestivano la sostituzione con merci alternative (COGMERLK tipo AL). 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 TO sono 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)