# Gestione missioni WMS

## Gestione missioni WMS

[![image.png](https://gsdoc.genesyssoftware.eu/uploads/images/gallery/2026-11/scaled-1680-/LNsimage.png)](https://gsdoc.genesyssoftware.eu/uploads/images/gallery/2026-11/LNsimage.png)

## [Flussi missioni animati](https://gsdoc.genesyssoftware.eu/artifacts/flusso-missioni.html)

## . Il magazzino: posti, stati, attori

- **Ubicazione**: corsia, campata, livello, piano. Livello 1 = **picking** a terra (dove si prelevano i colli per gli ordini); livelli 2..12 = **stocking** in altezza (lo **stock** dell'articolo, i pallet di riserva); livello 0 = carico/scarico; **catasta** = pallet accatastati a terra.
- **Stato del posto**: 0 libero, 1 preallocato (prenotato da una missione), 2 occupato, 8 indisponibile, 9 bloccato.
- **Campate pari e dispari** = i due lati di una corsia.
- **Tipo magazzino**: normale (un articolo per livello di stocking), saturo, **dinamico** (piu' articoli nella stessa campata, sempre col controllo dell'altezza).
- **UC** = unita' di carico (pallet o collo identificato da SSCC). **Palmare** = terminale dell'operatore.
- **Attori**: ufficio (avvia gli allestimenti), **picker** (preleva ai picking e compone le UC), **carrellista** (muove i pallet con il carrello elevatore: allocazioni e abbassamenti), **server SIGEA** (generatori, servizio messaggi, smistamento, elaboratori delle risposte).

---

## 2. Allocazione di un pallet in entrata: il «pendolino»

**Quando**: l'operatore legge l'SSCC di un pallet ricevuto (missione su iniziativa ABBS17) oppure l'entrata merce chiede l'allocazione. Catena: palmare → `DABBSE1D` → `UANLOC4D` → `GPREUB4D` → `UFINUB4D`.

**Come si sceglie il posto** (`UFINUB4D`):

1. **Altezza del pallet** = strati × altezza confezione + altezza del supporto + tolleranza. Si prende dalla **tabella delle altezze** del magazzino la prima altezza ≥ a quella del pallet.
2. **Picking dell'articolo**: se l'articolo ha un picking e questo puo' ricevere, il pallet va a picking. Il picking riceve solo se: parametro «allocazione a picking» attivo (o articolo di tipo 91/92), **nessuno stock a stocking** dello stesso articolo (salvo tipo 91), e posto libero o con capienza residua. **Non esiste un criterio «giacenza zero»**: un picking con merce riceve ancora, se ha posto e non c'e' stock in alto. 
    - Perche' lo stock a stocking blocca il picking: **rotazione**. Il pallet in alto e' piu' vecchio e deve scendere lui, con un abbassamento; il nuovo non lo scavalca. Il tipo 91 e' l'interruttore per gli articoli dove la rotazione non conta.
3. **Pendolino sulle campate**: dal picking dell'articolo si oscilla sulle campate vicine, prima lo stesso lato (+2, −2, +4, −4…) poi l'altro (+1, −1, +3, −3…), fino a 65 posizioni, passando alla corsia precedente o successiva quando si esce dalla corsia. Si accetta il primo posto libero (o, nel dinamico, con altezza residua sufficiente) la cui altezza basta.
4. **Intera corsia del picking**, prima con altezza esatta poi con altezza maggiore.
5. **Corsie vicine** alternate (prima la precedente, poi la successiva).
6. **Catasta**, solo se il chiamante lo chiede (dopo il fallimento della ricerca normale, o per articoli «a catasta»).

**Esito**: il posto viene **preallocato** (stato 1, articolo assegnato se era libero), il pallet passa a «preallocato» (81), nasce la missione di allocazione ABBS1C per il carrellista. Esiti negativi: nessun posto; altezza fuori limiti; picking non trovato (l'articolo non ha picking e non esiste un picking libero da usare come punto di partenza).

**Picking «9000»**: quando dal palmare si assegna a un articolo un picking gia' occupato da un altro articolo, il sistema crea per l'articolo spodestato un picking «parcheggio» nella stessa corsia/campata con piano + 9000, con la sua merce. Non e' un indicatore di giacenza zero.

---

## 3. Abbassamenti automatici: stock → picking

**Che cosa sono**: la missione con cui il carrellista porta un pallet (ABBS01) o dei colli (ABBS08) dallo stock al picking, perche' il picking non basta a coprire l'allestimento.

**Chi li fa partire** (`DABBSL3D`, tipo di lavoro):

- **modo classico** (tipo 10): all'avviamento dell'allestimento, dopo che `GAGAUB4D` ha calcolato il fabbisogno;
- **modo sincronizzato** (tipi 13 e 12): dall'elaborazione della missione di avvio «SERVER» dell'allestimento; prima il tipo 12 (dallo stock alla porta di carico, pallet interi), poi il tipo 13 per i picking scoperti;
- cruscotto degli abbassamenti, entrata merce, trasferimenti tra depositi.

**Condizioni**: gestione abbassamenti attiva sul deposito e sul magazzino di picking; area operativa con i quattro magazzini (produzione, confezionamento, stocking, picking); picking assegnato all'articolo; BxT (colli per strato × strati) per ragionare a pallet interi.

**Fabbisogno del picking** = giacenza + colli gia' in abbassamento − prenotati − impegnati − scorta minima; se negativo mancano colli. Nel classico si arrotonda a pallet interi. **Tetto**: il fabbisogno e' limitato ai pallet registrati a stocking per l'articolo. **Difetto confermato D-01**: il tetto si calcola sul magazzino di *picking* anziche' di stocking: con codici di magazzino diversi il fabbisogno e' sempre zero e nessun abbassamento parte (dal 2026-03-04), senza alcun messaggio.

**Scelta dello stock**:

- magazzino **senza allocazioni**: i posti di stock dell'articolo in ordine corsia, campata, piano; «in abbassamento» sul posto; finito lo stock la riga parte comunque senza posto di prelievo;
- magazzino **con allocazioni** (pallet registrati): il pallet piu' vecchio per scadenza, impegnato, stato 82 «impegnato per abbassamento»; nasce un documento di servizio.

**La missione**: nasce «inserita» (0); sul picking cala il fabbisogno e cresce «in abbassamento»; a fine giro il generatore porta tutte le missioni del lotto allo stato chiesto dal chiamante («da affidare», 2). Il messaggio contiene da dove prelevare (corsia, campata, piano, SSCC) e dove portare (il picking).

**La risposta** (`DABBSE1D`): lo stock perde giacenza e «in abbassamento»/impegnato; il picking perde «in abbassamento», guadagna giacenza e ricalcola il fabbisogno; con allocazioni il pallet intero va sul picking (stato 3) o resta a stocking col residuo (stato 5). Risposta **parziale** (7): aggiorna ma non libera. Risposta **conclusa** (9) o annullamento da ufficio (D): si rilascia chiesto − portato; senza allocazioni si libera solo il picking (lo stock resta «in abbassamento»: difetto D-02). Risposta con **errore** (E): nessun rilascio (D-11). Una seconda «conclusa» viene invalidata.

**Quando non parte** (sempre senza messaggio): gestione spenta sul magazzino di picking; articolo senza picking; fabbisogno zero (tetto, D-01); avviamento «missione unica con N proposte» o ventilato; proposta senza spunta «abbassamenti».

**Missioni su iniziativa**: ABBS11/18 abbassamento fatto dal carrellista senza richiesta; ABBS17 allocazione con proposta del posto (capitolo 2); ABBS1D cambio picking dal palmare (picking 9000). Difetto D-01 di `DABBSE1D`: su iniziativa, senza allocazioni, la giacenza del picking viene **sottratta** invece che aggiunta.

---

## 4. Allestimenti con i palmari

**Avviamento** (`GALPRC3D`, ufficio): proposte di consegna con la spunta «missioni»; serve la gestione SSCC e dei dispositivi remoti sul deposito e nessuna UC gia' in missione. Fase 4 genera le missioni, fase 5 gli abbassamenti (classico), fase 6 le rilascia.

**Generazione** (`DEODV03D`): le UC (righe della proposta gia' divise in pila e posizione) vengono impacchettate in missioni, tutte nate «inserite» (0):

- **EODV01** pallet interi della stessa pila («pile uguali»: stesso numero di pedane ≤ 7 e stesso articolo per posizione, da 2 a 33 pile per gruppo);
- **EODV02** pallet e demi-pallet; **EODV03** mix-pallet (al massimo 3 pile per missione, ci finiscono anche i piccoli pallet);
- **EODV08** collettame a palmare (max 10 righe); **09/07/0A** collettame a nastro, container, consumer unit;
- **EODV05** missioni-tabella (anagrafiche); **EODV00** missione di avvio per il «SERVER» (solo sincronizzato).

Righe in ordine **pila → posizione → UC**; ogni riga porta articolo, EAN, **posto di picking da cui prelevare**, colli, quantita', pila/posizione, UC, lotto e scadenza. La testata porta **porta di carico e lato**, cliente, citta', spedizioniere, note. Il messaggio arriva a 16000 caratteri. Ogni UC messa in missione passa a «generata missione».

**Rilascio** (fase 6): le missioni passano da 0 a **2** (non sincronizzato), a **«!»** da affidare con verifica (gestione abbassamenti 5) o a **«3»** per i pallet interi con missione collegata (gestione 6/7); la EODV00 a 2. Le missioni accorpate passano subito a 2.

**Modo sincronizzato** (`DEODVE1D` sulla missione SERVER): abbassamenti tipo 12 verso la porta di carico (i residui diventano UC collettame, pila 9900), poi tipo 13 per ogni picking scoperto; poi controllo di copertura; le missioni coperte passano «!» → 0 → 2 a fine giro (le figlie di un gruppo restano 0, le tabelle 05 si rilasciano solo da qui). Una missione mai coperta fa ripetere il giro senza limite (D-13) e trattiene le altre.

**Il picker**: riceve la missione, segue il palmare posto per posto, preleva i colli dal picking, compone l'UC sul pallet, la porta alla porta di carico e lato della testata, conferma (parziale o conclusa).

**La risposta** (`DEODVE1D`): la porta di carico diventa destinazione di ogni UC; ogni UC confermata diventa «allestita» (una seconda conferma crea una «nuova UC allestita», non sovrascrive); il pallet SSCC viene creato se manca; proposta e picking vengono assestati; **solo con la risposta conclusa** si storna l'impegnato non prelevato. Risposte «con errore» non hanno un ramo proprio.

**Quando non genera** (senza messaggio): proposta o cliente inesistenti; manca la spunta «missioni»; deposito senza SSCC/dispositivi; UC gia' in missione; Ce.Di. con allocazioni e articolo senza giacenza (UC «sospesa» 90).

---

## 5. Ciclo di vita delle missioni ai palmari

Tabelle: **MRMM** = missioni, **MRMR** = risposte. Ogni tipologia ha un **generatore** (scrive MRMM) e un **elaboratore delle risposte** (legge MRMR): abbassamenti `DABBSL3D` → `DABBSE1D`; allestimenti `DEODV03D` → `DEODVE1D`; entrata merce `DENTML3D` → `DENTME1D`; consegne `DCONSL3D`.

**Stati della missione**:

```
```
0 inserita ─(generatore, fine lotto)─▶ 2 da affidare ─(servizio messaggi)─▶ 4 inviata ─(conferma)─▶ 5 affidata
                                            ▲                                   │ rifiuto o 240 s senza conferma
                                            └───────────────────────────────────┘
5 affidata ─(risposta del palmare)─▶ 7 parziale · 9 completa · E con errore      altri: A su iniziativa (gia' eseguita),
                                                                                  D annullata (da ufficio), X invalidata

```<button aria-label="Copy code block" class="code-block-copy-button"><svg aria-hidden="true" fill="none" focusable="false" height="16" viewbox="0 0 16 16" width="16"><path d="M4 4H2V14H11V12H4V4Z" fill="currentColor"></path><path clip-rule="evenodd" d="M5 2H14V11H5V2ZM6 3H13V10H6V3Z" fill="currentColor" fill-rule="evenodd"></path></svg></button>
```

- Lo stato 7/9/E lo scrive il **servizio messaggi** (processo C `crmhs`, fuori dal COBOL ma nel repo: `legacy/eSDSW/SL/RMH/crmhs05x.c`) all'arrivo della risposta, **prima** dell'elaborazione dei dati.
- «Affidata» sono due stati: 4 inviata e 5 affidata. Il palmare puo' rifiutare.
- Missioni ferme in 4/5 (e risposte in 6/7) da piu' di 4 giorni vengono invalidate (X).
- Alla conclusione le missioni «integrative» della stessa missione vengono annullate anche se gia' in 2/4/5.
- Lo stato «C» vale solo per il web-service, mai per i palmari.

**Scelta del palmare**: priorita' **1..7** = palmare assegnato (ruolo compatibile, nessuna altra missione in 4/5); **A..G** (F = normale) = primo palmare libero della stessa area operativa con ruolo compatibile (prima per sigla di dettaglio, poi per sigla primaria). Un palmare ha **una missione alla volta**. Dispositivo «SERVER» = nessun palmare, il servizio scrive subito una risposta conclusiva.

**Stati della risposta**: 5 ricevuta (servizio) → 6 candidata (processo libero del modulo) → 7 in elaborazione (smistatore `DBAxx30A`, che sceglie l'elaboratore dalla sigla primaria `E28DABBS0`, `E27DEODV0`) → 9 elaborata; X invalidata. Tipi di risposta dal palmare: 7 parziale, 9 conclusa, E errore. Il palmare **non manda mai «D»**: la scrive solo l'annullamento da ufficio.

**Missioni su iniziativa del palmare**: «proposta» = lavoro gia' fatto, stato A + risposta conclusa subito; «autorizzazione» = stato 2 con priorita' libera F, affidata normalmente (anche a un altro palmare).

**Il messaggio (protocollo AI)**: fino a 16000 caratteri in 4 colonne; sezione A = testata, sezione B = una riga per UC; ogni campo = codice AI di 4 caratteri + valore + fine riga (es. 0000 SSCC, 0001 EAN13, 0037 colli, 0030 quantita', 0010 lotto, 0015 scadenza, 9532 porta di carico). Campo vuoto o zero non scritto.

---

## 6. Le pagine animate

<table class="code-line" data-line="201" dir="auto" id="bkmrk-pagina-scenari-pendo"><thead class="code-line" data-line="201" dir="auto"><tr class="code-line" data-line="201" dir="auto"><th>pagina</th><th>scenari</th></tr></thead><tbody class="code-line" data-line="203" dir="auto"><tr class="code-line" data-line="203" dir="auto"><td>**Pendolino** (allocazione)</td><td>ricerca del posto campata per campata con i controlli (altezza, stato, stock a stocking, capienza), magazzino normale/dinamico, picking che riceve o no («UC non allocata a picking direttamente» per rotazione)</td></tr><tr class="code-line" data-line="204" dir="auto"><td>**Abbassamenti**</td><td>modo classico e sincronizzato, fabbisogno, scelta dello stock con/senza allocazioni, stock finito, quando non parte</td></tr><tr class="code-line" data-line="205" dir="auto"><td>**Missioni ai palmari** (integrata)</td><td>1 allestimento classico (16 passi) · 2 abbassamento ABBS01 (13) · 3 allestimento sincronizzato (11) · 4 risposta parziale (6) · 5 palmare che non conferma (5) · 6 su iniziativa del palmare (4) · 7 quando non parte (7). Doppio stepper missione/risposta, mappa con picker e carrellista col palmare, pannello palmare, pannello «il sistema fa» con controlli ✓/✗ e record toccati</td></tr></tbody></table>

I dati delle animazioni sono di esempio; ogni passo e' tratto dai racconti validati.