Aggiungi sequenza prelievo e gestisci destinazioni senza nazione
This commit is contained in:
@@ -16,6 +16,14 @@ Include:
|
||||
- dbo.py_vPreparaPackingList
|
||||
- dbo.py_XMag_ViewPackingListStorico
|
||||
- dbo.py_BarcodePickingListSkip
|
||||
- dbo.py_PickingListPrelievoSequenza
|
||||
- dbo.py_ViewPackingListPrelievo
|
||||
|
||||
Include inoltre:
|
||||
- intervallo operativo massimo di 30 giorni, filtrato dalla UI a 10/15/20/30;
|
||||
- destinazione senza nazione ammessa nel ramo Python mediante LEFT JOIN;
|
||||
- ordine predefinito con UDC Non scaff. prima degli scaffali;
|
||||
- ordine personalizzabile per singolo Documento.
|
||||
|
||||
Nota storico:
|
||||
dbo.py_vPreparaPackingListSAMA1 usa ANNDOC >= YEAR(GETDATE())
|
||||
@@ -362,8 +370,8 @@ SELECT
|
||||
SAMA1.dbo.NAZIONI.CODICE AS Expr1,
|
||||
SAMA1.dbo.MTRASP.CODICE + ' ' + SAMA1.dbo.NAZIONI.DESCR AS NAZIONE,
|
||||
SAMA1.dbo.BAMTES.IDMTRASP
|
||||
FROM SAMA1.dbo.NAZIONI
|
||||
INNER JOIN SAMA1.dbo.BAMTES
|
||||
FROM SAMA1.dbo.BAMTES
|
||||
LEFT OUTER JOIN SAMA1.dbo.NAZIONI
|
||||
ON SAMA1.dbo.NAZIONI.ID = SAMA1.dbo.BAMTES.IDNAZDEST
|
||||
RIGHT OUTER JOIN SAMA1.dbo.LOTTIBF
|
||||
LEFT OUTER JOIN SAMA1.dbo.LOTSER
|
||||
@@ -527,5 +535,191 @@ BEGIN
|
||||
END;
|
||||
GO
|
||||
|
||||
/* ============================================================
|
||||
6. Intervallo operativo 30 giorni e sequenza di prelievo
|
||||
|
||||
La vista di preparazione Python creata al punto 4 contiene sia P sia D.
|
||||
Qui il ramo operativo viene ristretto alle sole liste P degli ultimi 30
|
||||
giorni; la UI applica successivamente il valore scelto (10/15/20/30).
|
||||
============================================================ */
|
||||
|
||||
CREATE OR ALTER VIEW dbo.py_XMag_ViewPackingList
|
||||
AS
|
||||
SELECT TOP (10000)
|
||||
prep.UDC AS Pallet,
|
||||
prep.NUMLOT AS Lotto,
|
||||
prep.CODICE AS Articolo,
|
||||
prep.DESCR AS Descrizione,
|
||||
prep.Qta,
|
||||
prep.NUMDOC AS Documento,
|
||||
prep.DATDOC AS DataDocumento,
|
||||
prep.Expr1 AS CodNazione,
|
||||
prep.NAZIONE,
|
||||
CASE
|
||||
WHEN prep.Expr1 = 'DE' THEN 10
|
||||
WHEN prep.Expr1 = 'TH' THEN
|
||||
CASE WHEN SUBSTRING(prep.DESCRDEST, 1, 2) = 'NA' THEN 11 ELSE 13 END
|
||||
WHEN prep.Expr1 = 'MEX' THEN 12
|
||||
ELSE 4
|
||||
END AS Stato,
|
||||
ISNULL(g.NumeroPallet, 0) AS PalletCella,
|
||||
ISNULL(g.IDMagazzino, 1) AS Magazzino,
|
||||
ISNULL(g.IDArea, 5) AS Area,
|
||||
ISNULL(g.IDCella, 1000) AS Cella,
|
||||
ISNULL(c.Ordinamento, 99999) AS Ordinamento,
|
||||
ISNULL(c.Corsia + ' - ' + c.Colonna + ' - ' + c.Fila, 'Non scaff.') AS Ubicazione,
|
||||
SUBSTRING(prep.DESCRDEST, 1, 2) AS DEST,
|
||||
CASE
|
||||
WHEN MAX(CASE
|
||||
WHEN pr.Documento IS NOT NULL
|
||||
AND pr.Documento = CAST(prep.NUMDOC AS varchar(8))
|
||||
THEN 1 ELSE 0 END) = 1
|
||||
THEN 1
|
||||
ELSE 0
|
||||
END AS IDStato
|
||||
FROM dbo.Celle AS c
|
||||
INNER JOIN dbo.XMag_GiacenzaPallet AS g
|
||||
ON c.ID = g.IDCella
|
||||
RIGHT OUTER JOIN dbo.py_vPreparaPackingList AS prep
|
||||
ON g.BarcodePallet COLLATE SQL_Latin1_General_CP1_CI_AS = prep.UDC
|
||||
LEFT JOIN dbo.PyPickingListReservation AS pr
|
||||
ON pr.ID = 1
|
||||
AND NULLIF(LTRIM(RTRIM(pr.Documento)), '') IS NOT NULL
|
||||
WHERE prep.StatoDocumento = 'P'
|
||||
AND prep.DATDOC > CAST((GETDATE() - 30) AS int)
|
||||
GROUP BY
|
||||
prep.Expr1,
|
||||
prep.NAZIONE,
|
||||
prep.UDC,
|
||||
prep.NUMDOC,
|
||||
prep.DATDOC,
|
||||
prep.NUMLOT,
|
||||
prep.CODICE,
|
||||
prep.DESCR,
|
||||
prep.Qta,
|
||||
g.NumeroPallet,
|
||||
g.IDMagazzino,
|
||||
g.IDArea,
|
||||
g.IDCella,
|
||||
c.Ordinamento,
|
||||
c.Corsia,
|
||||
c.Colonna,
|
||||
c.Fila,
|
||||
prep.DESCRDEST;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER VIEW dbo.py_ViewPackingListRestante
|
||||
AS
|
||||
SELECT
|
||||
Pallet, Lotto, Articolo, Descrizione, Qta, Documento, DataDocumento,
|
||||
CodNazione, NAZIONE, Stato, PalletCella, Magazzino, Area, Cella,
|
||||
Ordinamento, Ubicazione, DEST, IDStato
|
||||
FROM dbo.py_XMag_ViewPackingList
|
||||
WHERE Cella <> 9999;
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.py_PickingListPrelievoSequenza', N'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.py_PickingListPrelievoSequenza (
|
||||
ID bigint IDENTITY(1,1) NOT NULL
|
||||
CONSTRAINT PK_py_PickingListPrelievoSequenza PRIMARY KEY,
|
||||
Documento varchar(50) NOT NULL,
|
||||
GruppoChiave varchar(160) NOT NULL,
|
||||
GruppoEtichetta varchar(100) NOT NULL,
|
||||
Ordine int NOT NULL,
|
||||
InsUtente varchar(50) NULL,
|
||||
InsDataOra datetime2(0) NOT NULL
|
||||
CONSTRAINT DF_py_PickingListPrelievoSequenza_InsDataOra DEFAULT SYSDATETIME(),
|
||||
ModUtente varchar(50) NULL,
|
||||
ModDataOra datetime2(0) NULL,
|
||||
DelUtente varchar(50) NULL,
|
||||
DelDataOra datetime2(0) NULL,
|
||||
CONSTRAINT CK_py_PickingListPrelievoSequenza_Ordine CHECK (Ordine >= 0)
|
||||
);
|
||||
END;
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID(N'dbo.py_PickingListPrelievoSequenza', N'U')
|
||||
AND name = N'UX_py_PickingListPrelievoSequenza_DocGruppo'
|
||||
)
|
||||
BEGIN
|
||||
CREATE UNIQUE INDEX UX_py_PickingListPrelievoSequenza_DocGruppo
|
||||
ON dbo.py_PickingListPrelievoSequenza (Documento, GruppoChiave)
|
||||
WHERE DelDataOra IS NULL;
|
||||
END;
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID(N'dbo.py_PickingListPrelievoSequenza', N'U')
|
||||
AND name = N'UX_py_PickingListPrelievoSequenza_DocOrdine'
|
||||
)
|
||||
BEGIN
|
||||
CREATE UNIQUE INDEX UX_py_PickingListPrelievoSequenza_DocOrdine
|
||||
ON dbo.py_PickingListPrelievoSequenza (Documento, Ordine)
|
||||
WHERE DelDataOra IS NULL;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER VIEW dbo.py_ViewPackingListPrelievo
|
||||
AS
|
||||
WITH Gruppi AS (
|
||||
SELECT
|
||||
pl.*,
|
||||
CASE
|
||||
WHEN pl.Cella = 1000 THEN 'NON_SCAFF'
|
||||
ELSE CONCAT(
|
||||
'M:', pl.Magazzino, '|A:', pl.Area, '|C:',
|
||||
LTRIM(RTRIM(CASE
|
||||
WHEN CHARINDEX(' - ', pl.Ubicazione) > 0
|
||||
THEN LEFT(pl.Ubicazione, CHARINDEX(' - ', pl.Ubicazione) - 1)
|
||||
ELSE pl.Ubicazione
|
||||
END))
|
||||
)
|
||||
END AS GruppoPrelievoChiave,
|
||||
CASE
|
||||
WHEN pl.Cella = 1000 THEN 'Non scaff.'
|
||||
ELSE LTRIM(RTRIM(CASE
|
||||
WHEN CHARINDEX(' - ', pl.Ubicazione) > 0
|
||||
THEN LEFT(pl.Ubicazione, CHARINDEX(' - ', pl.Ubicazione) - 1)
|
||||
ELSE pl.Ubicazione
|
||||
END))
|
||||
END AS GruppoPrelievo,
|
||||
CASE
|
||||
WHEN pl.Cella = 1000 THEN 0
|
||||
ELSE 1000 + ISNULL(pl.Ordinamento, 99999)
|
||||
END AS OrdineGruppoDefault
|
||||
FROM dbo.py_ViewPackingListRestante AS pl
|
||||
), Sequenza AS (
|
||||
SELECT
|
||||
g.*,
|
||||
s.Ordine AS OrdineGruppoConfigurato,
|
||||
CASE WHEN EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.py_PickingListPrelievoSequenza AS any_s
|
||||
WHERE any_s.Documento COLLATE Latin1_General_CI_AS =
|
||||
CAST(g.Documento AS varchar(50)) COLLATE Latin1_General_CI_AS
|
||||
AND any_s.DelDataOra IS NULL
|
||||
) THEN 1 ELSE 0 END AS HaSequenzaPersonalizzata
|
||||
FROM Gruppi AS g
|
||||
LEFT JOIN dbo.py_PickingListPrelievoSequenza AS s
|
||||
ON s.Documento COLLATE Latin1_General_CI_AS =
|
||||
CAST(g.Documento AS varchar(50)) COLLATE Latin1_General_CI_AS
|
||||
AND s.GruppoChiave COLLATE Latin1_General_CI_AS =
|
||||
g.GruppoPrelievoChiave COLLATE Latin1_General_CI_AS
|
||||
AND s.DelDataOra IS NULL
|
||||
)
|
||||
SELECT
|
||||
Sequenza.*,
|
||||
CASE
|
||||
WHEN OrdineGruppoConfigurato IS NOT NULL THEN OrdineGruppoConfigurato
|
||||
WHEN HaSequenzaPersonalizzata = 1 THEN 100000 + OrdineGruppoDefault
|
||||
ELSE OrdineGruppoDefault
|
||||
END AS OrdinePrelievoGruppo
|
||||
FROM Sequenza;
|
||||
GO
|
||||
|
||||
PRINT 'Patch cumulativa Python WMS completata.';
|
||||
GO
|
||||
|
||||
Reference in New Issue
Block a user