set xact_abort on go begin transaction go set ANSI_NULLS on go /*************************************** * STORED stp_batch_RapQual_S02 * * Esegue lo step 2 (travaso dati RAW in RilPro) per la tab dei rapporti di qualità * * Steamware, S.E.L. * mod: 2011.11.25 * ****************************************/ alter PROCEDURE BatchQueue.stp_batch_RapQual_S02 ( @CodMagMpNONacc NVARCHAR(50) = '6666', @CodMagMpAcc NVARCHAR(50) = '6', @CodStatoMpNONacc NVARCHAR(50) = 'MP-NA', @CodStatoMpAcc NVARCHAR(50) = 'MP' ) AS SET XACT_ABORT ON; SET NOCOUNT ON; -- eseguo UPSERT x tutti i dati disponibili in tab Raw... BEGIN TRAN; -- =============================================================================================== -- PRIMA DI AGGIORNARE VERIFICO SE CI SONO MODIFICHE DI MP ACCETTATA / NON ACCETTATA -- =============================================================================================== --DECLARE @CodMagMpNONacc AS VARCHAR(50) = '6666' -- Setto il Magazzino per MP NON ACCETTATA --DECLARE @CodMagMpAcc AS VARCHAR(50) = '6' -- Setto il Magazzino per MP ACCETTATA DECLARE @CellaOK AS INT DECLARE @MagAccOK AS INT DECLARE @MagNNAccOK AS INT DECLARE @CodEven AS NVARCHAR(10) = 'UDC_MPRQ'; -- =============================================================================================== -- SPOSTAMENTO DI MAGAZZINO DELLA MP che da ACCETTATA diventa NON ACCETTATA -- =============================================================================================== -- Controllo che il magazzino dest. NON ACCETTATA sia a cella singola( a terra ), attivo e non pieno SELECT @MagAccOK = COUNT(*) FROM dbo.Celle AS c INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco WHERE b.CodMag = @CodMagMpNONacc AND c.Attiva = 1 AND c.Piena = 0 IF @MagAccOK = 1 -- Se mag. NON ACCETTATA è OK BEGIN -- Vado a leggere la cella corretta SELECT @CellaOK = c.IdxCella FROM Celle AS c INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco WHERE b.CodMag = @CodMagMpNONacc AND c.Attiva = 1 AND c.Piena = 0 -- Se ci sono cartellini di materia prima che sono passati da accettati a non accettati li sposto UPDATE dbo.PosizioneUdcCorrente SET IdxCella = @CellaOK, DataRif = GETDATE() FROM dbo.PosizioneUdcCorrente AS po INNER JOIN RilPro.RapQual rq ON rq.UDC = po.UDC INNER JOIN RawData.XOGIX00F u ON u.XNRETI = rq.ProgUDC INNER JOIN dbo.ElencoCartellini AS el ON rq.UDC = el.UDC INNER JOIN Celle c ON po.IdxCella=c.IdxCella INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco WHERE ( rq.BenesQual = 'S' AND u.XBENQL = 'N' ) -- da Accettata a NON accettata AND XMATSC = 'N' -- solo Lega non ancora Scaricata AND b.CodMag <> @CodMagMpNONacc -- Che non è in Magazzino NON Accettati UPDATE dbo.ElencoCartellini SET CodStato = @CodStatoMpNONacc, CodEvento= @CodEven, ModDate = GETDATE() FROM dbo.ElencoCartellini AS el INNER JOIN RilPro.RapQual rq ON rq.UDC = el.UDC INNER JOIN RawData.XOGIX00F u ON u.XNRETI = rq.ProgUDC WHERE ( rq.BenesQual = 'S' AND u.XBENQL = 'N' ) -- da Accettata a NON accettata AND XMATSC = 'N' -- solo Lega non ancora Scaricata AND el.CodStato = @CodStatoMpAcc -- Modifico solo UDC in stato 'MP' (accettata) AND el.IdxPosizione = 6 -- Modifico solo se cartellini non scaricati Mod. 2012-05 END -- =============================================================================================== -- SPOSTAMENTO DI MAGAZZINO DELLA MP che da NON ACCETTATA diventa ACCETTATA -- =============================================================================================== -- Controllo che il magazzino dest. ACCETTATA sia a cella singola( a terra ), attivo e non pieno SELECT @MagNNAccOK = COUNT(*) FROM dbo.Celle AS c INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco WHERE b.CodMag = @CodMagMpAcc AND c.Attiva = 1 AND c.Piena = 0 IF @MagNNAccOK = 1 -- Se mag. ACCETTATA è OK BEGIN -- Vado a leggere la cella corretta SELECT @CellaOK = c.IdxCella FROM Celle AS c INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco WHERE b.CodMag = @CodMagMpAcc AND c.Attiva = 1 AND c.Piena = 0 -- Se ci sono cartellini di materia prima che sono passati da accettati a non accettati li sposto UPDATE dbo.PosizioneUdcCorrente SET IdxCella = @CellaOK, DataRif = GETDATE() FROM dbo.PosizioneUdcCorrente AS po INNER JOIN RilPro.RapQual rq ON rq.UDC = po.UDC INNER JOIN RawData.XOGIX00F u ON u.XNRETI = rq.ProgUDC INNER JOIN dbo.ElencoCartellini AS el ON rq.UDC = el.UDC INNER JOIN Celle c ON po.IdxCella=c.IdxCella INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco WHERE ( rq.BenesQual = 'N' AND u.XBENQL = 'S' ) -- da NON Accettata ad Accettata AND XMATSC = 'N' -- solo Lega non ancora Scaricata AND b.CodMag <> @CodMagMpAcc -- Modifico solo UDC in stato MP non Accettata UPDATE dbo.ElencoCartellini SET CodStato = @CodStatoMpAcc, CodEvento= @CodEven, ModDate = GETDATE() FROM dbo.ElencoCartellini AS el INNER JOIN RilPro.RapQual rq ON rq.UDC = el.UDC INNER JOIN RawData.XOGIX00F u ON u.XNRETI = rq.ProgUDC WHERE ( rq.BenesQual = 'N' AND u.XBENQL = 'S' ) -- da NON Accettata ad Accettata AND XMATSC = 'N' -- solo Lega non ancora Scaricata AND el.CodStato = @CodStatoMpNONacc -- Che ha è in stato MP NON accettata AND el.IdxPosizione = 6 -- Modifico solo se cartellini non scaricati Mod. 2012-05 END -- =============================================================================================== -- ADESSO POSSO FARE UPDATE DI RilPro.RapQual -- =============================================================================================== -- se il dato esiste faccio UPDATE!!! UPDATE RilPro.RapQual SET CodFor = RTRIM(u.XCDFOR), DestTerz = RTRIM(u.XCDTER), CodLega = RTRIM(u.XCDPAR), -- DataPrelFus = u.XDTPRO, -- TurnoPrelFus = u.XTRPRO, -- non lo aggiorno perchè in AS400 è blank nel caso di consumo verso terzista e quindi lo perderei Qta = u.XQTPRO, -- non lo aggiorno x non perdere il mio dato di scaricamento DestLega = RTRIM(u.XDESMT), LegaScaric = u.XMATSC, BenesQual = u.XBENQL FROM RilPro.RapQual rq INNER JOIN RawData.XOGIX00F u ON u.XNRETI = rq.ProgUDC; -- AND u.XRPQLN = rq.nRapQual AND u.XRPQLD = rq.DataRapQual; -- se XNRETI è univoco ... -- verifico che non ci siano cartellini scaricati in AS400 e non sul mio sistema... UPDATE RilPro.RapQual SET CodFor = RTRIM(u.XCDFOR), DestTerz = RTRIM(u.XCDTER), CodLega = RTRIM(u.XCDPAR), DataPrelFus = u.XDTPRO, TurnoPrelFus = RTRIM(u.XTRPRO), Qta = u.XQTPRO, DestLega = RTRIM(u.XDESMT), LegaScaric = u.XMATSC, BenesQual = u.XBENQL FROM RilPro.RapQual rq INNER JOIN RawData.XOGIX00F u ON u.XNRETI = rq.ProgUDC WHERE rq.DataPrelFus = 0 AND u.XDTPRO > 0; -- creo tab temporanea x i dati inesistenti... WITH cteInsert AS (SELECT x.* FROM RawData.XOGIX00F x LEFT OUTER JOIN RilPro.RapQual rq ON x.XNRETI = rq.ProgUDC -- AND u.XRPQLN = rq.nRapQual AND u.XRPQLD = rq.DataRapQual; -- se XNRETI è univoco ... WHERE rq.ProgUDC IS NULL ) -- se il dato non c'è faccio INSERT!!! INSERT INTO RilPro.RapQual(nRapQual, DataRapQual, ProgUDC, CodFor, DestTerz, CodLega, DataPrelFus, TurnoPrelFus, Qta, DestLega, LegaScaric, BenesQual) SELECT XRPQLN AS nRapQual, XRPQLD AS DataRapQual, RTRIM(XNRETI) AS ProgUDC, RTRIM(XCDFOR) AS CodFor, RTRIM(XCDTER) AS DestTerz, RTRIM(XCDPAR) AS CodLega, XDTPRO AS DataPrelFus, RTRIM(XTRPRO) AS TurnoPrelFus, XQTPRO AS Qta, RTRIM(XDESMT) AS DestLega, XMATSC AS LegaScaric, XBENQL AS BenesQual FROM cteInsert -- =============================================================================================== -- DOPO UPDATE aggiorno la QTA nei Cartellini GMW se diversi da quelli in RilPro.RapQual ( AS400 ) -- =============================================================================================== UPDATE e SET e.Qta = r.Qta ,e.PesoTot = r.Qta ,CodEvento= @CodEven ,ModDate = GETDATE() -- memorizzo la modifica -- OUTPUT deleted.* INTO dbo.ElencoCartellini_Copy -- deve essere già presente FROM RilPro.RapQual AS r INNER JOIN dbo.ElencoCartellini AS e ON e.UDC = r.UDC WHERE ( r.Qta <> e.Qta ) -- Solo se la quantità è diversa COMMIT TRAN; RETURN go commit go -- registro versione... INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(451, GETDATE()) GO