4.5 KiB
SQL prenotazione picking list Python-only
Script
apply_python_parallel_pickinglist_patch.sqlrollback_python_parallel_pickinglist_patch.sql
Obiettivo
Permettere a Python e C# di lavorare sullo stesso database senza condividere le stesse stored procedure operative.
Il C# continua a usare gli oggetti legacy:
dbo.XMag_ViewPackingListdbo.ViewPackingListRestantedbo.sp_xExePackingListPalletdbo.sp_xExePackingListPalletPrenotadbo.sp_ControllaPrenotazionePackingListPalletNew
Il Python usa oggetti separati:
dbo.py_XMag_ViewPackingListdbo.py_ViewPackingListRestantedbo.py_sp_xExePackingListPalletdbo.py_sp_xExePackingListPalletPrenotadbo.py_sp_ControllaPrenotazionePackingListPalletNewdbo.PyPickingListReservation
Tabella dbo.PyPickingListReservation
Scopo
Contiene la singola picking list prenotata dal programma Python.
Schema
| Colonna | Tipo | Ruolo |
|---|---|---|
ID |
tinyint |
sempre 1, enforced da check constraint |
Documento |
varchar(8) |
documento prenotato |
IDOperatore |
int |
operatore che ha fatto l'ultima azione |
ModUtente |
varchar(50) |
login operatore |
ModDataOra |
datetime |
timestamp modifica |
Vincoli
- Primary key su
ID. - Check
ID = 1.
Questa scelta implementa un singleton DB: il Python puo' avere una sola lista prenotata dal backoffice.
Vista dbo.py_XMag_ViewPackingList
Scopo
Replica la vista legacy dbo.XMag_ViewPackingList ma calcola IDStato usando PyPickingListReservation, non Celle.IDStato legacy.
Logica IDStato
CASE
WHEN pr.Documento IS NOT NULL
AND pr.Documento = CAST(legacy.Documento AS varchar(8))
THEN 1
ELSE 0
END AS IDStato
Vista dbo.py_ViewPackingListRestante
Scopo
Espone solo le UDC non ancora spedite:
WHERE Cella <> 9999
La UI "Gestione Picking List" usa questa vista sia per la griglia alta sia per il dettaglio.
Stored dbo.py_sp_xExePackingListPallet
Parametri
| Parametro | Tipo | Ruolo |
|---|---|---|
@IDOperatore |
int |
operatore corrente |
@Documento |
varchar(8) |
documento da prenotare/sprenotare |
@Azione |
char(1) |
P prenota, S s-prenota |
@RC |
int OUTPUT |
codice ritorno |
Validazioni
@Azionedeve esserePoS, altrimenti@RC = -10.- Il documento deve esistere in
py_XMag_ViewPackingList, altrimenti@RC = -20. - Se manca la riga singleton in
PyPickingListReservation, viene creata.
Prenotazione P
- Se il documento e' gia' attivo, ritorna senza modifiche.
- Azzera
IDStatosu tutte le celle con stato diverso da zero. - Mette
IDStato = 1sulle celle del documento target. - Aggiorna
PyPickingListReservationcon documento, operatore e timestamp. - Scrive log tramite
sp_LogPackingList.
S-prenotazione S
- Se il documento attivo non e' quello richiesto, ritorna senza modifiche.
- Azzera
IDStatosulle celle target. - Pulisce
PyPickingListReservation.Documento.
Stored dbo.py_sp_xExePackingListPalletPrenota
Scopo
Mette IDStato = 1 sulle celle ancora residue del documento. Viene usata dal controllo automatico prenotazione.
Stored dbo.py_sp_ControllaPrenotazionePackingListPalletNew
Scopo
Mantiene coerente la prenotazione mentre la picking list viene consumata dal barcode.
Logica
- Legge documento attivo da
PyPickingListReservation. - Se non c'e' documento attivo, termina.
- Se non esistono piu' righe residue in
py_ViewPackingListRestante:- azzera
Celle.IDStato; - svuota
PyPickingListReservation.Documento; - termina.
- azzera
- Se esistono ancora residui:
- azzera tutti gli
IDStato; - richiama
py_sp_xExePackingListPalletPrenotaper prenotare le celle residue.
- azzera tutti gli
Rollback
rollback_python_parallel_pickinglist_patch.sql elimina:
py_sp_ControllaPrenotazionePackingListPalletNewpy_sp_xExePackingListPalletPrenotapy_sp_xExePackingListPalletpy_ViewPackingListRestantepy_XMag_ViewPackingListPyPickingListReservation
Non tocca gli oggetti legacy C#.
Note review
- La stored Python usa una prenotazione singleton, quindi non gestisce due liste prenotate backoffice.
- L'azzeramento globale di
Celle.IDStatoe' coerente con la semantica attuale, ma in futuro dovra' essere rivalutato se piu' operatori o magazzini lavorano in parallelo. - Le UDC non scaffalate condividono il fallback dati del modello legacy; questo e' noto e andra' riprogettato nel nuovo schema FlyWMS.