/* 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;