set xact_abort on go begin transaction go set ANSI_NULLS on go /*************************************** * STORED stp_scaricaUdc * * elimina dalle posizioni correnti un UDC, salvandone la posizione precedente nella tab storica (per scaricamento / spedizione) * * Steamware, S.E.L. * mod: 2010.09.28 * ****************************************/ alter PROCEDURE stp_scaricaUdc ( @UDC VARCHAR(50), @IdxCellaFrom INT, @IdxPosizione INT ) AS BEGIN TRAN -- libero la posizione attuale dell'UDC (se c'è...) DELETE FROM PosizioneUdcCorrente WHERE UDC = @UDC AND IdxCella = @IdxCellaFrom -- aggiorno l'UDC come posizione finale... UPDATE ElencoCartellini SET IdxPosizione = @IdxPosizione, ModDate = GETDATE() WHERE UDC = @UDC COMMIT TRAN RETURN go commit go set xact_abort on go begin transaction go set ANSI_NULLS on go /*************************************** * STORED stp_UDC_delibera * * fa la delibera dell'UDC andando a processare la state machien e quindi eventualmente cambiando la sua posizione * * Steamware, S.E.L. * mod: 2010.09.13 * ************************************/ alter PROCEDURE stp_UDC_delibera ( @CodTipoDelibera NVARCHAR(50), @UDC NVARCHAR(50), @CodSoggetto NVARCHAR(17), @CodCS VARCHAR(2) ) AS BEGIN TRAN DECLARE @IdxPosizioneTo AS INT DECLARE @IdxPosizioneFrom AS INT DECLARE @IdxPosizionePre AS NVARCHAR(50) DECLARE @IdxCellaPre AS INT DECLARE @IdxCellaTo AS INT -- ricavo cella ATTUALE SET @IdxCellaPre = (SELECT IdxCella FROM PosizioneUdcCorrente WHERE UDC = @UDC) -- ricavo posizione ATTUALE SET @IdxPosizionePre = (SELECT TOP 1 b.CodMag FROM Celle c INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco WHERE c.IdxCella = @IdxCellaPre) -- registro delibera INSERT INTO DELIBERE VALUES (@CodTipoDelibera, @UDC, GETDATE(), @CodSoggetto) -- ricavo nuova posizione SET @IdxPosizioneTo = (SELECT tt.IdxPosizioneTo FROM TabTranPosizEventi tt INNER JOIN AnagTipoDelibere atd ON tt.CodEvento = atd.CodEvento WHERE (atd.CodTipoDelibera = @CodTipoDelibera)) -- ricavo posizione TEORICA VECCHIA SET @IdxPosizioneFrom = (SELECT tt.IdxPosizione FROM TabTranPosizEventi tt INNER JOIN AnagTipoDelibere atd ON tt.CodEvento = atd.CodEvento WHERE (atd.CodTipoDelibera = @CodTipoDelibera)) -- calcolo la prima cella della nuova posizione... SET @IdxCellaTo = ( SELECT TOP 1 IdxCella FROM Celle WHERE IdxBlocco = ( SELECT IdxBlocco FROM Blocchi WHERE CodMag=CAST(@IdxPosizioneTo AS NVARCHAR(50))) ) -- faccio update posizione UPDATE ElencoCartellini SET IdxPosizione = @IdxPosizioneTo, ModDate = GETDATE() WHERE UDC = @UDC -- controllo posizioni actual e from teorica: SE e SOLO SE corrispondono faccio spostamento... IF(CAST(@IdxPosizioneFrom AS NVARCHAR(50)) = @IdxPosizionePre) BEGIN -- ora cambio anche la posizione corrente dell'UDC (e tramite trigger storicizza...) EXEC stp_spostaUdc @CodCS, @UDC, @IdxCellaTo END COMMIT TRAN RETURN go commit go set xact_abort on go begin transaction go set ANSI_NULLS on go /*************************************** * STORED stp_ParticolariOverview * * elenco di overview sull'impiego dei particolari (dettaglio a "maglie larghe") * * Steamware, S.E.L. * mod: 2010.05.31 * ****************************************/ alter PROCEDURE stp_ParticolariOverview ( @searchVal VARCHAR(50), @CodCS VARCHAR(2) ) AS SELECT RilPro.AnagParticolari.Particolare, RilPro.AnagParticolari.DescParticolare, ISNULL(COUNT(dbo.ElencoCartellini.UDC), 0) AS NumUDC, ISNULL(SUM(dbo.ElencoCartellini.Qta), 0) AS TotQta, ISNULL(COUNT(dbo.PosizioneUdcCorrente.IdxCella), 0) AS NumInMag FROM RilPro.AnagParticolari LEFT OUTER JOIN dbo.ElencoCartellini ON RilPro.AnagParticolari.Particolare = dbo.ElencoCartellini.Particolare LEFT OUTER JOIN dbo.PosizioneUdcCorrente ON dbo.ElencoCartellini.UDC = dbo.PosizioneUdcCorrente.UDC WHERE RilPro.AnagParticolari.CodCS = @CodCS AND RilPro.AnagParticolari.Particolare = @searchVal AND ElencoCartellini.IdxPosizione >= 0 -- vincolo posizioni mag attive GROUP BY RilPro.AnagParticolari.Particolare, RilPro.AnagParticolari.DescParticolare RETURN go /*************************************** * STORED stp_ParticolariOverviewLike * * elenco di overview sull'impiego dei particolari (dettaglio a "maglie larghe") - modalità LIKE * * Steamware, S.E.L. * mod: 2010.05.31 * ****************************************/ alter PROCEDURE stp_ParticolariOverviewLike ( @searchVal VARCHAR(50), @CodCS VARCHAR(2) ) AS SELECT RilPro.AnagParticolari.Particolare, RilPro.AnagParticolari.DescParticolare, ISNULL(COUNT(ElencoCartellini.UDC), 0) AS NumUDC, SUM(ISNULL(ElencoCartellini.Qta, 0)) AS TotQta, ISNULL(COUNT(PosizioneUdcCorrente.IdxCella), 0) AS NumInMag FROM RilPro.AnagParticolari LEFT OUTER JOIN ElencoCartellini ON RilPro.AnagParticolari.Particolare = ElencoCartellini.Particolare LEFT OUTER JOIN PosizioneUdcCorrente ON ElencoCartellini.UDC = PosizioneUdcCorrente.UDC WHERE (RilPro.AnagParticolari.CodCS = @CodCS) AND ((RilPro.AnagParticolari.Particolare LIKE '%' + @searchVal + '%') OR (RilPro.AnagParticolari.DescParticolare LIKE '%' + @searchVal + '%')) AND ElencoCartellini.IdxPosizione >= 0 -- vincolo posizioni mag attive GROUP BY RilPro.AnagParticolari.Particolare, RilPro.AnagParticolari.DescParticolare RETURN go commit go set xact_abort on go begin transaction go set ANSI_NULLS on go /*************************************** * STORED stp_paretoDettMagByParticolare * * restituisce elenco giacenze a magazzino in logica pareto (quantità) per un dato particolare * * Steamware, S.E.L. * mod: 2010.06.04 * ****************************************/ alter PROCEDURE stp_paretoDettMagByParticolare ( @CodCS VARCHAR(2), @Particolare VARCHAR(20) ) AS SELECT TOP (100) PERCENT am.CodCS, am.CodMag, am.DescMag, b.IdxBlocco, b.CodBlocco, ec.Particolare, ec.Esponente, COUNT(puc.UDC) AS NumUDC, ISNULL(MIN(puc.DataRif), GETDATE()) AS Oldest, ISNULL(MAX(puc.DataRif), GETDATE()) AS Newest, SUM(ec.Qta) AS QtaTotPz, asp.DescStato, ec.IdxPosizione AS CodMagLog FROM AnagMag am INNER JOIN Blocchi b ON am.CodMag = b.CodMag AND am.CodCS = b.CodCS INNER JOIN Celle c INNER JOIN ElencoCartellini ec LEFT OUTER JOIN PosizioneUdcCorrente puc ON ec.UDC = puc.UDC ON c.IdxCella = puc.IdxCella ON b.IdxBlocco = c.IdxBlocco INNER JOIN AnagStatiProdotto asp ON ec.CodStato = asp.CodStato WHERE (c.Attiva = 1) AND (am.CodCS = @CodCS) AND (ec.Particolare = @Particolare) GROUP BY am.CodCS, am.CodMag, am.DescMag, b.IdxBlocco, b.CodBlocco, b.NumX, b.NumY, b.NumZ, ec.Particolare, ec.Esponente, ec.IdxPosizione, asp.DescStato ORDER BY QtaTotPz DESC RETURN go commit go set xact_abort on go begin transaction go set ANSI_NULLS on go /*************************************** * STORED stp_spostaUdc * * sposta un UDC, salvandone la posizione precedente (se esiste) nella tab storica * * Steamware, S.E.L. * mod: 2010.06.11 * ****************************************/ alter PROCEDURE stp_spostaUdc ( @CodCS VARCHAR(2), @UDC VARCHAR(50), @IdxCellaTo INT ) AS BEGIN TRAN -- DICHIARAZIONI iniziali variabili DECLARE @IdxCellaFrom INT DECLARE @capienza INT DECLARE @numUdc INT -- controllo cella di partenza SET @IdxCellaFrom = (SELECT IdxCella FROM PosizioneUdcCorrente WHERE UDC = @UDC) -- controllo se la cella di dest vada indicata come piena SET @capienza = ( SELECT tc.Capienza FROM TipoCella TC INNER JOIN Celle c ON TC.IdxTipoCella=c.IdxTipoCella WHERE c.IdxCella = @IdxCellaFrom ) SET @numUdc = (SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE IdxCella = @IdxCellaFrom) -- se capienza raggiunta aggiorno... IF(@numUdc -1 < @capienza) BEGIN EXEC stp_celle_updPiena @IdxCellaFrom, 0 END -- cancello posizione occupata DELETE FROM PosizioneUdcCorrente WHERE UDC = @UDC -- cancello eventuali righe liste di prelievo FUSI per l'UDC DELETE FROM RigheListePrelievo WHERE UDC = @UDC AND CodLista IN ( SELECT CodLista FROM ElencoListePrelievo WHERE CodTipoLista='01-PreFus' ) -- creo una nuova posizione per l'UDC INSERT INTO PosizioneUdcCorrente(UDC, IdxCella, CodCS, DataRif) VALUES(@UDC, @IdxCellaTo, @CodCS, GETDATE()) -- controllo se la cella di dest vada indicata come piena SET @capienza = ( SELECT tc.Capienza FROM TipoCella TC INNER JOIN Celle c ON TC.IdxTipoCella=c.IdxTipoCella WHERE c.IdxCella = @IdxCellaTo ) SET @numUdc = (SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE IdxCella = @IdxCellaTo) -- se capienza raggiunta aggiorno... IF(@numUdc >= @capienza) BEGIN EXEC stp_celle_updPiena @IdxCellaTo, 1 END COMMIT TRAN RETURN go commit go set xact_abort on go begin transaction go DELETE FROM dbo.TabTranPosizEventi WHERE CodEvento=N'UDC_RIEN' and IdxPosizione=88 go commit transaction go set xact_abort on go begin transaction go INSERT INTO dbo.AnagTipoEvento VALUES (N'UDC_RIEN54', N'Rientro UDC da 88 a 54') INSERT INTO dbo.AnagTipoEvento VALUES (N'UDC_RIEN84', N'Rientro UDC da 88 a 84') DELETE FROM dbo.AnagTipoEvento WHERE CodEvento=N'UDC_RIEN' go commit transaction go set xact_abort on go begin transaction go INSERT INTO dbo.TabTranPosizEventi VALUES (N'UDC_RIEN54', 88, 54, 1) INSERT INTO dbo.TabTranPosizEventi VALUES (N'UDC_RIEN84', 88, 84, 1) go commit transaction go set xact_abort on go begin transaction go set ANSI_NULLS on go /*************************************** * STORED stp_spostaUdc * * sposta un UDC, salvandone la posizione precedente (se esiste) nella tab storica * * Steamware, S.E.L. * mod: 2010.06.11 * ****************************************/ alter PROCEDURE stp_spostaUdc ( @CodCS VARCHAR(2), @UDC VARCHAR(50), @IdxCellaTo INT, @resetRLP BIT ) AS BEGIN TRAN -- DICHIARAZIONI iniziali variabili DECLARE @IdxCellaFrom INT DECLARE @capienza INT DECLARE @numUdc INT -- controllo cella di partenza SET @IdxCellaFrom = (SELECT IdxCella FROM PosizioneUdcCorrente WHERE UDC = @UDC) -- controllo se la cella di dest vada indicata come piena SET @capienza = ( SELECT tc.Capienza FROM TipoCella TC INNER JOIN Celle c ON TC.IdxTipoCella=c.IdxTipoCella WHERE c.IdxCella = @IdxCellaFrom ) SET @numUdc = (SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE IdxCella = @IdxCellaFrom) -- se capienza raggiunta aggiorno... IF(@numUdc -1 < @capienza) BEGIN EXEC stp_celle_updPiena @IdxCellaFrom, 0 END -- cancello posizione occupata DELETE FROM PosizioneUdcCorrente WHERE UDC = @UDC -- SE RICHIESTO cancello eventuali righe liste di prelievo FUSI per l'UDC IF(@resetRLP = 1) BEGIN DELETE FROM RigheListePrelievo WHERE UDC = @UDC AND CodLista IN ( SELECT CodLista FROM ElencoListePrelievo WHERE CodTipoLista='01-PreFus' ) END -- creo una nuova posizione per l'UDC INSERT INTO PosizioneUdcCorrente(UDC, IdxCella, CodCS, DataRif) VALUES(@UDC, @IdxCellaTo, @CodCS, GETDATE()) -- controllo se la cella di dest vada indicata come piena SET @capienza = ( SELECT tc.Capienza FROM TipoCella TC INNER JOIN Celle c ON TC.IdxTipoCella=c.IdxTipoCella WHERE c.IdxCella = @IdxCellaTo ) SET @numUdc = (SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE IdxCella = @IdxCellaTo) -- se capienza raggiunta aggiorno... IF(@numUdc >= @capienza) BEGIN EXEC stp_celle_updPiena @IdxCellaTo, 1 END COMMIT TRAN RETURN go commit go set xact_abort on go begin transaction go set ANSI_NULLS on go /*************************************** * STORED stp_annullaUDC * * annulla un UDC * * Steamware, S.E.L. * mod: 2010.04.28 * ****************************************/ alter PROCEDURE stp_annullaUDC ( @UDC VARCHAR(20), @CodSoggetto VARCHAR(17) ) AS BEGIN TRAN -- faccio update UPDATE ElencoCartellini SET IdxPosizione = 0, ModDate = GETDATE() WHERE UDC = @UDC COMMIT TRAN RETURN go commit go -- registro versione... INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(335, GETDATE()) GO