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
