set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /*************************************** * STORED stp_getUdcDetailFullCode_storico * * ottiene ULTIM dati UDC DA STORICO con i dati significativi partendo da un codice UDC COMPLETO * * Steamware, S.E.L. * mod: 2012.10.01 * ****************************************/ create PROCEDURE stp_getUdcDetailFullCode_storico ( @DataOraFrom DATETIME, @DataOraTo DATETIME, @UDC NVARCHAR(50), @CodCS NVARCHAR(2) ) AS WITH myCTE AS ( SELECT TOP 1 * FROM StoricoCartellini WHERE DataEv BETWEEN @DataOraFrom AND @DataOraTo AND UDC = @UDC ORDER BY DataEv DESC ) SELECT stc.UDC, ISNULL(stc.RagSociale, N'nd') AS RagSociale, ISNULL(stc.Particolare, N'nd') AS Particolare, ISNULL(stc.DescParticolare, N'nd') AS DescParticolare, ISNULL(stc.DisegnoGrezzo, N'nd') AS DisegnoGrezzo, ISNULL(stc.Esponente, N'nd') AS Esponente, ISNULL(stc.DescImpianto, N'nd') AS DescImpianto, ISNULL(stc.DataFus, N'') AS DataFus, ISNULL(stc.TurnoFus, 0) AS TurnoFus, stc.CodImballo, stc.Qta, ISNULL(AnagStatiProdotto.DescStato, N'nd') AS DescStato, stc.ModDate, CASE WHEN(stc.IdxPosizione < 0) THEN 'Consum' ELSE ISNULL(Blocchi.CodMag, N'nd') END AS CodMag, ISNULL(Blocchi.CodBlocco, N'nd') AS CodBlocco, ISNULL(Celle.CodCella, N'nd') AS CodCella, ISNULL(dbo.Celle.IdxCella, 0) AS IdxCella, ISNULL(Celle.X, 0) AS X, ISNULL(Celle.Y, 0) AS Y, ISNULL(Celle.Z, 0) AS Z, stc.IdxPosizione, ISNULL(stc.Note,'') AS Note FROM AnagStatiProdotto RIGHT OUTER JOIN myCTE stc ON AnagStatiProdotto.CodStato = stc.CodStato AND AnagStatiProdotto.CodStato = stc.CodStato LEFT OUTER JOIN Celle INNER JOIN PosizioneUdcCorrente ON Celle.IdxCella = PosizioneUdcCorrente.IdxCella AND Celle.IdxCella = PosizioneUdcCorrente.IdxCella AND Celle.IdxCella = PosizioneUdcCorrente.IdxCella INNER JOIN Blocchi ON Celle.IdxBlocco = Blocchi.IdxBlocco INNER JOIN AnagMag ON Blocchi.CodMag = AnagMag.CodMag AND Blocchi.CodCS = AnagMag.CodCS AND Blocchi.CodMag = AnagMag.CodMag AND Blocchi.CodCS = AnagMag.CodCS AND Blocchi.CodMag = AnagMag.CodMag AND Blocchi.CodCS = AnagMag.CodCS ON stc.UDC = PosizioneUdcCorrente.UDC WHERE (stc.UDC = @UDC) AND (stc.CodCS = @CodCS) RETURN go commit; go 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: 2012.05.30 * ****************************************/ alter PROCEDURE stp_scaricaUdc ( @UDC VARCHAR(50), @IdxPosizione INT, @CodEvento VARCHAR(10), @CodSoggetto NVARCHAR(17) ) AS BEGIN TRAN /* Tolto da GCarlo xche non salvo utente che cancella x adesso -- aggiorno utente x la posizione corrente, in modo da poter POI salvare l'utente che scarica UDC UPDATE PosizioneUdcCorrente SET CodSoggetto = @CodSoggetto WHERE UDC = @UDC */ -- Tabella del record cancellato ( al momento NON usata ) RIATTIVARE x QUANDO Voglio lo STORICO cancellati -- DECLARE @MyTableVar table ( IdxCella int, CodCS nchar(2) ); -- libero la posizione attuale dell'UDC (se c'è...) DELETE FROM dbo.PosizioneUdcCorrente -- OUTPUT DELETED.IdxCella , DELETED.CodCS INTO @MyTableVar RIATTIVARE x QUANDO Voglio lo STORICO cancellati WHERE UDC = @UDC; -- ( al momento NON usata ) RIATTIVARE x QUANDO Voglio lo STORICO cancellati -- Inserisco in Storico Posizione il record di chi ha cancellato -- INSERT dbo.PosizioneUdcStorico ( UDC, IdxCella, DataInizio, DataFine, CodCS, CodSoggetto ) -- SELECT @UDC, IdxCella, GETDATE(), GETDATE(), CodCS, @CodSoggetto FROM @MyTableVar -- aggiorno l'UDC come posizione finale... UPDATE dbo.ElencoCartellini SET IdxPosizione = @IdxPosizione ,ModDate = GETDATE() ,CodEvento = @CodEvento ,CodSoggetto = @CodSoggetto WHERE UDC = @UDC COMMIT TRAN RETURN 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, @CodSoggetto VARCHAR(17) ) AS SET @UDC = UPPER(@UDC) -- metto ad Upper nel caso venga passato in minuscolo ( es. smart LDP da terminalino ) BEGIN TRAN -- DICHIARAZIONI iniziali variabili DECLARE @IdxCellaFrom INT DECLARE @capienza INT DECLARE @numUdc INT DECLARE @udcInLdpPrel BIT -- controllo cella di partenza SET @IdxCellaFrom = (SELECT IdxCella FROM PosizioneUdcCorrente WHERE UDC = @UDC) SET @IdxCellaFrom = ISNULL(@IdxCellaFrom,0) -- controllo x cella null... -- controllo UDC, se faccia parte di LDP che NON permette MOV... SET @udcInLdpPrel = ( SELECT ISNULL(COUNT(rldp.UDC),0) FROM RigheListePrelievo rldp INNER JOIN ElencoListePrelievo ldp ON ldp.CodLista=rldp.CodLista INNER JOIN AnagStatiListe asl ON ldp.CodStatoLista = asl.CodStatoLista WHERE asl.canMovUDC = 0 AND rldp.UDC=@UDC ) -- controllo se cella di destinazione e di partenza coincidono NON FACCIO NULLA... altrimenti procedo IF (@IdxCellaTo <> @IdxCellaFrom) BEGIN -- controllo UDC "libero" da LDP (ovvero non faccia parte di LDP in uno stato che NON permette MOV, nel qual caso NON sposto) IF (@udcInLdpPrel = 0) -- tutto ok PROCEDO! BEGIN -- controllo se la cella di partenza vada indicata come piena o meno 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 cella di partenza NON raggiunta aggiorno NON Piena IF(@numUdc -1 < @capienza) BEGIN EXEC stp_celle_updPiena @IdxCellaFrom, 0 END ---- aggiorno utente x la posizione corrente, in modo da poter POI salvare l'utente che scarica UDC --UPDATE PosizioneUdcCorrente --SET CodSoggetto = @CodSoggetto --WHERE UDC = @UDC ---- cancello posizione occupata ( non serve più faccio UPDATE ) --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' WHERE CodStatoLista < 4 ) END -- modifico la posizione per l'UDC se esiste altrimenti la inserisco IF @IdxCellaFrom <> 0 UPDATE PosizioneUdcCorrente SET IdxCella = @IdxCellaTo, DataRif = GETDATE(), CodSoggetto = @CodSoggetto FROM PosizioneUdcCorrente WHERE UDC = @UDC AND CodCS = @CodCS AND IdxCella = @IdxCellaFrom ELSE INSERT INTO PosizioneUdcCorrente(UDC, IdxCella, CodCS, DataRif, CodSoggetto) VALUES(@UDC, @IdxCellaTo, @CodCS, GETDATE(), @CodSoggetto); SET @numUdc = (SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE IdxCella = @IdxCellaTo) -- controllo se la cella di dest vada indicata come piena, altrimenti NON la indicherò (mai) come piena... SET @capienza = ( SELECT CASE CheckPiena WHEN 1 THEN tc.Capienza ELSE @numUdc + 1 END FROM TipoCella TC INNER JOIN Celle c ON TC.IdxTipoCella=c.IdxTipoCella WHERE c.IdxCella = @IdxCellaTo ) -- se capienza raggiunta aggiorno... IF(@numUdc >= @capienza) BEGIN EXEC stp_celle_updPiena @IdxCellaTo, 1 END END -- cellaFrom e cellaTo non coincidono... END -- UDC NON appartiene a LDP già prelevate... COMMIT TRAN RETURN go commit; go set xact_abort on; go begin transaction; go create index i_destinatario on ElencoListePrelievo(Destinatario); go exec sp_rename 'ElencoListePrelievo.IX_ElencoListePrelievo_CodTipoLista_CodSoggettoCodStatoLista', 'ix_ElencoListePrelievo_CodTipoLista_CodSoggettoCodStatoLista', 'index'; go commit; go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go -- ============================================= -- Author: Samuele E. Locatelli -- Create date: 2009-09-13 -- Mod date: 2012-09-17 -- Description: trigger x inserimento valori in archivio storico alla cancellazione/modifica del dato (tranne curr user) -- ============================================= alter TRIGGER trg_storico ON PosizioneUdcCorrente AFTER DELETE,UPDATE AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; DECLARE @FlaStoricizza AS Bit = 0; -- impostazione x test storicizza sempre attivo -- Se è una cancellazione Storicizzo IF ( SELECT COUNT(*) FROM inserted ) = 0 SET @FlaStoricizza = 1 ; -- devo EVITARE di salvare se c'è solo modifica del codSoggetto... IF( UPDATE(UDC) OR UPDATE(IdxCella) OR UPDATE(CodCS) OR UPDATE(DataRif) ) SET @FlaStoricizza = 1; -- IF( UPDATE(UDC) OR UPDATE(IdxCella) OR UPDATE(CodCS) OR UPDATE(DataRif) ) IF @FlaStoricizza = 1 BEGIN -- metto in storico la posizione attuale dell'UDC (SE esiste) CANCELLATO INSERT INTO PosizioneUdcStorico(UDC, IdxCella, CodCS, DataInizio, DataFine, CodSoggetto) ( SELECT UDC, IdxCella, CodCS, DataRif as DataInizio, GETDATE() as DataFine, CodSoggetto FROM deleted ) END END go commit; go 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, @CodSoggetto VARCHAR(17) ) AS SET XACT_ABORT ON; SET NOCOUNT ON; /**** NON PRESENTE IN TEKAL ------------------------------------------------------------------------------------------------------ -- 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" -- verifico già se esite già l'UDC/Gitterbox in ElencoCartellini DECLARE @newData TABLE ( RowNumber int, 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 , UDC varchar(50) ) INSERT INTO @newData SELECT ROW_NUMBER() OVER(PARTITION BY CodGitterbox ORDER BY InizioIniezione ASC), dm.CodDataMatrix, LTRIM(RTRIM(dm.CodGitterbox)), dm.NumConchiglia, dm.NumDisegno, dm.EsponenteDisegno,dm.CodDifettoScarto, dm.InizioPreparazione, dm.FinePreparazione, dm.InizioIniezione, dm.FineIniezione, dm.MagDestinazione, dm.DataImport, ec.UDC FROM dbo.v_trasfDataMatrix AS dm LEFT JOIN dbo.ElencoCartellini AS ec ON dm.CodGitterbox = ec.UDC WHERE DataImport > @lastImport AND LEFT(CodGitterbox, 1) = 'U' AND CodDifettoScarto = '00' -- non importa gli scarti!!! /* INIZIO MODIFICA Note GCarlo : Se il Gitterbox è già stato trasferito e/o cmq già presente non viene caricato, al limite vengono caricati i Datamatrix non ancora presenti ma con Gitterbox = EmptyGBox Se non trovo il Particolare in dbo.v_transcParticolari i datamatrix non vengono importati Posso reimportarli spostando la data di import indietro in LogImportFlussi ATTENZIONE! Si presuppone che i DataMatrix siano coerenti ovvero stesso Particolare ecc. ecc. */ BEGIN TRAN; -- creo UDC da gitterbox nuovi ( Se UDC già presenti non li carico ) -- GCARLO messo un RowCount prima e prendo solo il primo DataMatrix INSERT INTO ElencoCartellini(UDC,CodCS, Particolare, DescParticolare, DisegnoGrezzo, Esponente, DataFus, Qta, CodSoggetto, CodStato, IdxPosizione,CreateDate, ModDate, Figura, CodImballo, Tara, PesoTot, PesoCad, NumCont, TurnoFus ) SELECT DISTINCT nd.CodGitterbox, @CodCS, tp.Particolare, an.DescParticolare, an.DisegnoGrezzo, an.EsponenteModifica ,InizioIniezione, dbo.getNumDatamatrix(nd.CodGitterbox), @CodSoggetto As CodSoggetto, 'Fin' AS CodStato ,@IdxPosizione, GETDATE(), GETDATE() ,'' AS Figura, '' AS CodImballo,0 AS Tara,0 AS PesoTot,0 AS PesoCad,1 AS NumCont,0 AS TurnoFus FROM @newData nd INNER JOIN dbo.v_transcParticolari tp -- solo se PArticolare è presente in Trascodifica ON nd.NumDisegno = tp.NumDisegno AND nd.EsponenteDisegno = tp.EsponenteDisegno LEFT JOIN RilPro.AnagParticolari an -- Leggo il disegno in anagrafica ON tp.Particolare = an.Particolare WHERE nd.RowNumber = 1 -- Prendo solo i dati del First DataMatrix ( data iniezione ) AND nd.UDC IS NULL -- solo Gitterbox Nuovi 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 -- indico cella UDC corrente... calcolo la prima cella della nuova posizione... SET @IdxCellaTo = ( SELECT dbo.f_getCellaByPos(CAST(@IdxPosizione AS NVARCHAR(50))) ) DECLARE cursoreImport CURSOR FOR SELECT DISTINCT CodGitterbox FROM @newData WHERE UDC IS NULL -- solo x Gitterbox Nuovi OPEN cursoreImport FETCH NEXT FROM cursoreImport INTO @udc WHILE @@FETCH_STATUS = 0 BEGIN -- controllo se posizione non ancora creata... SET @posTrovate = ( SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE UDC = @udc ) IF( @posTrovate = 0) BEGIN INSERT INTO PosizioneUdcCorrente(UDC, IdxCella, CodCS, DataRif, CodSoggetto) VALUES(@udc, @IdxCellaTo, @CodCS, @adesso, @CodSoggetto) END FETCH NEXT FROM cursoreImport INTO @udc END CLOSE cursoreImport DEALLOCATE cursoreImport -- CARICAMENTO DATAMATRIX -- -- Carico i datamatrix se UDC/Gitterbox nuovi INSERT INTO dbo.ElencoDataMatrix SELECT nw.CodDataMatrix ,nw.CodGitterbox ,nw.NumConchiglia ,nw.NumDisegno ,nw.EsponenteDisegno ,nw.CodDifettoScarto ,nw.InizioPreparazione ,nw.FinePreparazione ,nw.InizioIniezione ,nw.FineIniezione ,nw.MagDestinazione ,nw.DataImport FROM @newData AS nw LEFT JOIN dbo.ElencoDataMatrix AS el ON nw.CodDataMatrix = el.CodDataMatrix WHERE el.CodDataMatrix IS NULL -- Nuovi Datamatrix AND nw.UDC IS NULL -- Solo per Gitterbox nuovi -- Se esistono Datamatrix di UDC già caricati in precedenza li inserisco ma senza -- assegnare l'UDC ma lo metto a EmptyGBox perchè potrebbero essere UDC già spediti o -- movimentati e dovrei anche aggiornare la giacenza in ElencoCartellini INSERT INTO dbo.ElencoDataMatrix SELECT nw.CodDataMatrix ,'EmptyGBox' AS CodGitterbox ,nw.NumConchiglia ,nw.NumDisegno ,nw.EsponenteDisegno ,nw.CodDifettoScarto ,nw.InizioPreparazione ,nw.FinePreparazione ,nw.InizioIniezione ,nw.FineIniezione ,nw.MagDestinazione ,nw.DataImport FROM @newData AS nw LEFT JOIN dbo.ElencoDataMatrix AS el ON nw.CodDataMatrix = el.CodDataMatrix WHERE el.CodDataMatrix IS NULL AND nw.UDC IS NOT NULL -- aggiorno dati ultimo caricamento SET @lastImport = ISNULL( ( SELECT MAX(DataImport)FROM @newData ),@lastImport ) UPDATE LogImportFlussi SET LastImport = @lastImport WHERE NomeFlusso = @nomeFlusso COMMIT TRAN; */ RETURN go commit; go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /*************************************** * STORED stp_getUdcDetailFullCode_storico * * ottiene ULTIM dati UDC DA STORICO con i dati significativi partendo da un codice UDC COMPLETO * * Steamware, S.E.L. * mod: 2012.10.01 * ****************************************/ create PROCEDURE stp_getUdcDetailFullCode_storico ( @DataOraFrom DATETIME, @DataOraTo DATETIME, @UDC NVARCHAR(50), @CodCS NVARCHAR(2) ) AS WITH myCTE AS ( SELECT TOP 1 * FROM StoricoCartellini WHERE DataEv BETWEEN @DataOraFrom AND @DataOraTo AND UDC = @UDC ORDER BY DataEv DESC ) SELECT stc.UDC, ISNULL(stc.RagSociale, N'nd') AS RagSociale, ISNULL(stc.Particolare, N'nd') AS Particolare, ISNULL(stc.DescParticolare, N'nd') AS DescParticolare, ISNULL(stc.DisegnoGrezzo, N'nd') AS DisegnoGrezzo, ISNULL(stc.Esponente, N'nd') AS Esponente, ISNULL(stc.DescImpianto, N'nd') AS DescImpianto, ISNULL(stc.DataFus, N'') AS DataFus, ISNULL(stc.TurnoFus, 0) AS TurnoFus, stc.CodImballo, stc.Qta, ISNULL(AnagStatiProdotto.DescStato, N'nd') AS DescStato, stc.ModDate, CASE WHEN(stc.IdxPosizione < 0) THEN 'Consum' ELSE ISNULL(Blocchi.CodMag, N'nd') END AS CodMag, ISNULL(Blocchi.CodBlocco, N'nd') AS CodBlocco, ISNULL(Celle.CodCella, N'nd') AS CodCella, ISNULL(dbo.Celle.IdxCella, 0) AS IdxCella, ISNULL(Celle.X, 0) AS X, ISNULL(Celle.Y, 0) AS Y, ISNULL(Celle.Z, 0) AS Z, stc.IdxPosizione, ISNULL(stc.Note,'') AS Note FROM AnagStatiProdotto RIGHT OUTER JOIN myCTE stc ON AnagStatiProdotto.CodStato = stc.CodStato AND AnagStatiProdotto.CodStato = stc.CodStato LEFT OUTER JOIN Celle INNER JOIN PosizioneUdcCorrente ON Celle.IdxCella = PosizioneUdcCorrente.IdxCella AND Celle.IdxCella = PosizioneUdcCorrente.IdxCella AND Celle.IdxCella = PosizioneUdcCorrente.IdxCella INNER JOIN Blocchi ON Celle.IdxBlocco = Blocchi.IdxBlocco INNER JOIN AnagMag ON Blocchi.CodMag = AnagMag.CodMag AND Blocchi.CodCS = AnagMag.CodCS AND Blocchi.CodMag = AnagMag.CodMag AND Blocchi.CodCS = AnagMag.CodCS AND Blocchi.CodMag = AnagMag.CodMag AND Blocchi.CodCS = AnagMag.CodCS ON stc.UDC = PosizioneUdcCorrente.UDC WHERE (stc.UDC = @UDC) AND (stc.CodCS = @CodCS) RETURN go commit; go -- registro versione... INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(505, GETDATE()) GO