Vai al contenuto

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", da k-personal.cpy) viene eseguito il nuovo paragrafo a2-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'ultimo mlt-prog presente su COGMERLT per quella merce (letto in reverse via st-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, lasciando tm-n-lot-prod a spazi (il chiamante rendera' allora obbligatorio l'inserimento manuale del lotto);
  • inizializza util-s25 e 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-s25 e recupera il numero assegnato da s25-o-num in p13b-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-lotto a tm-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 struttura e-lotto (e-lot-anno + e-lot-fil-1 separatore "/" + 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 paragrafi a-tm-* per l'accept dei singoli campi con navigazione F2 (indietro) / F3 (conferma) / mouse (x-test-mouse), paragrafi x-controlla-tm-* per i controlli campo, e salva-rec per il salvataggio finale.
  • az-personal (da cogazien.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-tip vale "C" se az-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).