Vai al contenuto

WMS Locazioni

Panoramica

Il modulo WMS Locazioni estende le funzionalita' di magazzino dell'ERP Area con una APP mobile per la gestione fisica delle ubicazioni. L'obiettivo e' tracciare ogni spostamento di merce tra locazioni (arrivo, stock, spedizione) in modo sincronizzato tra gestionale e APP.

L'ERP e' sviluppato in AcuCOBOL-GT su archivi ISAM Vision; l'APP e' sviluppata con Framework-7 e JavaScript. Le due basi dati comunicano tramite un DB di frontiera PostgreSQL (tabelle DF*).


Architettura generale

ERP Area (ISAM Vision)
    |
    | export/import (demone sync + programmi DFN*)
    v
DB Frontiera PostgreSQL (tabelle DF*)
    |
    | accesso diretto online
    v
APP WMS (Framework-7 / JS)

Le tabelle del DB frontiera si dividono in due categorie:

  • Tabelle sincronizzate: scritte dall'ERP ed esportate sul frontiera (anagrafiche, documenti)
  • Tabelle condivise: scritte sia da ERP che da APP, nessuna sincronizzazione aggiuntiva necessaria (locazioni, giacenze per locazione, movimenti per locazione)

Mapping tabelle ERP / DB frontiera

Tabella ERP (Vision) Tabella DB frontiera Contenuto
COGGEANA DFANAGR Anagrafiche clienti/fornitori
COGMERCI DFMERCIPREST Anagrafica articoli (con descrizione estesa e tabelle CMA)
COGMAGAZ Magazzini (non sincronizzato)
COGSLMAG Giacenze di magazzino contabili (non sincronizzato)

Documenti di magazzino e ordini

Tabella ERP (Vision) Tabella DB frontiera Classe df_dtes_classe Contenuto
COGTESBO (testata) DFDOCTES DM Documento di carico/movimento magazzino
COGMOMAG (dettaglio) DFDOCDET Righe documento di magazzino
COGTESOR (testata) DFDOCTES OV Ordine di vendita
COGRIGOR (dettaglio) DFDOCDET Righe ordine di vendita
DFDOCTES COV Consegna ordine di vendita
COGTESBP (testata) DFDOCTES BDP / BDPP Buono di prelievo (definitivo / provvisorio)
COGRIGBP (dettaglio) DFDOCDET + DFDOCRAC Righe BDP; DFDOCRAC raccorda BDP con l'ordine evaso

Tabelle esclusive del DB frontiera (gestione fisica locazioni)

Tabella Gestore Contenuto
DFLOCAZIONI YFLOCAZI Anagrafica ubicazioni/locazioni
DFGIACENZELOC YFGIALOC Giacenze per articolo/locazione
DFMOVIMENTILOC YFMOVLOC Log movimenti per locazione
DFTABLOCAZIONI YFTABLOC Tabelle dei valori di posizione (stanza, corsia, posto, piano, cella)
DFDOCRAC Raccordo tra documenti (BDP-ordine, BDP-consegna, INV-inventario)

Struttura tabelle chiave (PostgreSQL)

DFLOCAZIONI — anagrafica locazioni

Chiave primaria: (loc_mag_tip, loc_mag_cod, loc_locazione) — char(20)

Campo Formato Note
loc_mag_tip char(1) Tipo magazzino: I=interno, V=viaggiante
loc_mag_cod char(5) Codice magazzino
loc_locazione char(20) Codice locazione (concatenazione dei 5 elementi)
loc_stanza/corsia/posto/piano/cella char(2) ciascuno Posizioni componenti
loc_classe char(1) A=Arrivo, M=Magazzino/Stock, P=Partenza/Spedizione
loc_priorita char(1) Priorita' di picking (0=picking, 1=stock, ...)
loc_monoprodotto char(1) S/N: la locazione accetta un solo codice merce
loc_ana char(6) Chiave cliente/fornitore associato alla locazione
loc_capacita num(13,3) Capacita' in dm3
loc_fl_canc char(1) C = cancellato logicamente

DFGIACENZELOC — giacenze per locazione

