Alpha6 barcode non scaffalate e bypass login
This commit is contained in:
68
docs/review/barcode_error_handling.md
Normal file
68
docs/review/barcode_error_handling.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# Barcode: logging errori e transazioni
|
||||
|
||||
## Problema rilevato
|
||||
|
||||
Durante uno scarico picking list dal lettore barcode, l'operazione DB e' arrivata a buon fine ma il client ha mostrato un'eccezione. I file standard output/error erano vuoti.
|
||||
|
||||
Con `pythonw` non e' sufficiente affidarsi a stdout/stderr: eccezioni Tk, future asincrone o callback possono non arrivare al wrapper principale.
|
||||
|
||||
## Strategia adottata
|
||||
|
||||
Il client barcode ora registra errori in modo esplicito su `warehouse_fatal.log` e su `barcode_wms_launch.log`.
|
||||
|
||||
Canali coperti:
|
||||
|
||||
- `sys.excepthook`
|
||||
- `threading.excepthook`
|
||||
- `Tk.report_callback_exception`
|
||||
- exception handler del loop `asyncio`
|
||||
- eccezioni delle operazioni asincrone barcode
|
||||
- errori del repository durante movimento DB
|
||||
- errori post-movimento durante ricostruzione stato UI
|
||||
|
||||
## Transazione movimento DB
|
||||
|
||||
Il movimento barcode passa da `BarcodeRepository.execute_legacy_move`.
|
||||
|
||||
La batch SQL usa:
|
||||
|
||||
```sql
|
||||
SET XACT_ABORT ON;
|
||||
```
|
||||
|
||||
ed e' eseguita con:
|
||||
|
||||
```python
|
||||
query_json(..., commit=True)
|
||||
```
|
||||
|
||||
Questo significa:
|
||||
|
||||
- successo: commit;
|
||||
- eccezione SQL/Python: rollback automatico della transazione SQLAlchemy;
|
||||
- il valore `@RC` restituito dalla stored legacy non viene interpretato come errore.
|
||||
|
||||
Nota importante: in `sp_xMagGestioneMagazziniPallet`, quando il movimento va a buon fine, `@RC` viene valorizzato con `@@IDENTITY`, cioe' con l'identificativo del movimento inserito. Quindi un valore diverso da zero e' compatibile con un movimento riuscito e non deve causare rollback.
|
||||
|
||||
## Distinzione tra movimento e refresh UI
|
||||
|
||||
Dopo un movimento riuscito, il service ricostruisce il messaggio UI interrogando picking list e tracciabilita'.
|
||||
|
||||
Se questa fase post-movimento fallisce:
|
||||
|
||||
- il movimento resta valido;
|
||||
- l'errore viene loggato;
|
||||
- l'utente vede `Movimento eseguito. Dettagli non aggiornati.`;
|
||||
- non viene mostrato il messaggio "transazione non completata".
|
||||
|
||||
Se invece fallisce la transazione vera:
|
||||
|
||||
- l'utente vede `Transazione non completata, ripeti l'operazione.`;
|
||||
- il dettaglio tecnico viene scritto nel log.
|
||||
|
||||
## File principali
|
||||
|
||||
- `runtime_support.py`
|
||||
- `barcode_client.py`
|
||||
- `barcode_repository.py`
|
||||
- `barcode_service.py`
|
||||
Reference in New Issue
Block a user