Vai al contenuto

Piano: Evasione ordini da locazione di magazzino (COGF64)

Contesto

COGF64 puo' gia' evadere ordini con il contenuto di un DDT di carico (modalita' COMPLETA-CARICO). Si vuole aggiungere la possibilita' di evadere ordini usando il contenuto di una locazione di magazzino: l'operatore indica la locazione, il programma recupera le giacenze da WMS tramite WMSW01, filtra gli ordini per le merci presenti, e crea BdP in modo diretto (modo C) senza raccordo documento.


File da modificare

File Tipo modifica
cbl/cogf64.cbl Nuovo filtro, nuova routine, adeguamento condizioni
cbl/wmsw01.cbl Nuova operazione esporta-giacenze-loc
cpy/utilwmsw01.cpy Nuovo campo input wmsw01-i-locazione
cpy/tran-wmsw01-loc.cpy Nuovo - record transito giacenze locazione
cpy/tran-wmsw01-loc.fd Nuovo - FD file transito
cpy/tran-wmsw01-loc.k01 Nuovo - routine I/O

Tutte le modifiche ai .cbl via sed per preservare encoding ISO-8859-1.


1. Nuovo file transito: tran-wmsw01-loc

Record per passare giacenze locazione da WMSW01 a COGF64:

01 trs-wloc-rec.
   02 trs-wloc-chia1.
      03 trs-wloc-rig        pic 9(04).
   02 trs-wloc-merce.
      03 trs-wloc-gru        pic x(02).
      03 trs-wloc-sot        pic x(02).
      03 trs-wloc-cod        pic 9(05).
   02 trs-wloc-qta           pic s9(07)v999.
   02 trs-wloc-mag           pic x(01).
   02 filler                  pic x(20).
  • trs-wloc-rig: progressivo riga (chiave primaria)
  • trs-wloc-merce: codice merce (gru+sot+cod)
  • trs-wloc-qta: giacenza disponibile (gloc-giacenza - gloc-qta-in-uscita)
  • trs-wloc-mag: codice magazzino Eurocoge derivato da gloc-mag-cod

FD: file sequenziale indicizzato su trs-wloc-chia1, dichiarato EXTERNAL per condivisione tra COGF64 e WMSW01.


2. Modifica utilwmsw01.cpy

Aggiungere campo input per locazione:

* Dopo wmsw01-i-mag-inventario:
   03 wmsw01-i-locazione      pic x(20).

3. Nuova operazione in WMSW01: esporta-giacenze-loc

3a. Evaluate block (riga ~419)

Aggiungere:

if w-dc-operazione = "esporta-giacenze-loc"
   perform s1-esporta-giacenze-loc thru ex-s1
   go to fine
end-if

3b. Paragrafo s1-esporta-giacenze-loc

Logica: 1. Aprire e svuotare il file transito tran-wmsw01-loc 2. Ricevere la locazione da wmsw01-i-locazione 3. Query SQL su dfgiacenzeloc: sql SELECT * FROM dfgiacenzeloc WHERE gloc_locazione = $1 AND gloc_fl_canc = $2 AND gloc_giacenza > 0 ORDER BY gloc_merce ASC 4. Per ogni record: scrivere riga nel transito con: - trs-wloc-merce = gloc-merce - trs-wloc-qta = gloc-giacenza - gloc-qta-in-uscita - trs-wloc-mag = gloc-mag-cod(1:1) (primo char = codice magazzino Eurocoge) 5. Chiudere il transito 6. Impostare wmsw01-o-esito ("S" ok, "N" errore, "V" locazione vuota)

Pattern da seguire: operazione inventario (righe 1005-1081), stesso approccio SQL con sql-precall, sql-setp-*, cursore-sql-st-dfgiacenzeloc.


4. Modifiche in COGF64

4a. WORKING-STORAGE: nuove variabili

* Flag modalita' locazione
01 w-evadi-da-locazione        pic x(01).

* In tab-maschera (dopo tm-canale-sped-d, riga ~433):
   03 tm-filtro-locazione      pic x(20).

4b. FILE SECTION

Aggiungere:

copy "tran-wmsw01-loc.fd".

4c. Filtro locazione nella maschera

Aggiungere campo nella schermata filtri (screen cogf64-01.scr): label + entry-field per tm-filtro-locazione, 20 caratteri.

Aggiungere accept section a-tm-filtro-locazione nel flusso filtri (dopo a-tm-filtro-add, prima di a-fine-dati): - Accept standard con F2=indietro, F3=conferma - Se compilato: move "S" to w-evadi-da-locazione - Se vuoto: move "N" to w-evadi-da-locazione

4d. Nuova routine: a2-leggi-locazione

Analogo a a2-leggi-carico (righe 2681-2740) ma legge dal transito WMSW01:

a2-leggi-locazione:
  1. Chiamare WMSW01 con operazione "esporta-giacenze-loc"
     - wmsw01-i-operazione = "esporta-giacenze-loc"
     - wmsw01-i-locazione = tm-filtro-locazione
  2. Verificare esito (wmsw01-o-esito)
     - "V" (vuoto): messaggio "Locazione vuota", tornare ai filtri
     - "N" (errore): messaggio errore
  3. Aprire tran-wmsw01-loc in input
  4. Per ogni record nel transito:
     - Popolare tab-dm:
       a2-t-dm-merce = trs-wloc-merce
       a2-t-dm-qta = trs-wloc-qta
       a2-t-dm-merce-accan = trs-wloc-merce
       a2-t-dm-qta-comp = 0
     - Chiamare a2-aggiungi-t-dm-ele (riusa routine esistente, riga 2743)
  5. Chiudere il transito
  6. Salvare il magazzino dalla prima riga: trs-wloc-mag → w-loc-mag

NON eseguire: cerca-bdp-collegati / tolgo-bdp-collegati (non c'e' documento sorgente). NON eseguire: a2-cerca-distinte-base (non e' un versamento componenti).

4e. Modifica z-grid-det-crea-transito (riga 6545)

Attuale:

if w-dc-called = "S" and
  (w-dc-operazione = k-ope-completa-carico or
   w-dc-operazione = k-ope-accantona-vers    )
   perform a2-leggi-carico
end-if

Nuovo:

if w-dc-called = "S" and
  (w-dc-operazione = k-ope-completa-carico or
   w-dc-operazione = k-ope-accantona-vers    )
   perform a2-leggi-carico
end-if
if w-evadi-da-locazione = "S"
   perform a2-leggi-locazione
end-if

4f. Modifica filtro merci in b13-consegne (riga ~6939)

Condizione attuale che filtra consegne per merci presenti in tab-dm:

if w-dc-called = "S" ...

Aggiungere:

if (w-dc-called = "S" ...) or
   w-evadi-da-locazione = "S"

Questo assicura che in modalita' locazione la griglia mostri solo le merci presenti nella locazione.

4g. Modifica c-controlli-bdp-diretti (riga 7026)

Attuale:

if w-dc-operazione = k-ope-completa-carico or
   w-dc-operazione = k-ope-accantona-vers
   perform c-controlli-bdp-da-carico
else
   perform c-controlli-bdp-diretti-standard
end-if

Nuovo:

if w-dc-operazione = k-ope-completa-carico or
   w-dc-operazione = k-ope-accantona-vers or
   w-evadi-da-locazione = "S"
   perform c-controlli-bdp-da-carico
else
   perform c-controlli-bdp-diretti-standard
end-if

Cosi' anche in modalita' locazione si valida che la qta evasa non superi la qta disponibile in locazione (tab-dm).

4h. Raccordo COGGENER(EB) - nessuna modifica necessaria

La scrittura del raccordo (riga 7809) e' condizionata a:

if w-dc-called = "S" and (w-dc-operazione = ...)

In modalita' locazione w-dc-called non e' "S" (modalita' standalone), quindi il raccordo non viene creato. Nessuna modifica necessaria.

4i. Location management (c6/c9) - nessuna modifica necessaria

Le chiamate a WMSW01 per aggiornamento locazioni (righe 7510-7522) sono condizionate a w-dc-called = "S". Non scattano in modalita' standalone.

Nota: valutare se in futuro serve aggiornare le giacenze locazione (gloc-qta-in-uscita) quando si creano BdP da locazione. Per ora non richiesto.


5. Flusso risultante

Filtri:
  ... filtri normali ...
  a-tm-filtro-locazione → se compilato: w-evadi-da-locazione = "S"
  ↓
a-fine-dati
  ↓
z-grid-det-crea-transito
  ├── (se COMPLETA-CARICO) → a2-leggi-carico
  ├── (se locazione)       → a2-leggi-locazione
  │     ├── CALL WMSW01 "esporta-giacenze-loc"
  │     └── leggi transito → tab-dm
  ├── b1-write-tran (filtra ordini per merci in tab-dm)
  └── b-calcola-qta-dsp (cascata disponibilita')
  ↓
a-grid (interazione)
  ├── F1 → c-controlli-bdp-diretti (valida vs tab-dm)
  │      → c-creazione-bdp-diretta
  │           ├── c-crea-bdp (COGSA0 CREA-BDP-SINGOLO)
  │           │     └── NO raccordo COGGENER(EB)
  │           └── c-stampa-bdp-creati
  └── ... altri F-key invariati

6. Riepilogo modifiche

# Cosa File Tipo
1 Nuovo transit file tran-wmsw01-loc cpy/ (3 file nuovi) Creazione
2 Campo wmsw01-i-locazione cpy/utilwmsw01.cpy Aggiunta campo
3 Operazione esporta-giacenze-loc cbl/wmsw01.cbl Nuovo paragrafo
4 Variabile w-evadi-da-locazione cbl/cogf64.cbl WS Aggiunta
5 Campo tm-filtro-locazione cbl/cogf64.cbl WS + screen Aggiunta
6 Accept a-tm-filtro-locazione cbl/cogf64.cbl Nuovo paragrafo
7 Routine a2-leggi-locazione cbl/cogf64.cbl Nuovo paragrafo
8 Condizione in z-grid-det-crea-transito cbl/cogf64.cbl riga ~6545 Aggiunta IF
9 Condizione in b13-consegne cbl/cogf64.cbl riga ~6939 OR aggiuntivo
10 Condizione in c-controlli-bdp-diretti cbl/cogf64.cbl riga ~7026 OR aggiuntivo

7. Verifica

  1. Locazione con 3 merci, ordini corrispondenti: la griglia mostra solo le righe ordine per quelle merci, con qta-dm = giacenza locazione
  2. Locazione vuota: messaggio "Locazione vuota", ritorno ai filtri
  3. Qta evasa > qta locazione: c-controlli-bdp-da-carico blocca con errore
  4. BdP creati: COGSA0 CREA-BDP-SINGOLO, nessun record COGGENER(EB) generato
  5. Filtri combinati: locazione + cliente → solo ordini di quel cliente con merci nella locazione
  6. Locazione non compilata: programma funziona normalmente (w-evadi-da-locazione = "N")
  7. Encoding: LC_ALL=C grep -Pc '\xef\xbf\xbd' cogf64.cbl = 0

8. Punti aperti da verificare in implementazione

  • Mapping magazzino: gloc-mag-cod(1:1) corrisponde al codice magazzino Eurocoge? Verificare con dati reali
  • Qta disponibile: usare gloc-giacenza - gloc-qta-in-uscita o solo gloc-giacenza?
  • Aggiornamento locazione: dopo creazione BdP, serve aggiornare gloc-qta-in-uscita?