Freeze 2.0 warehouse monolista e documento fisso F1/F2

This commit is contained in:
2026-10-02 10:09:44 +02:00
parent 3a2893dc3d
commit a60610c03e
10 changed files with 1019 additions and 20 deletions

View 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;