Vai al contenuto

DFNM02 -- Subroutine accesso DB Frontiera Modula

Sorgente: cbl/dfnm02.cbl | Tipo: Subroutine (CALL) | Program-ID: DFNM02


Scopo

DFNM02 e' la subroutine di servizio per l'accesso al database di frontiera Modula (PostgreSQL esterno). Espone diverse operazioni sui dati Modula (tabelle exp_* e imp_*) a beneficio dei programmi gestionali che integrano i magazzini automatizzati.

Interfaccia: linkage util-dfnm02 (copybook utildfnm02.cpy).


Interfaccia (util-dfnm02)

Input

Campo Tipo Uso
dfnm02-caller x(08) Program-ID del chiamante
dfnm02-called x(08) Sempre "DFNM02"
dfnm02-i-operazione x(25) Operazione richiesta (vedi sotto)
dfnm02-i-mag x(01) Magazzino Modula
dfnm02-i-data 9(08) Data riferimento (giacenze, FEFO)
dfnm02-i-lotti-aperti x(01) Filtro lotti aperti (S/N)
dfnm02-i-merce x(09) Codice merce (gru+sot+cod)

Output (operazione "lotti-disp-prelievo")

Campo Tipo Uso
dfnm02-o-ld-count 9(04) Numero lotti restituiti
dfnm02-o-ld-prog (n) 9(06) Progressivo lotto interno Area (mlt-prog)
dfnm02-o-ld-lotto (n) x(15) Codice lotto esterno
dfnm02-o-ld-qta (n) s9(07)v999 Quantita' disponibile sul lotto
dfnm02-o-ld-scad (n) 9(08) Data scadenza

Vettore con OCCURS 200 (k-max-ld = 200).


Operazioni

Operazione Descrizione
agg-qta-scomparto Aggiorna quantita' per scomparto su COGSLOSCO leggendo exp_ubicazioni
lotti-disp-prelievo (nuova 2026-06-04) Restituisce i lotti realmente disponibili al prelievo a Modula per la merce, ordinati per scadenza (FEFO)

Operazione lotti-disp-prelievo (TASK-2318)

Per la merce indicata, scorre exp_ubicazioni (tabella Modula con i lotti presenti per scomparto) filtrando solo i record con ubi_tipo_scomparto in {FITT, MODUL}. Aggrega le quantita' per ubi_lotto (rottura su ubi_lotto durante la scan ordinata per lotto).

Per ciascun lotto aggregato:

  1. Cerca su COGRACMC chiave 2 il codice merce avanzato corrispondente al codice merce di input.
  2. Cerca su COGMERLT (chiave 2: lotto + merce + magazzino) il record Area corrispondente al lotto Modula, recuperando mlt-prog (progressivo interno) e mlt-data-scad.
  3. Se il lotto Modula non e' mappato in Area, segnala il problema su debug (gesdebug-write) e salta.
  4. Accoda il lotto al vettore dfnm02-o-ld-*.

Al termine, applica un bubble-sort sul vettore per dfnm02-o-ld-scad crescente (FEFO -- First Expired First Out).

Limite massimo: 200 lotti per chiamata.


File e tabelle

File Tipo Uso
COGRACMC ISAM (chiave 2) Codice merce avanzato
COGMERLT ISAM (chiave 2) Mappatura lotto Area ↔ lotto Modula
exp_ubicazioni PostgreSQL (DB Frontiera Modula) Giacenze fisiche per scomparto/lotto
imp_* / exp_* PostgreSQL Altre tabelle frontiera

Chiamanti noti

Programma Operazione Contesto
COGDB6 agg-qta-scomparto Aggiornamento qta scomparto su menu o called
COGF64 lotti-disp-prelievo Creazione BDP con lotti Modula (TASK-2318, flusso disponibilita' Modula)

Storico modifiche

Build Descrizione
2026/0604 Aggiunta operazione lotti-disp-prelievo: estrae lotti effettivamente disponibili a Modula (giacenza fisica > 0), mappa al lotto Area e ordina per scadenza (FEFO). Output su nuovo vettore dfnm02-o-ld-* (max 200). Nuove variabili k-max-ld, c1-i/j/k, w-mlt-scad, w-ld-swap.