/***************************************************** * STORED sstp_processaCodaMovimMag * * Processa la coda dei movimenti di magazzino e chiama procedura x salvataggio dato su AS400 * * Steamware, S.E.L. * mod: 2013.11.22 * ****************************************/ CREATE PROCEDURE BatchQueue.stp_processaCodaMovimMag AS -- VERIFICARE A CURA MAZZUCCONI!!! -- campi variabili "globali" DECLARE @IdxBatch INT DECLARE @CodSoggetto NVARCHAR(17) DECLARE @CodMovCarico CHAR(2) DECLARE @CodMovScarico CHAR(2) -- campi x cursore e valorizzazione riga a riga DECLARE @Particolare NVARCHAR(15) DECLARE @Causale NVARCHAR(2) DECLARE @CodMag NVARCHAR(50) DECLARE @Qta INT DECLARE @Data NVARCHAR(8) DECLARE @RIFFO NVARCHAR(8) -- faccio una query con un cursore x processare tutte le righe da inviare ad AS400.. --DECLARE RigaMovMag CURSOR LOCAL FOR -- SELECT TOP 2000 IdxBatch FROM dbo.AS400_BatchMovimenti WHERE DataBatch IS NULL -- limito a 2000 i movimenti da passare -- modifica per cambio anagrafica ( blocco i movimenti con particolare vecchio ) IF GETDATE() >= '20140101' -- 22/11/2013 Hard Coded x Modifica Anagrafica Articoli DECLARE RigaMovMag CURSOR LOCAL FOR SELECT TOP 2000 IdxBatch FROM dbo.AS400_BatchMovimenti WHERE DataBatch IS NULL -- limito a 2000 i movimenti da passare AND LEFT(Particolare ,1) <> 'P' -- Hard Coded 22/11/2013 non passo movimenti con codice vecchio AND LEFT(Particolare ,1) <> 'A' -- Hard Coded 31/01/2014 non passo movimenti con codice anime vecchio ORDER BY DataIns ELSE DECLARE RigaMovMag CURSOR LOCAL FOR SELECT TOP 2000 IdxBatch FROM dbo.AS400_BatchMovimenti WHERE DataBatch IS NULL -- limito a 2000 i movimenti da passare ORDER BY DataIns -- utente da inviare ad AS... VERIFICARE!!! su AS400 è un Char(10) SET @CodSoggetto = 'UTENTEGMW2' -- carico i 2 valori di default di carico e scarico da AS400 SET @CodMovCarico = (SELECT CauCarico FROM RilPro.AnagCausaliMag WHERE CodElemento = '0001') SET @CodMovScarico = (SELECT CauScarico FROM RilPro.AnagCausaliMag WHERE CodElemento = '0001') -- inizio cursore! OPEN RigaMovMag FETCH NEXT FROM RigaMovMag INTO @IdxBatch WHILE @@FETCH_STATUS = 0 BEGIN -- controllo ci sia la riga IF (SELECT COUNT(IdxBatch) FROM dbo.AS400_BatchMovimenti WHERE IdxBatch = @IdxBatch) > 0 BEGIN /* OLD VERSION SELECT @Particolare=bm.Particolare, @Causale=CASE WHEN bm.Quantita>0 THEN @CodMovCarico ELSE @CodMovScarico END, @CodMag=bm.CodMagAS, @Qta = ABS(bm.Quantita), @Data=dbo.dateToAsFormat(bm.DataIns), -- mod. 09/06/2012 @RIFFO=RIGHT( (CONVERT(NVARCHAR(20),bm.IdxBatch)) , 8 ) -- mod. 09/06/2012 */ -- carico valori che mi servono -- Lo scarico Anime esterne usa la causale P3 per poterle distinguerle in AS400 ( richiesta da TEKAL ) x il carico -- non serve visto che non viene mai fatto vs AS400 x le anime esterne SELECT @Particolare = bm.Particolare, @Causale = CASE WHEN bm.Quantita < 0 AND (gm.CodStatoTo='AnimExt' OR gm.CodStatoFrom='AnimExt') THEN 'P3' -- Hard Coded 11/06/2013 WHEN bm.Quantita > 0 THEN @CodMovCarico ELSE @CodMovScarico END, @CodMag = bm.CodMagAS, @Qta = ABS(bm.Quantita), @Data = dbo.dateToAsFormat(bm.DataIns), -- mod. 09/06/2012 @RIFFO = RIGHT( (CONVERT(NVARCHAR(20),bm.IdxBatch)) , 8 ) -- mod. 09/06/2012 -- @Data=dbo.dateToAsFormat(GETDATE()), -- @RIFFO=dbo.getUdcComp(bm.UDC,8) FROM dbo.AS400_BatchMovimenti AS bm INNER JOIN dbo.GiornaleMagazzino AS gm ON bm.numOp = gm.numOp WHERE IdxBatch = @IdxBatch -- Eseguo la stored che registra i movimenti magazzino DECLARE @ScritturaASOK AS INT EXECUTE @ScritturaASOK = BatchQueue.stp_registraMovMag @CodSoggetto, @Causale, @Particolare, @CodMag, @Qta, @Data, @RIFFO -- registro la data del movimento BATCH solo se la stp verso AS400 è Ok IF @ScritturaASOK = 0 UPDATE dbo.AS400_BatchMovimenti SET DataBatch = GETDATE() WHERE IdxBatch = @IdxBatch FETCH NEXT FROM RigaMovMag INTO @IdxBatch END END CLOSE RigaMovMag DEALLOCATE RigaMovMag RETURN