236 lines
12 KiB
Transact-SQL
236 lines
12 KiB
Transact-SQL
|
|
|
|
|
|
|
|
/***************************************
|
|
* 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: 2014.03.03
|
|
*
|
|
****************************************/
|
|
CREATE PROCEDURE [BatchQueue].[stp_batch_RapQual_S02]
|
|
(
|
|
@CodMagMpNONacc NVARCHAR(50) = '6666',
|
|
@CodMagMpAcc NVARCHAR(50) = '6',
|
|
@CodStatoMpNONacc NVARCHAR(50) = 'MP-NA',
|
|
@CodStatoMpAcc NVARCHAR(50) = 'MP',
|
|
@ExecBatchInter BIT = 0 -- 0 Eseguita in Batch , 1 in Interattivo ( default x applicativo )
|
|
)
|
|
|
|
AS
|
|
|
|
SET XACT_ABORT ON;
|
|
SET NOCOUNT ON;
|
|
|
|
BEGIN TRY
|
|
-- 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
|
|
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
|
|
|
|
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;
|
|
|
|
-- 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
|
|
|
|
-- ne modifico anche lo stato
|
|
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
|
|
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
|
|
|
|
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
|
|
|
|
-- 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 AS x
|
|
LEFT OUTER JOIN RilPro.RapQual AS 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
|
|
AND r.DataRapQual > ( YEAR(GETDATE()) -1 ) * 10000 -- limito al max iniz. anno precedente
|
|
|
|
COMMIT TRAN;
|
|
END TRY
|
|
BEGIN CATCH;
|
|
|
|
IF XACT_STATE() <> 0 -- solo se vi sono transazioni aperte faccio il rollback ( da verificare nel caso sia richiamato
|
|
ROLLBACK TRANSACTION; -- all'interno di un'altra transazione )
|
|
|
|
-- Uso RAISERROR mandare in errore la procedura e x per tornare le info
|
|
-- sull'errore originale che ha portato l'esecuzione nel blocco CATCH
|
|
DECLARE @ErrorNumber INT;
|
|
DECLARE @ErrorMessage NVARCHAR(4000);
|
|
DECLARE @ErrorSeverity INT;
|
|
DECLARE @ErrorState INT;
|
|
|
|
SELECT @ErrorMessage = ERROR_MESSAGE(),@ErrorSeverity = ERROR_SEVERITY(),@ErrorState = ERROR_STATE(), @ErrorNumber = ERROR_NUMBER();
|
|
|
|
IF @ExecBatchInter = 0 -- Sollevo errore solo se richiesto dai parametri ( es. esecuzione da un Job Batch )
|
|
RAISERROR (@ErrorMessage,@ErrorSeverity,@ErrorState); -- Se non uso RAISERROR la procedura non mi da errore es. se schedulata
|
|
ELSE -- altrimenti se interattivo salvo in tabella
|
|
INSERT INTO RawData.AS400_Comandi
|
|
SELECT GETDATE(), 'stp_batch_RapQual_S02', @ErrorMessage, @ErrorNumber;
|
|
|
|
END CATCH;
|
|
|
|
RETURN
|
|
|