Freeze 2.0 warehouse monolista e documento fisso F1/F2
This commit is contained in:
38
sql_tests/README.md
Normal file
38
sql_tests/README.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# Dati per il collaudo a due picking list, 01/10/2026
|
||||
|
||||
Questi script riguardano esclusivamente la copia di test su HOMESERVER.
|
||||
Non includerli nella patch cumulativa per la produzione.
|
||||
|
||||
`riattiva_pickinglist_20261001.sql` cambia da D a P le testate SAM 233, 234,
|
||||
240 e 241 dell'anno 2026. Mantiene date, righe, lotti e posizioni delle UDC.
|
||||
Salva gli stati originali in Mediseawall.dbo.py_TestPickingListReactivation_20261001
|
||||
e controlla le precondizioni nella stessa transazione dell'aggiornamento.
|
||||
|
||||
In Gestione Picking List selezionare **30 giorni** per vedere tutte le liste:
|
||||
|
||||
| Lista | UDC residue | In celle fisiche | Non scaffalate nella vista |
|
||||
|---|---:|---:|---:|
|
||||
| 233 | 28 | 3 | 25 |
|
||||
| 234 | 28 | 2 | 26 |
|
||||
| 240 | 11 | 0 | 11 |
|
||||
| 241 | 28 | 0 | 28 |
|
||||
| 244 (gia attiva) | 26 | 24 | 2 |
|
||||
|
||||
La 240 conserva altre 33 UDC gia spedite, escluse dalla vista operativa.
|
||||
La qualifica non scaffalata deriva dalla vista: puo' comprendere UDC che non
|
||||
hanno una giacenza WMS, mostrate mediante il fallback convenzionale 1000.
|
||||
|
||||
Nessuna cella fisica candidata risulta contenere altre UDC. La condivisione
|
||||
della locazione virtuale non scaffalata e' ammessa. Le liste 233/234 e 244
|
||||
contengono celle distinte nelle stesse colonne, utili per il futuro test del
|
||||
cambio automatico fra documenti. Non sono stati creati movimenti di test.
|
||||
|
||||
`ripristina_testate_pickinglist_20261001.sql` ripristina solo gli stati SAM.
|
||||
Non ripristina UDC movimentate, skip o sequenze creati durante le prove.
|
||||
Per ripetere identicamente un test che modifica le giacenze occorre un backup
|
||||
coerente dei due database, oppure un ripristino specifico dei dati del test.
|
||||
La piccola tabella di backup degli stati non sostituisce tale backup completo.
|
||||
|
||||
Controllato anche il trigger SAM `StatoLottoRientrato`: il passaggio D -> P
|
||||
non soddisfa la sua condizione e non modifica i lotti. Il ripristino P -> D
|
||||
si ferma se esistono lotti marcati T, per evitare gli effetti di quel trigger.
|
||||
82
sql_tests/riattiva_pickinglist_20261001.sql
Normal file
82
sql_tests/riattiva_pickinglist_20261001.sql
Normal file
@@ -0,0 +1,82 @@
|
||||
/* Solo copia locale di test HOMESERVER. Non distribuire come patch produzione.
|
||||
Riattiva 233,234,240,241 conservando date, righe, UDC e posizioni attuali.
|
||||
Salva i valori di testata per un rollback mirato; non e' un backup dei DB.
|
||||
*/
|
||||
USE Mediseawall;
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
IF CONVERT(nvarchar(128), SERVERPROPERTY('MachineName')) <> N'HOMESERVER'
|
||||
THROW 51000, 'Script riservato alla copia di test su HOMESERVER.', 1;
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
IF OBJECT_ID('dbo.py_TestPickingListReactivation_20261001', 'U') IS NOT NULL
|
||||
THROW 51001, 'Preparazione gia eseguita: controllare il backup prima di ripetere.', 1;
|
||||
|
||||
DECLARE @Targets TABLE (ID int PRIMARY KEY, Documento int NOT NULL);
|
||||
INSERT INTO @Targets VALUES (11882,233),(11883,234),(11890,240),(11891,241);
|
||||
|
||||
IF (SELECT COUNT(*) FROM SAMA1.dbo.BAMTES b WITH (UPDLOCK,HOLDLOCK)
|
||||
JOIN @Targets t ON b.ID=t.ID AND b.NUMDOC=t.Documento
|
||||
WHERE b.ANNDOC=2026 AND b.STATO='D'
|
||||
AND b.DATDOC>CAST(GETDATE()-30 AS int)) <> 4
|
||||
THROW 51002, 'Le quattro testate non corrispondono allo scenario atteso.', 1;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM dbo.py_XMag_ViewPackingListStorico h
|
||||
JOIN dbo.XMag_GiacenzaPallet g ON g.IDCella=h.Cella
|
||||
WHERE h.Documento IN (233,234,240,241,244) AND h.Cella NOT IN (1000,9999)
|
||||
AND LTRIM(RTRIM(g.BarcodePallet)) COLLATE Latin1_General_CI_AS <>
|
||||
h.Pallet COLLATE Latin1_General_CI_AS
|
||||
) THROW 51003, 'Cella fisica con altre UDC: preparazione annullata.', 1;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT Pallet FROM dbo.py_XMag_ViewPackingListStorico
|
||||
WHERE Documento IN (233,234,240,241,244) AND Cella<>9999
|
||||
GROUP BY Pallet HAVING COUNT(DISTINCT Documento)>1
|
||||
) THROW 51004, 'Una UDC residua appartiene a piu liste candidate.', 1;
|
||||
|
||||
IF EXISTS (SELECT 1 FROM dbo.py_BarcodePickingListSkip
|
||||
WHERE Documento IN ('233','234','240','241') AND Risolto=0)
|
||||
OR EXISTS (SELECT 1 FROM dbo.py_PickingListPrelievoSequenza
|
||||
WHERE Documento IN ('233','234','240','241') AND DelDataOra IS NULL)
|
||||
OR EXISTS (SELECT 1 FROM dbo.PyPickingListReservation
|
||||
WHERE NULLIF(LTRIM(RTRIM(Documento)),'') IS NOT NULL)
|
||||
THROW 51005, 'Prenotazioni, skip o sequenze attive: verificare prima del test.', 1;
|
||||
|
||||
CREATE TABLE dbo.py_TestPickingListReactivation_20261001 (
|
||||
BamtesID int NOT NULL PRIMARY KEY,
|
||||
Anno smallint NOT NULL,
|
||||
Documento int NOT NULL,
|
||||
StatoOriginale char(1) NOT NULL,
|
||||
DataDocumentoOriginale float NOT NULL,
|
||||
ApplicataIl datetime2 NOT NULL,
|
||||
RipristinataIl datetime2 NULL
|
||||
);
|
||||
INSERT INTO dbo.py_TestPickingListReactivation_20261001
|
||||
(BamtesID,Anno,Documento,StatoOriginale,DataDocumentoOriginale,ApplicataIl)
|
||||
SELECT b.ID,b.ANNDOC,b.NUMDOC,b.STATO,b.DATDOC,SYSDATETIME()
|
||||
FROM SAMA1.dbo.BAMTES b JOIN @Targets t ON t.ID=b.ID;
|
||||
|
||||
UPDATE b SET STATO='P'
|
||||
FROM SAMA1.dbo.BAMTES b JOIN @Targets t ON t.ID=b.ID;
|
||||
IF @@ROWCOUNT<>4 THROW 51006, 'Numero di testate aggiornate inatteso.', 1;
|
||||
|
||||
IF (SELECT COUNT(DISTINCT Documento) FROM dbo.py_ViewPackingListPrelievo
|
||||
WHERE Documento IN (233,234,240,241,244)
|
||||
AND DataDocumento>CAST(GETDATE()-30 AS int))<>5
|
||||
THROW 51007, 'Le cinque liste non risultano tutte visibili. Rollback.', 1;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF @@TRANCOUNT>0 ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
|
||||
SELECT Documento,COUNT(DISTINCT Pallet) AS UdcResidue
|
||||
FROM dbo.py_ViewPackingListPrelievo
|
||||
WHERE Documento IN (233,234,240,241,244)
|
||||
GROUP BY Documento ORDER BY Documento;
|
||||
54
sql_tests/ripristina_testate_pickinglist_20261001.sql
Normal file
54
sql_tests/ripristina_testate_pickinglist_20261001.sql
Normal file
@@ -0,0 +1,54 @@
|
||||
/* Ripristina SOLO lo stato delle quattro testate riattivate per i test.
|
||||
Non annulla movimentazioni effettuate durante il collaudo.
|
||||
Eseguire sullo stesso DB locale con applicazioni ferme e liste sprenotate.
|
||||
*/
|
||||
USE Mediseawall;
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
IF CONVERT(nvarchar(128),SERVERPROPERTY('MachineName'))<>N'HOMESERVER'
|
||||
THROW 51000, 'Script riservato alla copia di test su HOMESERVER.', 1;
|
||||
IF OBJECT_ID('dbo.py_TestPickingListReactivation_20261001','U') IS NULL
|
||||
THROW 51001, 'Backup delle testate non trovato.', 1;
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM dbo.PyPickingListReservation r
|
||||
JOIN dbo.py_TestPickingListReactivation_20261001 s
|
||||
ON r.Documento=CAST(s.Documento AS varchar(8))
|
||||
WHERE s.RipristinataIl IS NULL
|
||||
) THROW 51002, 'Sprenotare le liste di test prima del ripristino.', 1;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM dbo.py_TestPickingListReactivation_20261001 s
|
||||
LEFT JOIN SAMA1.dbo.BAMTES b WITH (UPDLOCK,HOLDLOCK) ON b.ID=s.BamtesID
|
||||
WHERE s.RipristinataIl IS NULL AND
|
||||
(b.ID IS NULL OR b.ANNDOC<>s.Anno OR b.NUMDOC<>s.Documento
|
||||
OR b.DATDOC<>s.DataDocumentoOriginale OR b.STATO IS NULL
|
||||
OR b.STATO NOT IN ('P','D'))
|
||||
) THROW 51003, 'Testate cambiate rispetto al backup: verificare manualmente.', 1;
|
||||
|
||||
-- Il trigger SAM StatoLottoRientrato modifica LOTSER.DESCR tornando in D.
|
||||
-- In presenza di lotti marcati T fermarsi prima di attivarlo.
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM dbo.py_TestPickingListReactivation_20261001 s
|
||||
JOIN SAMA1.dbo.BAMTES b ON b.ID=s.BamtesID
|
||||
JOIN SAMA1.dbo.FATRIG f ON f.IDBAM=b.ID
|
||||
JOIN SAMA1.dbo.LOTTIBF lb ON lb.IDFATRIG=f.ID
|
||||
JOIN SAMA1.dbo.LOTSER l ON l.ID=lb.IDLOTSER
|
||||
WHERE s.RipristinataIl IS NULL AND b.STATO<>'D' AND l.DESCR='T'
|
||||
) THROW 51004, 'Lotti rientrati marcati T: ripristino da valutare per il trigger SAM.', 1;
|
||||
|
||||
UPDATE b SET STATO=s.StatoOriginale
|
||||
FROM SAMA1.dbo.BAMTES b
|
||||
JOIN dbo.py_TestPickingListReactivation_20261001 s ON s.BamtesID=b.ID
|
||||
WHERE s.RipristinataIl IS NULL;
|
||||
|
||||
UPDATE dbo.py_TestPickingListReactivation_20261001
|
||||
SET RipristinataIl=SYSDATETIME() WHERE RipristinataIl IS NULL;
|
||||
COMMIT TRANSACTION;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF @@TRANCOUNT>0 ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
Reference in New Issue
Block a user