Stabilizza picking barcode e patch cumulativa online
This commit is contained in:
235
diagnostica_scarico_celle_multiple.md
Normal file
235
diagnostica_scarico_celle_multiple.md
Normal file
@@ -0,0 +1,235 @@
|
||||
# Diagnostica Scarico Celle Multiple
|
||||
|
||||
## Contesto
|
||||
|
||||
La finestra `Scarico` aperta da `Gestione layout` serve a gestire celle fisiche che contengono piu' UDC.
|
||||
Nel database legacy non esisteva un vincolo rigido `una cella = una UDC`, quindi una cella rossa puo' contenere:
|
||||
|
||||
- UDC realmente compresenti nella stessa cella;
|
||||
- UDC rimaste in cella anche se appartenenti a picking list gia' chiuse/spedite.
|
||||
|
||||
L'obiettivo della diagnostica non e' ricostruire tutta la storia della UDC, ma aiutare l'operatore a capire quali righe scaricare come spedite.
|
||||
|
||||
## Fonti Dati
|
||||
|
||||
La griglia della dialog parte dalla giacenza corrente:
|
||||
|
||||
```sql
|
||||
dbo.XMag_GiacenzaPallet
|
||||
```
|
||||
|
||||
Questa vista indica quali UDC risultano presenti nella cella aperta dal layout.
|
||||
|
||||
La diagnostica controlla anche:
|
||||
|
||||
```sql
|
||||
dbo.XMag_GiacenzaPalletPlistChiuse
|
||||
```
|
||||
|
||||
Questa vista non e' uno storico documentale puro. E' una vista ibrida che incrocia la giacenza corrente con i documenti SAM chiusi.
|
||||
In pratica serve a individuare UDC ancora presenti in una cella fisica, ma appartenenti a una picking list/documento gia' chiuso.
|
||||
|
||||
## Conclusione Operativa
|
||||
|
||||
Per una cella fisica aperta da `Gestione layout`, i casi realmente utili sono solo due.
|
||||
|
||||
### 1. Nessuna Diagnostica
|
||||
|
||||
La UDC e' presente nella cella multipla e non compare in `XMag_GiacenzaPalletPlistChiuse`.
|
||||
|
||||
Significato:
|
||||
|
||||
```text
|
||||
UDC normalmente presente in cella.
|
||||
```
|
||||
|
||||
Non viene mostrato nessun messaggio nella colonna diagnostica.
|
||||
|
||||
### 2. Spedita Ma Non Scaricata Dalla Cella
|
||||
|
||||
La UDC e' presente nella cella fisica aperta, ma compare anche in `XMag_GiacenzaPalletPlistChiuse`.
|
||||
|
||||
Diagnostica mostrata:
|
||||
|
||||
```text
|
||||
Motivo: spedita ma non scaricata dalla cella
|
||||
```
|
||||
|
||||
Significato:
|
||||
|
||||
```text
|
||||
La UDC appartiene a una picking list chiusa, ma non e' stata scaricata dalla cella fisica.
|
||||
```
|
||||
|
||||
Operativamente questa UDC va selezionata e scaricata come spedita, quindi verso la cella virtuale:
|
||||
|
||||
```text
|
||||
7G.1.1 / IDCella 9999 / barcode cella 9000000
|
||||
```
|
||||
|
||||
## Casi Teorici Scartati Dalla Dialog
|
||||
|
||||
Durante l'analisi erano stati ipotizzati altri casi, ma sono stati esclusi dalla diagnostica della dialog per non confondere l'operatore.
|
||||
|
||||
### UDC Gia' In 7G.1.1
|
||||
|
||||
Se una UDC risulta davvero in `IDCella = 9999`, normalmente non dovrebbe comparire nella cella fisica aperta dal layout.
|
||||
Se accadesse, sarebbe un'incoerenza tra viste o dati non sincronizzati.
|
||||
|
||||
Per questo la dialog di scarico da layout fisico non mostra piu' il messaggio:
|
||||
|
||||
```text
|
||||
Motivo: spedita
|
||||
```
|
||||
|
||||
### UDC In Picking List Chiusa Ma Non Spedita
|
||||
|
||||
Questo caso e' teoricamente possibile ma raro e ambiguo nel modello dati attuale.
|
||||
Le viste disponibili non forniscono una distinzione documentale/storica abbastanza pulita da renderlo utile in questa dialog operativa.
|
||||
|
||||
Per questo la dialog non mostra piu':
|
||||
|
||||
```text
|
||||
Motivo: in plist chiusa, non spedita e non scaricata dalla cella
|
||||
```
|
||||
|
||||
Eventuali analisi piu' profonde vanno fatte nelle finestre di storico, non nella dialog rapida di scarico.
|
||||
|
||||
## Regola Finale Implementata
|
||||
|
||||
La diagnostica della dialog `Scarico` e' volutamente semplice:
|
||||
|
||||
```text
|
||||
se UDC in XMag_GiacenzaPalletPlistChiuse:
|
||||
"Motivo: spedita ma non scaricata dalla cella"
|
||||
altrimenti:
|
||||
diagnostica vuota
|
||||
```
|
||||
|
||||
Questa scelta riduce il rischio di falsi positivi e mantiene chiaro il comportamento per l'operatore.
|
||||
|
||||
## Aggiornamento 04/07/2026 - Barcode Picking List
|
||||
|
||||
Durante i test sul barcode sono state introdotte alcune modifiche operative collegate alla gestione delle picking list, agli skip UDC e alla ripresa del lavoro dopo movimenti liberi.
|
||||
|
||||
### Anti Autosubmit Su Cambio Lista
|
||||
|
||||
Problema osservato:
|
||||
|
||||
```text
|
||||
passando rapidamente da una picking list prenotata a una non prenotata,
|
||||
il barcode poteva considerare come lettura valida un valore gia' presente nel campo Pallet
|
||||
e scaricare automaticamente una UDC della nuova lista.
|
||||
```
|
||||
|
||||
Correzione implementata:
|
||||
|
||||
```text
|
||||
lo scarico automatico in picking list parte solo se il campo Pallet e' stato modificato
|
||||
dall'operatore dopo il caricamento della UDC proposta.
|
||||
```
|
||||
|
||||
In pratica, quando il programma carica una nuova UDC attesa, il valore visualizzato non puo' piu' generare da solo lo scarico. Serve una nuova lettura o digitazione effettiva.
|
||||
|
||||
### Skip UDC In Picking List
|
||||
|
||||
Durante l'evasione di una picking list, il tasto F4 assume il significato:
|
||||
|
||||
```text
|
||||
[F4] Salta UDC
|
||||
```
|
||||
|
||||
La UDC saltata viene registrata nella tabella:
|
||||
|
||||
```sql
|
||||
dbo.py_BarcodePickingListSkip
|
||||
```
|
||||
|
||||
Le righe aperte hanno:
|
||||
|
||||
```text
|
||||
Risolto = 0
|
||||
```
|
||||
|
||||
La query del barcode esclude le UDC saltate aperte, quindi la lista puo' proseguire sulle UDC successive senza chiudere definitivamente quelle non trovate.
|
||||
|
||||
### Fine Lista Con UDC Saltate
|
||||
|
||||
Quando una picking list non ha piu' UDC immediatamente lavorabili, ma contiene una o piu' UDC saltate, il barcode:
|
||||
|
||||
```text
|
||||
non chiude la picking list;
|
||||
rilascia la prenotazione;
|
||||
lascia la lista riprenotabile;
|
||||
mostra un messaggio di sospensione con numero UDC saltate.
|
||||
```
|
||||
|
||||
La lista resta quindi aperta e potra' essere ripresa in un secondo momento.
|
||||
|
||||
### Riprenotazione E Ripresa UDC Saltate
|
||||
|
||||
Quando la picking list viene riprenotata, gli skip aperti del documento vengono marcati come risolti:
|
||||
|
||||
```sql
|
||||
UPDATE dbo.py_BarcodePickingListSkip
|
||||
SET Risolto = 1,
|
||||
RisoltoDa = <operatore>,
|
||||
RisoltoDataOra = SYSDATETIME()
|
||||
WHERE Documento = <documento>
|
||||
AND Risolto = 0;
|
||||
```
|
||||
|
||||
Questo permette al barcode di riproporre le UDC saltate rimaste da evadere.
|
||||
|
||||
### Posizione UDC Dopo Movimenti Liberi
|
||||
|
||||
Una UDC saltata puo' essere movimentata in pausa tramite operazioni libere, ad esempio:
|
||||
|
||||
```text
|
||||
versamento in una nuova cella fisica;
|
||||
dissociazione verso 9001000 / Non scaffalata.
|
||||
```
|
||||
|
||||
Alla ripresa della picking list, la posizione mostrata dal barcode riflette la giacenza corrente, perche' la vista operativa deriva `Cella` e `Ubicazione` da:
|
||||
|
||||
```sql
|
||||
dbo.XMag_GiacenzaPallet
|
||||
```
|
||||
|
||||
Quindi una UDC prima saltata e poi spostata verra' proposta con la nuova cella, oppure come:
|
||||
|
||||
```text
|
||||
Non scaffalata
|
||||
```
|
||||
|
||||
se e' stata dissociata verso la locazione virtuale `9001000`.
|
||||
|
||||
### Regola Conservata
|
||||
|
||||
Resta confermata la regola operativa:
|
||||
|
||||
```text
|
||||
una UDC diventa Spedita / 7G.1.1 / 9000000 solo nel flusso picking list.
|
||||
```
|
||||
|
||||
Le operazioni libere non spediscono una UDC. Possono solo versarla in una cella fisica oppure metterla in `9001000 / Non scaffalata`.
|
||||
|
||||
### File Coinvolti
|
||||
|
||||
Le modifiche principali sono nei moduli:
|
||||
|
||||
```text
|
||||
barcode_client.py
|
||||
barcode_repository.py
|
||||
barcode_service.py
|
||||
prenota_sprenota_sql.py
|
||||
version_info.py
|
||||
```
|
||||
|
||||
La patch DB cumulativa da usare sul database online e':
|
||||
|
||||
```text
|
||||
apply_online_python_wms_full_patch.sql
|
||||
```
|
||||
|
||||
La patch contiene gli oggetti SQL necessari al ramo Python e puo' essere eseguita una sola volta da SSMS.
|
||||
Reference in New Issue
Block a user