Chiave primaria: (gloc_mag_tip, gloc_mag_cod, gloc_classe, gloc_locazione, gloc_merce)

Campo Formato Note
gloc_merce char(9) Codice merce
gloc_giacenza num(13,3) Quantita' fisica presente
gloc_prenotato num(13,3) Quantita' prenotata durante evasione ordine in corso
gloc_qta_in_uscita num(13,3) Quantita' in prelievo da operatore (BDP non ancora confermato)
gloc_data_arrivo date Data primo versamento sulla locazione (da giacenza = 0)
gloc_data_check date Data ultimo controllo inventario fisico sulla locazione

DFMOVIMENTILOC — movimenti per locazione

Chiave primaria: (mloc_mag_tip, mloc_mag_cod, mloc_classe, mloc_locazione, mloc_prog)

Campo Formato Note
mloc_merce char(9) Codice merce
mloc_tipo_mov char(1) Tipo: A=Arrivo, P=Prelievo/Partenza, R=prenotazione, ...
mloc_segno char(1) E=Entrata, U=Uscita
mloc_doc_key char(30) Chiave documento gestionale collegato
mloc_doc_riga num(8) Riga documento gestionale
mloc_qta_doc num(7,3) Quantita' totale della riga documento
mloc_qta_loc num(7,3) Quantita' relativa alla locazione (una riga puo' essere ripartita)
mloc_doc_key_orig char(30) Chiave documento originale (es. carico da cui e' nato un BDP da arrivo)

DFDOCTES — testata documenti (estratto campi WMS)

Chiave primaria: df_dtes_key (sequence PostgreSQL)

Campo Note
df_dtes_key_host Chiave testata nel gestionale host
df_dtes_classe Classe documento: OV, COV, DM, BDP, BDPP, ...
df_dtes_locazione Locazione assegnata al documento
df_dtes_fl_lavorato N = da lavorare su APP (es. BDP da arrivo)
df_dtes_stato_doc Stato: blank=aperto, C=chiuso/evaso
df_dtes_ope_assegnato Operatore che ha preso in carico il documento su APP

Tipi di locazione

Classe Prefisso codice Scopo
A (Arrivo) es. A01.... Area a terra dove viene appoggiata la merce in entrata, in attesa di smistamento
M (Magazzino/Stock) es. 1.A.A.0.A Scaffalature di stoccaggio definitivo, identificate dai 5 livelli gerarchici
P (Partenza/Spedizione) es. P01.... Aree di raccolta merce preparata per la spedizione al cliente

Il codice locazione e' composto da 5 posizioni: stanza.corsia.posto.piano.cella. Le locazioni di Arrivo e Partenza usano tipicamente solo il primo campo. La gerarchia dei valori ammessi per ciascuna posizione e' definita in DFTABLOCAZIONI.


Flussi principali

Flusso 1 — Arrivo merce da fornitore

Lato ERP:

  1. Ufficio acquisti inserisce documento di carico (COGTESBO/COGMOMAG), assegnandolo a una locazione di Arrivo
  2. All'inserimento, ERP scrive su DFMOVIMENTILOC il movimento di entrata sulla locazione A (tipo A, segno E) e aggiorna DFGIACENZELOC
  3. Addetto esegue "controllo residui": verifica se la merce in arrivo puo' coprire ordini clienti scoperti
  4. Se si': genera BDP da arrivo (COGTESBP); esportato su DFDOCTES con df_dtes_fl_lavorato = N e assegnato a una locazione di Spedizione
  5. Il BDP da arrivo e' raccordato al carico in DFDOCRAC
  6. Il residuo del carico (non diretto a BDP) rimane sulla locazione di Arrivo e viene esportato come documento DM su DFDOCTES

Lato APP:

  1. APP mostra gli arrivi gia' elaborati da "controllo residui"
  2. Operatore prende in carico l'arrivo, si muove in magazzino e posiziona i prodotti sulle locazioni di Stock (M)
  3. Per ogni spostamento: DFMOVIMENTILOC riceve un'uscita dalla locazione A e un'entrata sulla locazione M; DFGIACENZELOC viene aggiornato
  4. Quando la somma algebrica dei movimenti sulla locazione A scende a 0, la locazione e' libera

Logica di verifica evasione arrivo: La riga di carico e' completamente stoccata quando la somma algebrica di tutti i movimenti (segno E - segno U) sulla locazione A per quella riga documento = 0.


Flusso 2 — BDP da arrivo (merce diretta a cliente)

Lato APP:

  1. APP mostra i BDP da arrivo con df_dtes_fl_lavorato = N
  2. Operatore prende in carico il BDP, preleva la merce dalla locazione di Arrivo
  3. Porta la merce sulla locazione di Spedizione assegnata al cliente
  4. APP scrive su DFMOVIMENTILOC: uscita da locazione A, entrata su locazione P
  5. APP aggiorna DFGIACENZELOC su entrambe le locazioni
  6. Il BDP viene marcato come lavorato; ERP lo rendera' evadibile rimuovendo il flag provvisorio (TBP-FL-PROVVISORIO = ' ')

Flusso 3 — Evasione ordini (prelievo da magazzino)

Lato APP:

  1. APP mostra gli ordini aperti su DFDOCTES (classe OV/COV), filtrabili per cliente o barcode consegna
  2. Un ordine non e' piu' visibile quando tutte le quantita' sono: uscite oppure presenti in un BDP di spedizione gia' preparato
  3. Operatore seleziona ordine: il sistema calcola le quantita' da prelevare per ogni articolo (qta ordine - qta evasa - qta in BDP aperti) e individua le locazioni M da visitare, ordinate per percorso logico (ordine alfabetico locazione)
  4. Per ogni locazione/articolo: APP inserisce movimento di prenotazione su DFMOVIMENTILOC (tipo R) e aggiorna gloc_prenotato su DFGIACENZELOC
  5. Operatore percorre il magazzino; per ogni prelievo conferma con lettura barcode prodotto + locazione + quantita'
  6. Al termine: APP crea un BDP provvisorio (BDPP) su DFDOCTES/DFDOCRAC, scarica le locazioni M prelevate, carica la locazione di Spedizione P

Lato ERP (programma DFN109):

  1. Sync DFN109 individua i BDPP da importare (query su DFDOCRAC con DF_DRAC_DF_CLASSE = 'BDPP' e DF_DRAC_AGG_HOST = 1)
  2. Per ciascuno: crea COGTESBP + COGRIGBP, aumenta qta prenotata su COGSLMAG, aggiorna DFDOCRAC con chiave BDP definitivo, imposta TOR-FL-LAVORATO = S sull'ordine
  3. Il BDP provvisorio viene sostituito dal definitivo; APP lo vede come classe BDP

Lato ERP — emissione DDT:

  1. Addetto spedizioni seleziona i BDP (da arrivo e da magazzino) nella funzione emissione DDT
  2. Viene generato il DDT di vendita; la locazione di Spedizione viene svuotata (movimento U, aggiornamento DFGIACENZELOC, liberazione locazione se vuota)
  3. La chiusura del BDP aggiorna DF_DTES_STATO_DOC = 'C' su DFDOCTES tramite WMSW01

Programmi ERP coinvolti

Programma Ruolo
WMSW01 Subroutine: aggiorna stato BDP su DFDOCTES alla chiusura
WMSW02 (vedi codebase)
WMSW04 Strumento diagnostico: visualizzazione movimenti magazzino (Vision) e movimenti APP (DFMOVIMENTILOC) da una data specificata; utile per riconciliazione e debug discrepanze
DFN101 Sync ordini di vendita: esporta ordini modificati su DB frontiera con quantita' evasa
DFN109 Sync BDP: importa BDP provvisori creati da APP; importa BDP movimentati da APP (da arrivo)

Sincronizzazioni batch

Direzione Tabelle ERP Tabelle frontiera Programma Note
ERP → frontiera COGTESOR/COGRIGOR DFDOCTES/DFDOCDET DFN101 Ordini vendita + consegne
ERP → frontiera COGTESBP/COGRIGBP DFDOCTES/DFDOCDET/DFDOCRAC BDP definitivi
frontiera → ERP DFDOCRAC (BDPP) COGTESBP/COGRIGBP DFN109 BDP provvisori da APP
frontiera → ERP DFDOCTES (BDP lavorati) COGTESBP DFN109 Rimozione flag provvisorio
c00000 → frontiera arpanagr/arpmerci/... DFANAGR/DFMERCIPREST/... demone Webcon Anagrafiche e catalogo

Strumento diagnostico: WMSW04

WMSW04 permette di confrontare i movimenti magazzino lato ERP con i movimenti lato APP (DFMOVIMENTILOC) a partire da una data specificata. Viene usato per:

  • Individuare discrepanze tra giacenze contabili (COGSLMAG) e giacenze per locazione (DFGIACENZELOC)
  • Verificare movimenti doppi su BDP (query di riferimento in basso)
  • Identificare giacenze negative su locazioni
  • Controllare locazioni di Partenza non assegnate che non dovrebbero avere giacenza

Query diagnostiche di riferimento:

-- Movimenti doppi: stessa merce, stesso BDP, stessa locazione, stesso giorno
SELECT mloc_locazione, mloc_doc_key, mloc_merce, mloc_qta_loc, mloc_di_data, count(*) AS cnt
FROM dfmovimentiloc
JOIN dfdoctes ON (df_dtes_classe = 'BDPP' AND df_dtes_key_host = mloc_doc_key)
WHERE mloc_tipo_mov = 'P' AND mloc_di_data >= '2025-09-01'
GROUP BY mloc_locazione, mloc_doc_key, mloc_merce, mloc_qta_loc, mloc_di_data
HAVING count(*) > 1
ORDER BY mloc_di_data ASC, cnt DESC;

-- Giacenze negative per locazione
SELECT loc_classe, gloc_locazione, count(*)
FROM dfgiacenzeloc
JOIN dflocazioni ON (gloc_locazione = loc_locazione)
WHERE gloc_giacenza < 0
GROUP BY loc_classe, gloc_locazione;

-- Locazioni di Partenza non assegnate con giacenza non nulla (anomalia)
SELECT loc_classe, gloc_locazione, count(*)
FROM dfgiacenzeloc
JOIN dflocazioni ON (gloc_locazione = loc_locazione)
WHERE gloc_giacenza <> 0 AND loc_ana = ' ' AND loc_classe = 'P' AND gloc_fl_canc <> 'C'
GROUP BY loc_classe, gloc_locazione;

Casi particolari di gestione documentale

Caso Effetto ERP Effetto locazioni
Cancellazione riga BDP diretto Qta prenotata COGSLMAG diminuisce; ordine ritorna evadibile Locazione P diminuisce; locazione M di origine aumenta
Cancellazione riga BDP da arrivo Qta prenotata diminuisce; carico puo' essere stoccato o riassegnato Locazione P diminuisce; locazione A di origine aumenta
Cancellazione riga DDT con BDP diretto Giacenza+impegno+prenotato aumentano; riga dissociata dal BDP originale, creato nuovo BDP Locazione P rimane invariata
BDP da completamento lotti Creato con TBP-FL-PROVVISORIO = P; non evadibile fino a conferma APP Locazione M scaricata, locazione P caricata; DFN109 rimuovera' flag provvisorio dopo conferma

Note implementative

  • Il campo RMER-LOCAZIONE-DEFAULT su ARPMERCI contiene la locazione di default proposta per un articolo non ancora presente in nessuna locazione; non viene sincronizzato sul frontiera
  • Le operazioni di inventario manuale da APP scrivono su DFDOCRAC con classe INV per permettere al programma di inventario gestionale di elaborare solo le merci gia' contate
  • Profilazione APP: profilo "Direzione" puo' accedere alle funzioni di inventario/adeguamento giacenze; profilo "utente standard" ha accesso solo alle funzioni operative
  • La cancellazione di una riga DDT deve separare le righe rimosse in un nuovo BDP per evitare che le locazioni di Partenza rimangano scaricate erroneamente