# 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 = , RisoltoDataOra = SYSDATETIME() WHERE 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.