COGM94C - Creazione Lotti¶
Descrizione¶
Maschera/worker per la creazione di lotti di produzione/merce. Non e' a menu utente diretto (non presente in prog.txt): viene invocato come sotto-programma dalla catena di gestione lotti, ricevendo in linkage l'area util-m94c (copybook utilm94c.cpy) con l'operazione richiesta, la merce, il magazzino, l'eventuale lotto gia' noto e i flag di gestione.
Il programma presenta all'operatore la schermata "Gestione lotti merce" e gestisce l'immissione e i controlli dei campi del lotto: numero lotto produzione (tm-n-lot-prod), produttore (effettivo o provvisorio), descrizione produttore, data di produzione e data di scadenza, ed eventualmente cella (tm-loc) e volata (tm-num-rac) per le personalizzazioni funghi (k-personal-modena-funghi, k-personal-az-malavasi-funghi). Al termine della conferma (F3) scrive/riscrive il record lotto su COGMERLT (paragrafo salva-rec, verbi wr-cogmerlt/rwr-cogmerlt) e restituisce al chiamante i dati valorizzati in util-m94c.
Il numero di lotto puo' essere digitato dall'operatore oppure, se lasciato vuoto, assegnato automaticamente dal programma (vedi paragrafi a1-assegna-lotto e, per Artic Seals, a2-assegna-lotto).
Storico modifiche¶
2026-07-27 - TASK-5723: assegnazione automatica del numero lotto per Artic Seals¶
Modifica tracciata nel sorgente dal marcatore 270726.
Nel controllo del campo N.lotto prod. (x-controlla-tm-n-lot-prod), quando l'operatore lascia il campo vuoto (tm-n-lot-prod = spaces), il programma continua ad assegnare automaticamente un numero di lotto. E' stato pero' introdotto uno sdoppiamento in base all'azienda:
- se
az-personal = k-personal-artic-seals(codice"HT", dak-personal.cpy) viene eseguito il nuovo paragrafoa2-assegna-lotto. Se dopo l'esecuzione il numero lotto risulta ancora vuoto (l'operatore ha rifiutato la conferma, vedi sotto), il controllo blocca il campo con il messaggio "Indicare Il lotto fornitore !" (x-f3-ok-parziale = "N",exit paragraph): per Artic Seals il lotto diventa quindi obbligatorio se non lo si fa assegnare automaticamente; - altrimenti viene eseguito il preesistente
a1-assegna-lotto.
if tm-n-lot-prod = spaces
if az-personal = k-personal-artic-seals
perform a2-assegna-lotto thru ex-a2
if tm-n-lot-prod = spaces
move "Indicare Il lotto fornitore !" to x-f3-msg
move "N" to x-f3-ok-parziale
exit paragraph
end-if
else
perform a1-assegna-lotto thru ex-a1
end-if
display e-tm-n-lot-prod
end-if
Differenza tra i due algoritmi:
-
a1-assegna-lotto(standard, storico) compone il lotto a partire dal codice merce (gruppo + sotto + codice senza spazi ne' zeri inutili), aggiunge un trattino di separazione e in coda un progressivo interno ricavato dall'ultimomlt-progpresente su COGMERLT per quella merce (letto in reverse viast-cogmerlt-min-chia7/rdprv-cogmerlt, incrementato di 1). -
a2-assegna-lotto(nuovo, solo Artic Seals) attribuisce invece un numero progressivo tramite il numeratore centralizzato COGS25. Il paragrafo: - chiede all'operatore la conferma con il messaggio "Confermi assegnazione numero lotto da numerazione commessa di lavorazione?" (
acc-conf-custom); se l'operatore non conferma (not f3) esce subito (go to a2-999) senza assegnare alcun lotto, lasciandotm-n-lot-proda spazi (il chiamante rendera' allora obbligatorio l'inserimento manuale del lotto); - inizializza
util-s25e imposta magazzino a spazio (s25-i-mag = spaces), anno dalla data di sistema (s25-i-aa = sis-aa) e codice numeratore 13 (s25-i-cod = 13); - chiama
call "COGS25" using stringhe util-s25e recupera il numero assegnato das25-o-numinp13b-lot-num; - compone il lotto nel formato anno/numero valorizzando la struttura
e-lotto(e-lot-anno = sis-aa,e-lot-fil-1 = "/",e-lot-numero = p13b-lot-num); - assegna
e-lottoatm-n-lot-prod.
a2-assegna-lotto.
move spaces to wb-msg
string "Confermi assegnazione numero lotto da "
"numerazione commessa di lavorazione?"
delimited by size into wb-msg
perform acc-conf-custom
if not f3
go to a2-999
end-if
.
initialize util-s25
move spaces to s25-i-mag
move sis-aa to s25-i-aa
move 13 to s25-i-cod
call "COGS25" using stringhe util-s25
move s25-o-num to p13b-lot-num
initialize e-lotto
move sis-aa to e-lot-anno
move p13b-lot-num to e-lot-numero
move "/" to e-lot-fil-1
move e-lotto to tm-n-lot-prod
.
a2-999.
ex-a2. exit.
Effetto: per Artic Seals il lotto di produzione lasciato vuoto assume automaticamente la forma <anno>/<numero> (es. 2026/00000123), con numerazione univoca e progressiva gestita dal numeratore 13 di COGS25 anziche' dal progressivo interno derivato dal codice merce. L'assegnazione automatica e' pero' subordinata a una conferma esplicita dell'operatore: se la rifiuta, il lotto resta vuoto e diventa un dato obbligatorio da digitare a mano (messaggio "Indicare Il lotto fornitore !").
A corredo sono state aggiunte:
- la copybook
utils25.cpy(interfaccia del numeratore COGS25); - le variabili di working
p13b-lot-num(pic 9(08)) e la strutturae-lotto(e-lot-anno+e-lot-fil-1separatore "/" +e-lot-numero).
2022-11-08 - PBUG-1445: divieto di lotti con progressivo zero¶
Modifica tracciata nel sorgente dal marcatore 081122. In salva-rec, se il progressivo lotto risulta mlt-prog = zero, viene forzato a 1000 (su tm-prog, mlt-prog, m94c-prog), coerentemente con la regola gia' presente che fa partire i progressivi da 1000 per non entrare in conflitto con il codice operatore.
Tabelle utilizzate¶
| Tabella | Accesso | Descrizione |
|---|---|---|
| FEURTAB | Lettura | Tabella euristica parametri (aperta tramite feurtab.fd / cogfiles.cpy) |
| COGMERLT | Lettura/Scrittura | Lotti merce. Lettura per controllo esistenza lotto (st-cogmerlt-notmin-chia2, rdnxt-cogmerlt, rdprv-cogmerlt, rd-cogmerlt) e per il calcolo del progressivo interno; scrittura/riscrittura del record lotto in salva-rec (wr-cogmerlt / rwr-cogmerlt). Usate le chiavi secondarie .k02 e .k07 |
| COGMAGAZ | Lettura | Anagrafica magazzini (rd-cogmagaz), per la descrizione del magazzino (magz-nome) |
| COGGEANA | Lettura | Anagrafica generica clienti/fornitori (rd-coggeana), per la descrizione del produttore (ana-nome) in base al tipo w-prd-ana-tip |
Copybook¶
| Copybook | Ruolo |
|---|---|
feurtab.fd, cogfiles.cpy |
FD e definizione file tabella euristica |
cogm94c.select, cogm94c.fd, cogm94c.wrk, cogm94c.decla, cogm94c.prc |
File gestiti da Screens (select, FD, working, declaratives, procedure) del programma |
cogm94c-01.scr |
Screen section della maschera |
k-personal.cpy |
Costanti di personalizzazione azienda (k-personal-artic-seals = "HT", k-personal-sanitel, k-personal-modena-funghi, k-personal-az-malavasi-funghi) |
k-u10.cpy |
Costanti gestione controllo U10 |
utils25.cpy |
Interfaccia numeratore COGS25 (util-s25: s25-i-mag, s25-i-aa, s25-i-cod, s25-o-num, ...) - aggiunta con TASK-5723 |
utils52.cpy |
Interfaccia COGS52W (gestione date con calendario F8) |
utils65.cpy |
Interfaccia COGS65W (ricerca/gestione anagrafica produttore) |
utils68.cpy |
Interfaccia COGS68 (gestione lista/selezione) |
utilu10.cpy |
Interfaccia COGU10W (gestione controlli generici della maschera) |
wgrave.cpy, wnscr.cpy, wopenf.cpy, wstato.cpy |
Working-storage standard (gestione errori, video, apertura file, stato verbi) |
cogazien.cpy |
Dati azienda (az-personal, az-lotti, ...) |
wcont.cpy, wcont1.cpy |
Aree di contesto in linkage (stringhe) |
utilm94c.cpy |
Area di scambio in linkage con il chiamante (util-m94c) |
grave.cpy, mmmask.cpy, opengen.cpy, stato.cpy, stato1.cpy, winmsg.cpy |
Copybook di procedure standard (routine di errore, maschera, apertura, stato, messaggi) |
getdcont.cpy |
Routine di gestione contesto |
cogmerlt.k02, cogmerlt.k07 |
Copybook chiavi secondarie COGMERLT (aggiunte manualmente: Screens genera solo la .k01) |
Programmi chiamati¶
| Programma | Interfaccia | Scopo |
|---|---|---|
| COGS25 | utils25.cpy (util-s25) |
Numeratore centralizzato. Chiamato da a2-assegna-lotto con codice numeratore 13, anno di sistema e magazzino spazio per ottenere il progressivo del lotto Artic Seals (s25-o-num). Introdotto con TASK-5723 |
| COGS52W | utils52.cpy (util-s52) |
Gestione campi data (data produzione / data scadenza) con calendario F8 |
| COGS65W | utils65.cpy (util-s65) |
Gestione/ricerca anagrafica produttore |
| COGS68 | utils68.cpy (util-s68) |
Gestione lista/selezione (preparazione controllo tm-merce) |
| COGU10W | utilu10.cpy (util-u10) |
Gestione controlli generici della maschera |
Note¶
- Il programma segue il pattern Screens standard:
apri(init), sequenza di paragrafia-tm-*per l'accept dei singoli campi con navigazione F2 (indietro) / F3 (conferma) / mouse (x-test-mouse), paragrafix-controlla-tm-*per i controlli campo, esalva-recper il salvataggio finale. az-personal(dacogazien.cpy) pilota diverse varianti di comportamento: assegnazione automatica lotto (Artic Seals), segnalazione lotto fornitore gia' esistente (Artic Seals e Sanitel), visualizzazione di cella e volata (personalizzazioni funghi).- Il tipo anagrafica produttore
w-prd-ana-tipvale"C"seaz-personal = "MC", altrimenti"F". - Per i lotti "generali" inseriti direttamente sulla merce, il programma tollera record COGMERLT con magazzino vuoto e non ricopia i dati produttore/date se
az-lotti = "S"(gestione lotti semplificati).