set xact_abort on go begin transaction go set ANSI_NULLS on go /***************************************** * STORED stp_DtMtrx_import * * Recupera dati Gitterbox/DataMatrix partendo leggendo dati successivi all'ultimo import e importanto in tab GMW * * Steamware, S.E.L. * mod: 2011.04.29 * ****************************************/ alter PROCEDURE stp_DtMtrx_import ( @CodCS VARCHAR(2), @IdxPosizione INT ) AS ------------------------------------------------------------------------------------------------------ -- leggo data ultimo import (o creo record...) ------------------------------------------------------------------------------------------------------ DECLARE @nomeFlusso AS NVARCHAR(50) DECLARE @lastImport AS DATETIME DECLARE @trovati AS INT -- imposto valori SET @nomeFlusso = 'DataMatrix' SET @lastImport = DATEADD(yy,-10,GETDATE()) -- inizializzo a -10 anni ... -- sistemo tab registrazione import... BEGIN TRAN -- cerco nella tab log ultima data caricamento SET @trovati = ( SELECT COUNT(*) FROM logImportFlussi WHERE NomeFlusso = @nomeFlusso ) -- controllo se record c'è... IF(@trovati > 0) BEGIN SET @lastImport = ( SELECT LastImport FROM LogImportFlussi WHERE NomeFlusso = @nomeFlusso ) END ELSE BEGIN -- lo creo! INSERT INTO LogImportFlussi(NomeFlusso, LastImport) VALUES (@nomeFlusso, @lastImport) END COMMIT TRAN ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- ora gestisco il vero caricamento... ------------------------------------------------------------------------------------------------------ -- filtro e salvo in tabella... gitterbox validi SOLO se iniziano per "U" DECLARE @newData TABLE ( CodDataMatrix numeric(23, 0) , CodGitterbox varchar(10) , NumConchiglia int , NumDisegno numeric(7, 0) , EsponenteDisegno tinyint , CodDifettoScarto varchar(5) , InizioPreparazione smalldatetime , FinePreparazione smalldatetime , InizioIniezione smalldatetime , FineIniezione smalldatetime , MagDestinazione varchar(2) , DataImport smalldatetime ) INSERT INTO @newData SELECT CodDataMatrix, LTRIM(RTRIM(CodGitterbox)), NumConchiglia, NumDisegno, EsponenteDisegno, CodDifettoScarto, InizioPreparazione, FinePreparazione, InizioIniezione, FineIniezione, MagDestinazione, DataImport FROM v_trasfDataMatrix WHERE DataImport > @lastImport AND LEFT(CodGitterbox, 1) = 'U' AND CodDifettoScarto = '00' -- non importerò gli scarti!!! -- creo UDC da gitterbox nuovi INSERT INTO ElencoCartellini(UDC, Particolare, DataFus, Qta) SELECT DISTINCT nd.CodGitterbox, null, MIN(InizioIniezione), dbo.getNumDatamatrix(nd.CodGitterbox) FROM @newData nd LEFT OUTER JOIN ElencoCartellini ec ON nd.CodGitterbox = ec.UDC WHERE ec.UDC IS NULL GROUP BY nd.CodGitterbox DECLARE @udc NVARCHAR(50) DECLARE @Particolare NVARCHAR(50) DECLARE @NumDisegno NVARCHAR(50) DECLARE @EsponenteDisegno NVARCHAR(50) DECLARE @IdxCellaTo INT DECLARE @adesso DATETIME DECLARE @posTrovate INT SET @adesso = GETDATE() SET @posTrovate = 0 DECLARE cursoreImport CURSOR FOR SELECT nd.CodGitterbox, tp.Particolare, tp.NumDisegno, tp.EsponenteDisegno FROM @newData nd INNER JOIN v_transcParticolari tp ON nd.NumDisegno = tp.NumDisegno AND nd.EsponenteDisegno = tp.EsponenteDisegno OPEN cursoreImport FETCH NEXT FROM cursoreImport INTO @udc, @Particolare, @NumDisegno, @EsponenteDisegno WHILE @@FETCH_STATUS = 0 BEGIN -- aggiorno gli UDC gitterbox esistenti per quantità tra quelli dei dati da importare... UPDATE ElencoCartellini SET CodCS = @CodCS, IdxPosizione = @IdxPosizione, CreateDate = @adesso, Particolare = @Particolare, DisegnoGrezzo = @NumDisegno, Esponente = @EsponenteDisegno, Figura = '', CodImballo = '', Tara = 0, PesoTot = 0, PesoCad = 0, CodStato = 'Fin', NumCont = 1, TurnoFus = 0, ModDate = @adesso WHERE UDC = @udc -- indico cella UDC corrente... calcolo la prima cella della nuova posizione... SET @IdxCellaTo = ( SELECT dbo.f_getCellaByPos(CAST(@IdxPosizione AS NVARCHAR(50))) ) /*( SELECT TOP 1 IdxCella FROM Celle WHERE IdxBlocco = ( SELECT IdxBlocco FROM Blocchi WHERE CodMag=CAST(@IdxPosizione AS NVARCHAR(50))) )*/ -- controllo se posizione non ancora creata... SET @posTrovate = ( SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE UDC = @udc ) IF( @posTrovate =0) BEGIN INSERT INTO PosizioneUdcCorrente VALUES (@udc, @IdxCellaTo, @CodCS, @adesso) END FETCH NEXT FROM cursoreImport INTO @udc, @Particolare, @NumDisegno, @EsponenteDisegno END CLOSE cursoreImport DEALLOCATE cursoreImport -- inserisco datamatrix da ultimo import INSERT INTO ElencoDataMatrix SELECT * FROM @newData -- aggiorno dati ultimo caricamento SET @lastImport = ( SELECT ISNULL(MAX(DataImport),@lastImport) FROM @newData ) UPDATE LogImportFlussi SET LastImport = @lastImport WHERE NomeFlusso = @nomeFlusso RETURN go commit go update Delibere set UDC=LTRIM(RTRIM(udc)) go -- disabilita triggers su db DISABLE TRIGGER ALL ON DATABASE go update ElencoCartellini set UDC=LTRIM(RTRIM(udc)) go UPDATE ElencoDataMatrix set CodGitterbox=LTRIM(RTRIM(CodGitterbox)) go UPDATE Odette SET CampoUDC=LTRIM(RTRIM(CampoUDC)) go UPDATE Odette_storico SET CampoUDC=LTRIM(RTRIM(CampoUDC)) go UPDATE PosizioneUdcStorico SET UDC=LTRIM(RTRIM(UDC)) go -- ESEGUE UPDATE PosizioneUdcCorrente SET UDC=LTRIM(RTRIM(UDC)) go UPDATE RelazUDC SET UDC_child=LTRIM(RTRIM(UDC_child)), UDC_parent=LTRIM(RTRIM(UDC_parent)) go UPDATE RigheListePrelievo_storico SET UDC=LTRIM(RTRIM(UDC)) go -- ESEGUE UPDATE RigheListePrelievo SET UDC=LTRIM(RTRIM(UDC)) go UPDATE StoricoCartellini SET UDC=LTRIM(RTRIM(UDC)) go ENABLE TRIGGER ALL ON DATABASE go -- registro versione... INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(392, GETDATE()) GO