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 dagloc-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¶
- Locazione con 3 merci, ordini corrispondenti: la griglia mostra solo le righe ordine per quelle merci, con qta-dm = giacenza locazione
- Locazione vuota: messaggio "Locazione vuota", ritorno ai filtri
- Qta evasa > qta locazione: c-controlli-bdp-da-carico blocca con errore
- BdP creati: COGSA0 CREA-BDP-SINGOLO, nessun record COGGENER(EB) generato
- Filtri combinati: locazione + cliente → solo ordini di quel cliente con merci nella locazione
- Locazione non compilata: programma funziona normalmente (w-evadi-da-locazione = "N")
- 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-uscitao sologloc-giacenza? - Aggiornamento locazione: dopo creazione BdP, serve aggiornare
gloc-qta-in-uscita?