-- STEP 3: stored & functions set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /*************************************** * STORED stp_creaListaPrelievo * * crea un nuovo record nella ElencoListePrelievo e restituisce il codice ID appena creato * * Steamware, S.E.L. 8 (FROM Stintino) * mod: 2010.07.30 * ************************************/ alter PROCEDURE stp_creaListaPrelievo ( @Anno NVARCHAR(2), @Mese NVARCHAR(2), @CodTipoLista NVARCHAR(10), @CodCS NCHAR(2), @CodCliente NVARCHAR(6), @RagSociale NVARCHAR(35), @CodSoggetto NCHAR(17), @Particolare NVARCHAR(15), @DescParticolare NVARCHAR(30), @DisegnoGrezzo NVARCHAR(30), @Esponente NVARCHAR(6), @Figura NVARCHAR(4), @CodImballo NVARCHAR(15), @QtaTot DECIMAL(10,2), @Destinatario NVARCHAR(50), @DestinatarioDescrizione NVARCHAR(50) ) AS -- Dichiarazioni iniziali DECLARE @CodLista AS NVARCHAR(12) DECLARE @numLista AS INT DECLARE @temp AS INT DECLARE @ora AS DATETIME ------------------------------------------------------------------------------------------------------ -- codice lista di prelievo KAAMM00000 - K = start char, AA = anno, MM = mese, 00000 = progressivo ------------------------------------------------------------------------------------------------------ -- controllo se ci sia già una lista di prelievo per company / flusso anno BEGIN TRAN -- cerco nella tab contatori liste prelievo l'ultimo valido SET @numLista = ( SELECT COUNT(*) FROM ContatoriListePrelievo WHERE CodCS = @CodCS AND Anno = @Anno AND Mese = @Mese ) -- controllo se record c'è... IF(@numLista > 0) BEGIN -- se c'è incremento di 1 in tab UPDATE ContatoriListePrelievo SET LastIdx = LastIdx + 1 WHERE CodCS = @CodCS AND Anno = @Anno AND Mese = @Mese END ELSE BEGIN -- lo creo! INSERT INTO ContatoriListePrelievo(CodCS, Anno, Mese, LastIdx) VALUES (@CodCS, @Anno, @Mese, 1) END -- aggiorno numero lista prelievo SET @numLista = ( SELECT LastIdx FROM ContatoriListePrelievo WHERE CodCS = @CodCS AND Anno = @Anno AND Mese = @Mese ) COMMIT TRAN ------------------------------------------------------------------------------------------------------ BEGIN TRAN ------------------------------------------------------------------------------------------------------ -- Ciclo principale x inserimento nuovo record ------------------------------------------------------------------------------------------------------ -- ottengo il nuovo codice lista di prelievo completo SET @CodLista = 'K' + @CodCS + @Anno + dbo.f_padLeft(CAST(@Mese AS NVARCHAR(2)), 2, '0') + + dbo.f_padLeft(CAST(@numLista AS NVARCHAR(5)), 5, '0') INSERT INTO ElencoListePrelievo (CodLista, CodTipoLista, CodCS, DataCreaz, CodCliente, RagSociale, CodSoggetto, Particolare, DescParticolare, DisegnoGrezzo, Esponente, Figura, CodImballo, QtaTot, CodStatoLista, Destinatario, DestinatarioDescrizione, DataModStato) VALUES (@CodLista, @CodTipoLista, @CodCS, GETDATE(), @CodCliente, @RagSociale, @CodSoggetto, @Particolare, @DescParticolare, @DisegnoGrezzo, @Esponente,@Figura, @CodImballo, @QtaTot, 0, @Destinatario, @DestinatarioDescrizione, GETDATE() ) COMMIT TRAN SELECT CodLista, CodTipoLista, CodCS, DataCreaz, CodCliente, RagSociale, CodSoggetto, Particolare, DescParticolare, DisegnoGrezzo, Esponente, Figura, CodImballo, QtaTot, CodStatoLista, Destinatario, DestinatarioDescrizione FROM V_elencoListePrelievo WHERE CodLista = @CodLista; RETURN go commit; go --- modifica manuale da testare... manca db ACG... 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; ------------------------------------------------------------------------------------------------------ -- 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, CodEvento ) SELECT DISTINCT nd.CodGitterbox, @CodCS, tp.Particolare, an.DescParticolare, an.DisegnoGrezzo, an.EsponenteModifica ,InizioIniezione, dbo.getNumDatamatrix(nd.CodGitterbox), @CodSoggetto As CodSoggetto, 'FinGBox' AS CodStato ,@IdxPosizione, GETDATE(), GETDATE() ,'' AS Figura, '' AS CodImballo,0 AS Tara,0 AS PesoTot,0 AS PesoCad,1 AS NumCont,0 AS TurnoFus, 'UDC_GBOX' AS CodEvento 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_elencoListePrelievoUpdateStato * * aggiorna la lista di prelievo indicando lo stato richiesto * * Steamware, S.E.L. * mod: 2010.07.06 * ************************************/ alter PROCEDURE stp_elencoListePrelievoUpdateStato ( @NewCodSoggetto NCHAR(17), @CodListaAttuale AS varchar(12), @CodStatoLista INT ) AS UPDATE ElencoListePrelievo SET CodSoggetto = @NewCodSoggetto ,CodStatoLista = @CodStatoLista ,DataModStato = GETDATE() WHERE (CodLista = @CodListaAttuale) SELECT CodLista, CodTipoLista, CodCS, DataCreaz, CodCliente, RagSociale, CodSoggetto, Particolare, DescParticolare, DisegnoGrezzo, Esponente, Figura, CodImballo, QtaTot, CodStatoLista, Destinatario, DestinatarioDescrizione FROM V_elencoListePrelievo WHERE (CodLista = @CodListaAttuale) go commit; go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /*************************************** * STORED stp_EP_delete * * elimina una postazione + stampante * Steamware, S.E.L. * mod: 2012.10.02 * ****************************************/ alter PROCEDURE stp_EP_delete ( @Original_codPostazione NVARCHAR(250) ) AS DELETE FROM ElencoPostazioni WHERE codPostazione = @Original_codPostazione RETURN go /*************************************** * STORED stp_EP_update * * update di una postazione + stampante * Steamware, S.E.L. * mod: 2012.10.02 * ****************************************/ alter PROCEDURE stp_EP_update ( @Original_codPostazione NVARCHAR(250), @codPostazione NVARCHAR(250), @stampante NVARCHAR(250), @note NVARCHAR(250) ) AS UPDATE ElencoPostazioni SET codPostazione = @codPostazione, stampante = @stampante, note = @note WHERE codPostazione = @Original_codPostazione 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 /*************************************** * STORED stp_MagFifoByParticolare * * restituisce elenco giacenze a magazzino in logica FIFO per un dato particolare * * Steamware, S.E.L. * mod: 2012.10.01 * ****************************************/ create PROCEDURE stp_MagFifoByParticolare ( @CodCS VARCHAR(2), @Particolare VARCHAR(20) ) AS SELECT b.IdxBlocco, b.CodBlocco, b.DescBlocco, ec.Particolare , COUNT(puc.UDC) AS NumUDC , ISNULL(MIN(puc.DataRif) , GETDATE()) AS Oldest , ISNULL(MAX(puc.DataRif) , GETDATE()) AS Newest , SUM(ec.Qta) AS QtaTotPz FROM AnagMag am INNER JOIN Blocchi b ON am.CodMag = b.CodMag AND am.CodCS = b.CodCS INNER JOIN Celle c INNER JOIN ElencoCartellini ec LEFT OUTER JOIN PosizioneUdcCorrente puc ON ec.UDC = puc.UDC ON c.IdxCella = puc.IdxCella ON b.IdxBlocco = c.IdxBlocco INNER JOIN AnagStatiProdotto asp ON ec.CodStato = asp.CodStato WHERE (c.Attiva = 1) AND b.CodMag <> 'VMLP' AND (am.CodCS = @CodCS) AND (ec.Particolare = @Particolare) GROUP BY b.IdxBlocco, b.CodBlocco, b.DescBlocco, ec.Particolare ORDER BY Oldest ASC RETURN go commit; go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /*************************************** * STORED stp_prtCartFusiByUDC * * ottiene il record del Cartellino FUSI dato l'UDC richiesto x la stampa * * Steamware, G.A.R. * mod: 2012.02.27 * ****************************************/ create PROCEDURE stp_prtCartFusiByUDC ( @UDC NVARCHAR(50) ) AS -- estraggo i trattamenti nelle note ( x max 10 trattamenti ) DECLARE @tmp NVARCHAR(500) DECLARE @NoteTratt NVARCHAR(500) SET @NoteTratt = '' -- SET @NoteTratt = (SELECT SUBSTRING(@tmp, 0, LEN(@tmp))) -- ora seleziono i dati veri e propri SELECT ElencoCartellini.UDC, ElencoCartellini.CodCS, ISNULL(ElencoCartellini.CodCliente, N'') AS codcliente, ISNULL(ElencoCartellini.RagSociale, N'') AS ragsociale, ISNULL(ElencoCartellini.Particolare, N'') AS particolare, ISNULL(ElencoCartellini.DescParticolare, N'') AS DescParticolare, ISNULL(ElencoCartellini.DisegnoGrezzo, N'') AS DisegnoGrezzo, ISNULL(ElencoCartellini.Esponente, N'') AS esponente, ISNULL(ElencoCartellini.CodImpianto, N'') AS CodImpianto, ISNULL(ElencoCartellini.DescImpianto, N'') AS DescImpianto, ISNULL(ElencoCartellini.CodStampo, N'') AS codstampo, ISNULL(ElencoCartellini.Figura, N'') AS figura, ISNULL(ElencoCartellini.DataFus, N'') AS datafus, ISNULL(ElencoCartellini.TurnoFus, N'') AS turnofus, ISNULL(ElencoCartellini.CodImballo, N'') AS CodImballo, ISNULL(ElencoCartellini.CodSoggetto, N'') AS CodSoggetto, ISNULL(ElencoCartellini.NumCont, N'') AS NumCont, ISNULL(ElencoCartellini.Tara, N'') AS tara, ISNULL(ElencoCartellini.Qta, N'') AS qta, ISNULL(ElencoCartellini.CodStato, N'') AS CodStato, ISNULL(ElencoCartellini.IdxPosizione, N'') AS IdxPosizione, ISNULL(ElencoCartellini.PesoTot, N'') AS PesoTot, ISNULL(ElencoCartellini.PesoCad, N'') AS PesoCad, ElencoCartellini.CreateDate, ElencoCartellini.ModDate, ISNULL(RilPro.AnagOperatori.Cognome, N'') AS cognome, ISNULL(RilPro.AnagOperatori.Nome, N'') AS nome, ISNULL(AnagStatiProdotto.DescStato, N'') AS DescStato, ISNULL(RilPro.AnagImballi.DescImballo, N'') AS DescImballo, RilPro.AnagParticolari.CodFamiglia, RilPro.AnagFamiglie.DescFamiglia, ISNULL(ElencoCartellini.Note, N'') AS Note, @NoteTratt AS NoteTratt FROM RilPro.AnagParticolari LEFT OUTER JOIN RilPro.AnagFamiglie ON RilPro.AnagParticolari.CodFamiglia = RilPro.AnagFamiglie.CodFamiglia RIGHT OUTER JOIN ElencoCartellini ON RilPro.AnagParticolari.Particolare = ElencoCartellini.Particolare LEFT OUTER JOIN AnagStatiProdotto ON ElencoCartellini.CodStato = AnagStatiProdotto.CodStato LEFT OUTER JOIN RilPro.AnagOperatori ON ElencoCartellini.CodSoggetto = RilPro.AnagOperatori.CodSoggetto LEFT OUTER JOIN RilPro.AnagImballi ON ElencoCartellini.CodImballo = RilPro.AnagImballi.CodImballo WHERE (ElencoCartellini.UDC = @UDC) RETURN go commit; go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /*************************************** * STORED stp_riattivaUdc * * riattiva un dato UDC (da mag consumato negativo a corrispettivo positivo) --> se era positivo NON FA NULLA!!! (perchè uso ABS e controllo sia < 0) * * Steamware, S.E.L. * mod: 2012.05.30 * ****************************************/ alter PROCEDURE stp_riattivaUdc ( @UDC VARCHAR(50), @CodSoggetto NVARCHAR(17) ) AS DECLARE @CodEvento VARCHAR(10) DECLARE @CodTipoDichiaraz VARCHAR(1) DECLARE @IdxCella INT DECLARE @CodCS NVARCHAR(2) SET @UDC = UPPER(@UDC) -- metto ad Upper nel caso venga passato in minuscolo ( es. da terminalino ) SET @CodEvento = 'UDC_RIA' SET @CodTipoDichiaraz = 'U' BEGIN TRAN -- faccio update posizione UPDATE ElencoCartellini SET IdxPosizione = ABS(IdxPosizione) ,ModDate=GETDATE() ,CodEvento = @CodEvento ,CodSoggetto = @CodSoggetto WHERE UDC = @UDC AND IdxPosizione IN (SELECT IdxPosizione FROM AnagPosizioni WHERE (IsRiattivaEnabled = 1) ) -- lo elimino da eventuali precedenti liste di prelievo sennò poi non potrei + prelevarlo DELETE FROM RigheListePrelievo WHERE UDC = @UDC -- imposto posizione CELLA corrente x l'udc nella prima libera SET @IdxCella = (SELECT c.IdxCella FROM Celle c inner join Blocchi b ON c.IdxBlocco=b.IdxBlocco INNER JOIN ElencoCartellini e ON b.CodMag = CAST(e.IdxPosizione AS NVARCHAR(50)) WHERE e.UDC = @UDC) SET @CodCS = (SELECT CodCS FROM ElencoCartellini WHERE UDC = @UDC) INSERT INTO PosizioneUdcCorrente(UDC, IdxCella, CodCS, DataRif, CodSoggetto) VALUES(@Udc, @IdxCella, @CodCS, GETDATE(), @CodSoggetto) COMMIT TRAN RETURN go commit; go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /*stp_SAO_getByIdxEv * STORED stp_SAO_getBySearch * * cerca riga in Storico Azioni Operatore * Steamware, S.E.L. * mod: 2012.09.25 * ****************************************/ create PROCEDURE stp_SAO_getByIdxEv ( @idxEvento INT=0 ) AS SELECT * FROM StoricoAzioniOperatore WHERE idxEvento = @idxEvento RETURN go /*************************************** * STORED stp_SAO_getBySearch * * effettua ricerca nello Storico Azioni Operatore * Steamware, S.E.L. * mod: 2012.09.25 * ****************************************/ create PROCEDURE stp_SAO_getBySearch ( @DataOraFrom DATETIME, @DataOraTo DATETIME, @CodSoggetto NVARCHAR(17)='*', @codPostazione NVARCHAR(250)='*', @UDC NVARCHAR(50), @Particolare NVARCHAR(15), @codAzione NVARCHAR(10)='*' ) AS SELECT * FROM StoricoAzioniOperatore WHERE DataOra BETWEEN @DataOraFrom AND @DataOraTo AND codPostazione = CASE WHEN ISNULL(@codPostazione,'*') = '*' THEN codPostazione ELSE @codPostazione END -- NON VA!!! AND CodSoggetto = CASE WHEN ISNULL(@CodSoggetto,'*') = '*' THEN CodSoggetto ELSE @CodSoggetto END AND codAzione = CASE WHEN ISNULL(@codAzione,'*') = '*' THEN codAzione ELSE @codAzione END AND UDC = CASE WHEN ISNULL(@UDC,'*') = '*' THEN UDC ELSE @UDC END AND Particolare = CASE WHEN ISNULL(@Particolare,'*') = '*' THEN Particolare ELSE @Particolare END ORDER BY IdxEvento DESC RETURN go /*************************************** * STORED stp_SAO_getLastPostazione * * ultimi record SAO x postazione * Steamware, S.E.L. * mod: 2012.09.25 * ****************************************/ create PROCEDURE stp_SAO_getLastPostazione ( @DataOraFrom DATETIME, @DataOraTo DATETIME, @codPostazione NVARCHAR(250)='' ) AS SELECT * FROM StoricoAzioniOperatore WHERE DataOra BETWEEN @DataOraFrom AND @DataOraTo AND codPostazione = @codPostazione ORDER BY DataOra DESC RETURN go /*************************************** * STORED stp_SAO_insert * * inserisce nuova riga nello Storico Azioni Operatore * * Steamware, S.E.L. * mod: 2012.09.25 * ****************************************/ create PROCEDURE stp_SAO_insert ( @DataOra DATETIME, @CodSoggetto NVARCHAR(17), @codPostazione NVARCHAR(250), @clientIp NVARCHAR(250)='', @UDC NVARCHAR(50), @Particolare NVARCHAR(15), @codAzione NVARCHAR(10), @descrizione NVARCHAR(500) ) AS BEGIN tran -- inserisco nuovo record storico azioni operatore INSERT INTO StoricoAzioniOperatore(DataOra, CodSoggetto, codPostazione, clientIp, UDC, Particolare, codAzione, descrizione) VALUES (@DataOra, @CodSoggetto, @codPostazione, @clientIp, @UDC, @Particolare, @codAzione, @descrizione) COMMIT tran 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 commit; go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /*************************************** * STORED stp_selMagByConditio * * Steamware, S.E.L. * mod: 2012.10.08 * ************************************/ create PROCEDURE stp_selMagByConditio ( @conditio NVARCHAR(2) ) AS SELECT value, label, conditio FROM v_selMag WHERE (conditio = @conditio) ORDER BY label RETURN go /*************************************** * STORED stp_selMagLogicoByConditio * * Steamware, S.E.L. * mod: 2012.10.08 * ************************************/ create PROCEDURE stp_selMagLogicoByConditio ( @conditio NVARCHAR(2) ) AS SELECT value, label, conditio FROM v_selMagLogico WHERE (conditio = @conditio) ORDER BY label RETURN go commit; go set xact_abort on; go begin transaction; go set ANSI_NULLS on; 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 set ANSI_NULLS on; go /*************************************** * STORED stp_UDC_delete * * elimina un dato UDC * * Steamware, S.E.L. * mod: 2012.09.25 * ****************************************/ create PROCEDURE stp_UDC_delete ( @UDC NVARCHAR(50) ) AS BEGIN tran -- annullo cella piena UPDATE dbo.Celle SET Piena = 0 FROM PosizioneUdcCorrente p INNER JOIN dbo.Celle c ON p.IdxCella = c.IdxCella WHERE c.Piena = 1 AND p.UDC = @UDC -- cancello posizione DELETE FROM PosizioneUdcCorrente WHERE UDC = @UDC -- cancello UDC DELETE FROM ElencoCartellini WHERE UDC = @UDC COMMIT tran RETURN go commit; go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /*************************************** * STORED stp_UDC_FifoByParticolareBlocco * * restituisce elenco UDC a magazzino in logica FIFO per un dato particolare+blocco * * Steamware, S.E.L. * mod: 2012.10.01 * ****************************************/ create PROCEDURE stp_UDC_FifoByParticolareBlocco ( @CodCS VARCHAR(2), @Particolare VARCHAR(20), @idxBlocco INT ) AS SELECT ec.UDC, c.CodCella, puc.DataRif, ec.Qta FROM AnagMag am INNER JOIN Blocchi b ON am.CodMag = b.CodMag AND am.CodCS = b.CodCS INNER JOIN Celle c INNER JOIN ElencoCartellini ec LEFT OUTER JOIN PosizioneUdcCorrente puc ON ec.UDC = puc.UDC ON c.IdxCella = puc.IdxCella ON b.IdxBlocco = c.IdxBlocco INNER JOIN AnagStatiProdotto asp ON ec.CodStato = asp.CodStato WHERE (c.Attiva = 1) AND b.CodMag <> 'VMLP' AND (am.CodCS = @CodCS) AND (ec.Particolare = @Particolare) AND b.IdxBlocco = @idxBlocco GROUP BY ec.UDC, c.CodCella, puc.DataRif, ec.Qta ORDER BY puc.DataRif ASC RETURN go commit; go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /*************************************** * STORED stp_v_selPartic_SAO * * elenco particolari x ricerca dato periodo analisi * Steamware, S.E.L. * mod: 2012.09.28 * ****************************************/ create PROCEDURE stp_v_selPartic_SAO ( @DataOraFrom DATETIME, @DataOraTo DATETIME ) AS SELECT DISTINCT value, label, GETDATE() AS conditio FROM v_selPartic_SAO WHERE conditio BETWEEN @DataOraFrom AND @DataOraTo RETURN go /*************************************** * STORED stp_v_selPostazioni_SAO * * elenco Postazioni x ricerca dato periodo analisi * Steamware, S.E.L. * mod: 2012.10.02 * ****************************************/ create PROCEDURE stp_v_selPostazioni_SAO ( @DataOraFrom DATETIME, @DataOraTo DATETIME ) AS SELECT DISTINCT value, label, GETDATE() AS conditio FROM v_selPostazioni_SAO WHERE conditio BETWEEN @DataOraFrom AND @DataOraTo RETURN go /*************************************** * STORED stp_v_selSoggetti_SAO * * elenco soggetti x ricerca dato periodo analisi * Steamware, S.E.L. * mod: 2012.10.02 * ****************************************/ create PROCEDURE stp_v_selSoggetti_SAO ( @DataOraFrom DATETIME, @DataOraTo DATETIME ) AS SELECT DISTINCT value, label, GETDATE() AS conditio FROM v_selSoggetti_SAO WHERE conditio BETWEEN @DataOraFrom AND @DataOraTo RETURN go /*************************************** * STORED stp_v_selUDC_SAO * * elenco UDC x ricerca dato periodo analisi * Steamware, S.E.L. * mod: 2012.09.28 * ****************************************/ create PROCEDURE stp_v_selUDC_SAO ( @DataOraFrom DATETIME, @DataOraTo DATETIME ) AS SELECT DISTINCT value, label, GETDATE() AS conditio FROM v_selUDC_SAO WHERE conditio BETWEEN @DataOraFrom AND @DataOraTo RETURN go commit; go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /*************************************** * STORED stp_UDC_insNewFull * * crea un nuovo record nella TabStatoOdpUdc FULL (con pesi, qta...) e restituisce il codice UDC appena creato * * Steamware, S.E.L. * mod: 2010.04.28 * ****************************************/ alter PROCEDURE stp_UDC_insNewFull ( @CodCS VARCHAR(2), @Flusso VARCHAR(2), @Anno VARCHAR(2), @CodCliente VARCHAR(6), @Particolare VARCHAR(15), @CodImpianto AS VARCHAR(50), @CodStampo VARCHAR(8), @Esponente VARCHAR(6), @Figura VARCHAR(4), @DataFus DATETIME, @TurnoFus INT, @CodImballo VARCHAR(15), @CodSoggetto VARCHAR(17), @Tara FLOAT, @IdxPosizione INT, @CodTipoDichiaraz CHAR(1), @CodEvento VARCHAR(10), @Qta DECIMAL(10,2), @PesoTot FLOAT, @PesoCad FLOAT, @CodStato VARCHAR(50), @UDC_parent VARCHAR(50), @DoDeleteUdcParent BIT, @Note NVARCHAR(500) ) AS -- DECLARE iniziali DECLARE @UDC AS VARCHAR(50) DECLARE @RagSociale AS VARCHAR(35) DECLARE @DescParticolare AS VARCHAR(30) DECLARE @DescImpianto AS VARCHAR(50) DECLARE @DisegnoGrezzo AS VARCHAR(30) DECLARE @NumCont AS INT DECLARE @numFlu AS INT DECLARE @numUdc AS INT DECLARE @nextUdc AS INT DECLARE @IdxCella AS INT SET @UDC_parent = UPPER(@UDC_parent) -- nel caso sia passato in minuscolo ------------------------------------------------------------------------------------------------------ -- Caricamento Dati da anagrafica ------------------------------------------------------------------------------------------------------ -- cerco la ragione sociale... SET @RagSociale = ISNULL( ( SELECT RagSociale FROM RilPro.AnagClienti WHERE (CodCliente = @CodCliente) ) , '') -- Cerco descrizione del particolare... SET @DescParticolare = ISNULL( ( SELECT DescParticolare FROM RilPro.AnagParticolari WHERE (Particolare = @Particolare) ) , 'ND') -- se non lo trova provo anche nell'anagrafica leghe IF(@DescParticolare = 'ND')-- OR (@DescParticolare is null) BEGIN SET @DescParticolare = ISNULL( ( SELECT DescLega FROM RilPro.AnagLeghe WHERE ('L'+CodLega = @Particolare) ) , '') END -- cerco codice disegno grezzo SET @DisegnoGrezzo = ISNULL( ( SELECT DisegnoGrezzo FROM RilPro.AnagParticolari WHERE (Particolare = @Particolare) ) , '') -- cerco descrizione Impianto SET @DescImpianto = ISNULL( ( SELECT DescImpianto FROM AnagImpianti WHERE (CodImpianto = @CodImpianto) ) , '') -- Calcolo contatore intero successivo x il contenitore... SET @NumCont = ( SELECT ISNULL(MAX(NumCont), 0) + 1 AS NumCont FROM ElencoCartellini WHERE (Particolare = @Particolare) AND (DataFus = @DataFus) AND (TurnoFus = @TurnoFus) AND (CodImpianto = @CodImpianto) AND (CodStampo = @CodStampo) AND (Figura = @Figura) ) ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Flusso ------------------------------------------------------------------------------------------------------ -- controllo se esiste il flusso (bilancia)... SET @numFlu = ( SELECT count(*) FROM AnagBilance WHERE CodBilancia = @Flusso ) -- ...sennò lo creo... IF(@numFlu = 0) BEGIN -- se c'è inserisco in tab INSERT INTO AnagBilance(CodBilancia, DescrImpianto, CodCS) VALUES (@Flusso, @Flusso, @CodCS) END ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- UDC ------------------------------------------------------------------------------------------------------ -- controllo se ci sia già un UDC per company / flusso anno BEGIN TRAN -- cerco nella tab contatori se esiste contatore x il flusso -- controllo se record c'è... IF EXISTS( SELECT TOP 1 Flusso FROM ContatoriUdc WHERE CodCS = @CodCS AND Flusso = @Flusso AND Anno = @Anno ) BEGIN -- se c'è incremento di 1 in tab UPDATE ContatoriUdc SET LastIdx = LastIdx + 1 WHERE CodCS = @CodCS AND Flusso = @Flusso AND Anno = @Anno END ELSE BEGIN -- lo creo! INSERT INTO ContatoriUdc(CodCS, Flusso, Anno, LastIdx) VALUES (@CodCS, @Flusso, @Anno, 1) END -- aggiorno numero UDC SET @numUdc = ( SELECT LastIdx FROM ContatoriUdc WHERE CodCS = @CodCS AND Flusso = @Flusso AND Anno = @Anno ) COMMIT TRAN ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Ciclo principale x inserimento nuovo record ------------------------------------------------------------------------------------------------------ BEGIN TRAN -- ottengo il nuovo codice UDC completo SET @UDC = dbo.componiUdc(@CodCS, @Flusso, @Anno, @numUdc) -- inserisco un nuovo record INSERT INTO ElencoCartellini(UDC, CodCS, CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad, CreateDate, ModDate, Note, CodEvento) VALUES (@UDC, @CodCS, @CodCliente, @RagSociale, @Particolare, @DescParticolare, @DisegnoGrezzo, @Esponente, @CodImpianto, @DescImpianto, @CodStampo, @Figura, @DataFus, @TurnoFus, @CodImballo, @CodSoggetto, @NumCont, @Tara, @Qta, @CodStato, @IdxPosizione, @PesoTot, @PesoCad, GETDATE(), GETDATE(), @Note, @CodEvento) -- inserisco relazione parent-child tra UDC vecchio (tara) e nuovo (pesa) SSE UDC_parent valido IF((NOT @UDC_parent IS NULL) AND (NOT @UDC_parent = '')) BEGIN INSERT INTO RelazUDC(UDC_parent, UDC_child) VALUES (@UDC_parent, @UDC) END COMMIT TRAN ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Ciclo secondario x eventuale cancellazione UDC tara parent e inserimento in posizione ------------------------------------------------------------------------------------------------------ -- se richiesto elimino l'UDC parent (tara) IF(@DoDeleteUdcParent = 1) BEGIN DELETE FROM ElencoCartellini WHERE UDC = @UDC_parent END -- cerco in TabTranPosizEventi record x calcolare cella DECLARE @IdxBloccoTo INT SET @IdxBloccoTo = 0 /* da testare... */ SET @IdxBloccoTo = ( SELECT ISNULL( ( SELECT IdxBloccoTo FROM TabTranPosizEventi WHERE CodEvento = @CodEvento AND IdxPosizione = 0 AND IdxPosizioneTo = @IdxPosizione AND CodStatoTo = @CodStato ), 0) ) -- se non lo trovo cerco con CodStatoTo null ( x stato UDC non specifico ) ... IF(@IdxBloccoTo = 0) BEGIN SET @IdxBloccoTo = ( SELECT ISNULL( ( SELECT IdxBloccoTo FROM TabTranPosizEventi WHERE CodEvento = @CodEvento AND IdxPosizione = 0 AND IdxPosizioneTo = @IdxPosizione ), 0) ) END /* fine modifica da testare */ -- se NON HO trovato una conf x @IdxBloccoTo utilizzo questo valore utilizzo modalità "vecchia" IF(@IdxBloccoTo = 0) BEGIN -- calcolo la prima cella della posizione indicata.. SET @IdxCella = ( SELECT TOP 1 c.IdxCella FROM Celle c INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco WHERE b.CodMag = CAST(@IdxPosizione AS NVARCHAR(50)) ) END ELSE BEGIN -- calcolo la prima cella della posizione indicata.. SET @IdxCella = ( SELECT TOP 1 c.IdxCella FROM Celle c WHERE c.IdxBlocco = @IdxBloccoTo ) END -- inserisco il cartellino nella prima cella della posizione indicata... INSERT INTO PosizioneUdcCorrente(UDC, IdxCella, CodCS, DataRif, CodSoggetto) VALUES(@Udc, @IdxCella, @CodCS, GETDATE(), @CodSoggetto) ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- restituisco la tab dati con l'udc appena inserito ------------------------------------------------------------------------------------------------------ SELECT * FROM ElencoCartellini WHERE UDC = @UDC ------------------------------------------------------------------------------------------------------ RETURN go /*************************************** * STORED stp_UDC_insNewFull_fixUDC * * crea un nuovo record nella TabStatoOdpUdc FULL (con pesi, qta...) avendo in entrata il codice UDC da utilizzare * * Steamware, S.E.L. * mod: 2011.12.07 * ****************************************/ alter PROCEDURE stp_UDC_insNewFull_fixUDC ( @UDC AS NVARCHAR(50), @CodCS VARCHAR(2), @Flusso VARCHAR(2), @Anno VARCHAR(2), @CodCliente VARCHAR(6), @Particolare VARCHAR(15), @CodImpianto AS VARCHAR(50), @CodStampo VARCHAR(8), @Esponente VARCHAR(6), @Figura VARCHAR(4), @DataFus DATETIME, @TurnoFus INT, @CodImballo VARCHAR(15), @CodSoggetto VARCHAR(17), @Tara FLOAT, @IdxPosizione INT, @CodTipoDichiaraz CHAR(1), @CodEvento VARCHAR(10), @Qta DECIMAL(10,2), @PesoTot FLOAT, @PesoCad FLOAT, @CodStato VARCHAR(50), @UDC_parent VARCHAR(50), @DoDeleteUdcParent BIT, @Note NVARCHAR(500) ) AS -- DECLARE iniziali DECLARE @RagSociale AS VARCHAR(35) DECLARE @DescParticolare AS VARCHAR(30) DECLARE @DescImpianto AS VARCHAR(50) DECLARE @DisegnoGrezzo AS VARCHAR(30) DECLARE @NumCont AS INT DECLARE @numFlu AS INT DECLARE @numUdc AS INT DECLARE @nextUdc AS INT DECLARE @IdxCella AS INT ------------------------------------------------------------------------------------------------------ -- Caricamento Dati da anagrafica ------------------------------------------------------------------------------------------------------ -- cerco la ragione sociale... SET @RagSociale = ISNULL( ( SELECT RagSociale FROM RilPro.AnagClienti WHERE (CodCliente = @CodCliente) ) , '') -- Cerco descrizione del particolare... SET @DescParticolare = ISNULL( ( SELECT DescParticolare FROM RilPro.AnagParticolari WHERE (Particolare = @Particolare) ) , 'ND') -- se non lo trova provo anche nell'anagrafica leghe IF(@DescParticolare = 'ND')-- OR (@DescParticolare is null) BEGIN SET @DescParticolare = ISNULL( ( SELECT DescLega FROM RilPro.AnagLeghe WHERE ('L'+CodLega = @Particolare) ) , '') END -- cerco codice disegno grezzo SET @DisegnoGrezzo = ISNULL( ( SELECT DisegnoGrezzo FROM RilPro.AnagParticolari WHERE (Particolare = @Particolare) ) , '') -- cerco descrizione Impianto SET @DescImpianto = ISNULL( ( SELECT DescImpianto FROM AnagImpianti WHERE (CodImpianto = @CodImpianto) ) , '') -- Calcolo contatore intero successivo x il contenitore... SET @NumCont = ( SELECT ISNULL(MAX(NumCont), 0) + 1 AS NumCont FROM ElencoCartellini WHERE (Particolare = @Particolare) AND (DataFus = @DataFus) AND (TurnoFus = @TurnoFus) AND (CodImpianto = @CodImpianto) AND (CodStampo = @CodStampo) AND (Figura = @Figura) ) ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Ciclo principale x inserimento nuovo record ------------------------------------------------------------------------------------------------------ BEGIN TRAN -- inserisco un nuovo record INSERT INTO ElencoCartellini(UDC, CodCS, CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad, CreateDate, ModDate, Note, CodEvento) VALUES (@UDC, @CodCS, @CodCliente, @RagSociale, @Particolare, @DescParticolare, @DisegnoGrezzo, @Esponente, @CodImpianto, @DescImpianto, @CodStampo, @Figura, @DataFus, @TurnoFus, @CodImballo, @CodSoggetto, @NumCont, @Tara, @Qta, @CodStato, @IdxPosizione, @PesoTot, @PesoCad, GETDATE(), GETDATE(), @Note, @CodEvento) -- inserisco relazione parent-child tra UDC vecchio (tara) e nuovo (pesa) SSE UDC_parent valido IF((NOT @UDC_parent IS NULL) AND (NOT @UDC_parent = '')) BEGIN INSERT INTO RelazUDC(UDC_parent, UDC_child) VALUES (@UDC_parent, @UDC) END COMMIT TRAN ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Ciclo secondario x eventuale cancellazione UDC tara parent e inserimento in posizione ------------------------------------------------------------------------------------------------------ -- se richiesto elimino l'UDC parent (tara) IF(@DoDeleteUdcParent = 1) BEGIN DELETE FROM ElencoCartellini WHERE UDC = @UDC_parent END -- cerco in TabTranPosizEventi record x calcolare cella DECLARE @IdxBloccoTo INT SET @IdxBloccoTo = 0 /* da testare...*/ SET @IdxBloccoTo = ( SELECT ISNULL( ( SELECT IdxBloccoTo FROM TabTranPosizEventi WHERE CodEvento = @CodEvento AND IdxPosizione = 0 AND IdxPosizioneTo = @IdxPosizione AND CodStatoTo = @CodStato ), 0) ) -- se non lo trovo cerco con CodStatoTo null... IF(@IdxBloccoTo = 0) BEGIN SET @IdxBloccoTo = ( SELECT ISNULL( ( SELECT IdxBloccoTo FROM TabTranPosizEventi WHERE CodEvento = @CodEvento AND IdxPosizione = 0 AND IdxPosizioneTo = @IdxPosizione ), 0) ) END /* fine test */ -- se NON HO trovato una conf x @IdxBloccoTo utilizzo questo valore utilizzo modalità "vecchia" IF(@IdxBloccoTo = 0) BEGIN -- calcolo la prima cella della posizione indicata.. SET @IdxCella = ( SELECT TOP 1 c.IdxCella FROM Celle c INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco WHERE b.CodMag = CAST(@IdxPosizione AS NVARCHAR(50)) ) END ELSE BEGIN -- calcolo la prima cella della posizione indicata.. SET @IdxCella = ( SELECT TOP 1 c.IdxCella FROM Celle c WHERE c.IdxBlocco = @IdxBloccoTo ) END -- inserisco il cartellino nella prima cella della posizione indicata.. INSERT INTO PosizioneUdcCorrente(UDC, IdxCella, CodCS, DataRif, CodSoggetto) VALUES(@Udc, @IdxCella, @CodCS, GETDATE(), @CodSoggetto) ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- restituisco la tab dati con l'udc appena inserito ------------------------------------------------------------------------------------------------------ SELECT * FROM ElencoCartellini WHERE UDC = @UDC ------------------------------------------------------------------------------------------------------ RETURN go commit; go -- registro versione... INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(510, GETDATE()) GO