set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /************************************* * STORED PROCEDURE stp_TC_getByMacchinaPeriodo * recupera tempi ciclo x machcian e periodo filtrando il MAX ammissibile * * modif.: S.E.L. - 2010.12.15 **************************************/ create PROCEDURE stp_TC_getByMacchinaPeriodoFiltMax ( @IdxMacchina NVARCHAR(50), @Inizio DATETIME, @Fine DATETIME, @MAX DECIMAL(18, 8) ) AS SELECT * FROM TempiCicloRilevati WHERE IdxMacchina = @IdxMacchina AND (DataOraRif >= @Inizio) AND (DataOraRif <= @Fine) AND TCMedio <= @MAX ORDER BY DataOraRif RETURN go commit; go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /************************************* * STORED PROCEDURE stp_DDB_getParetoDurate * ottiene il pareto delle durate eventi diario di bordo * * modif.: S.E.L. - 2010.07.13 **************************************/ alter PROCEDURE stp_DDB_getParetoDurateFilt ( @IdxMacchina NVARCHAR(50), @minDurata FLOAT, @fine DATETIME, @inizio DATETIME ) AS WITH my_cte AS ( SELECT * FROM DiarioDiBordo WHERE IdxMacchina=@IdxMacchina AND DurataMinuti >= @minDurata AND ( (InizioStato BETWEEN @inizio AND @fine) OR (FineStato BETWEEN @inizio AND @fine) ) ) SELECT IdxMacchina, CASE WHEN MIN(InizioStato) < @inizio THEN @inizio ELSE MIN(InizioStato) END AS InizioStato, CASE WHEN MAX(FineStato) > @fine THEN @fine ELSE MAX(FineStato) END AS FineStato, IdxStato, SUM( DATEDIFF(n, CASE WHEN InizioStato < @inizio THEN @inizio ELSE InizioStato END, CASE WHEN ISNULL(FineStato, GETDATE()) > @fine THEN @fine ELSE FineStato END) ) AS DurataMinuti FROM my_cte GROUP BY IdxMacchina, IdxStato ORDER BY DurataMinuti DESC /* SELECT IdxMacchina, MIN(InizioStato) AS InizioStato, MAX(FineStato) AS FineStato, IdxStato, SUM(ISNULL(DurataMinuti, DATEDIFF(n, InizioStato, GETDATE()))) AS DurataMinuti FROM DiarioDiBordo WHERE IdxMacchina=@IdxMacchina AND DurataMinuti >= @minDurata AND (((FineStato <= @fine) AND (InizioStato >= @inizio)) OR ((FineStato IS NULL) AND (InizioStato >= @inizio AND InizioStato <= @fine))) GROUP BY IdxMacchina, IdxStato ORDER BY DurataMinuti DESC */ RETURN go /************************************* * STORED PROCEDURE stp_DDB_getParetoDurateHideSpentaFilt * ottiene il pareto delle durate eventi diario di bordo filtrato eventi spenta * * modif.: S.E.L. - 2010.07.14 **************************************/ alter PROCEDURE stp_DDB_getParetoDurateHideSpentaFilt ( @IdxMacchina NVARCHAR(50), @minDurata FLOAT, @fine DATETIME, @inizio DATETIME ) AS WITH my_cte AS ( SELECT * FROM DiarioDiBordo WHERE IdxMacchina=@IdxMacchina AND DurataMinuti >= @minDurata AND IdxStato <>11 AND ( (InizioStato BETWEEN @inizio AND @fine) OR (FineStato BETWEEN @inizio AND @fine) ) ) SELECT IdxMacchina, CASE WHEN MIN(InizioStato) < @inizio THEN @inizio ELSE MIN(InizioStato) END AS InizioStato, CASE WHEN MAX(FineStato) > @fine THEN @fine ELSE MAX(FineStato) END AS FineStato, IdxStato, SUM( DATEDIFF(n, CASE WHEN InizioStato < @inizio THEN @inizio ELSE InizioStato END, CASE WHEN ISNULL(FineStato, GETDATE()) > @fine THEN @fine ELSE FineStato END) ) AS DurataMinuti FROM my_cte GROUP BY IdxMacchina, IdxStato ORDER BY DurataMinuti DESC /* SELECT IdxMacchina, MIN(InizioStato) AS InizioStato, MAX(FineStato) AS FineStato, IdxStato, SUM(ISNULL(DurataMinuti, DATEDIFF(n, InizioStato, GETDATE()))) AS DurataMinuti FROM DiarioDiBordo WHERE IdxMacchina=@IdxMacchina AND DurataMinuti >= @minDurata AND IdxStato <>11 AND (((FineStato <= @fine) AND (InizioStato >= @inizio)) OR ((FineStato IS NULL) AND (InizioStato >= @inizio AND InizioStato <= @fine))) GROUP BY IdxMacchina, IdxStato ORDER BY DurataMinuti DESC */ RETURN go commit; go drop table AnagraficaStatiOld; go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /************************************* * STORED PROCEDURE stp_repDonati_getDatiProdMacchina * restituisce i dati di produzione di una macchina * * modif.: S.E.L. - 2012.03.08 **************************************/ alter PROCEDURE stp_repDonati_getDatiProdMacchina ( @idxMacchina NVARCHAR(50) ) AS -- calcolo codice articolo DECLARE @CodArticolo NVARCHAR (50) SET @CodArticolo = ( SELECT CodArticolo FROM Kanban k INNER JOIN StatoMacchine sm ON k.MatricolaKanban=sm.MatricolaKanban WHERE sm.IdxMacchina = @idxMacchina ) -- calcolo il codice operatore DECLARE @CodOperatore INT SET @CodOperatore = ( SELECT MatrOpr FROM StatoMacchine WHERE IdxMacchina = @idxMacchina ) -- calcolo il codice ODL DECLARE @idxODL INT SET @idxODL = ( SELECT idxODL FROM ODL WHERE CodArticolo = @CodArticolo AND IdxMacchina = @idxMacchina AND (ISNULL(DataFine,DATEADD(hh,1,GETDATE())) > GETDATE()) ) DECLARE @PezziConf INT SET @PezziConf = ( SELECT ISNULL(SUM(TotPzProd),0) FROM DatiProduzione WHERE idxODL = @idxOdl ) DECLARE @PezziLanciati INT SET @PezziLanciati =( SELECT ISNULL(SUM(NumPezzi),0) FROM ODL WHERE idxODL = @idxOdl ) DECLARE @TCAss DECIMAL(18,8) SET @TCAss = ( SELECT ISNULL(SUM(TCAssegnato),0) FROM ODL WHERE idxODL = @idxOdl ) -- dato l'ODL calcolo il TC Medio ed i pezzi prodotti per l'ODL DECLARE @inizioOdl DATETIME SET @inizioOdl = ( SELECT DataInizio FROM ODL WHERE idxODL = @idxOdl ) DECLARE @PezziProd INT SET @PezziProd = ( SELECT COUNT(*) FROM TempiCicloRilevati WHERE DataOraRif >= @inizioOdl ) /**************************************************** * Calcolo tempi apertura confermati ****************************************************/ -- calcolo i tempi di apertura: TempoON (Verde + giallo + rosso) DECLARE @TempoOn DECIMAL(18,8) SET @TempoOn = ( SELECT ISNULL(SUM(Tempo),0) FROM DatiProduzione WHERE ClasseTempo NOT IN ('T_OFF', 'T_OFF_ND') AND idxODL = @idxOdl ) -- calcolo i tempi di apertura: TempoAuto (Verde + giallo) - precedente meno "T_FermoRosso" DECLARE @TempoAuto DECIMAL(18,8) SET @TempoAuto = ( SELECT @TempoOn - ISNULL(SUM(Tempo),0) FROM DatiProduzione WHERE ClasseTempo = 'T_FermoRosso' AND idxODL = @idxOdl ) -- calcolo i tempi di apertura: TempoRun (Verde) DECLARE @TempoRun DECIMAL(18,8) SET @TempoRun = ( SELECT ISNULL(SUM(Tempo),0) FROM DatiProduzione WHERE ClasseTempo = 'T_AutoRun' AND idxODL = @idxOdl ) /**************************************************** * Calcolo tempi apertura realtime ****************************************************/ -- calcolo i tempi di apertura: TempoON (Verde + giallo + rosso) DECLARE @TempoOnRT DECIMAL(18,8) SET @TempoOnRT = ( SELECT ISNULL(SUM(DurataMinuti),0) FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato WHERE AnSt.ClasseTempo NOT IN ('T_OFF', 'T_OFF_ND') AND InizioStato >= @inizioOdl ) -- calcolo i tempi di apertura: TempoAuto (Verde + giallo) - precedente meno "T_FermoRosso" DECLARE @TempoAutoRT DECIMAL(18,8) SET @TempoAutoRT = ( SELECT @TempoOnRT - ISNULL(SUM(DurataMinuti),0) FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato WHERE AnSt.ClasseTempo = 'T_FermoRosso' AND InizioStato >= @inizioOdl ) -- calcolo i tempi di apertura: TempoRun (Verde) DECLARE @TempoRunRT DECIMAL(18,8) SET @TempoRunRT = ( SELECT ISNULL(SUM(DurataMinuti),0) FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato WHERE AnSt.ClasseTempo = 'T_AutoRun' AND InizioStato >= @inizioOdl ) /**************************************************** * Calcolo i TEMPI CICLO confermati ****************************************************/ DECLARE @TCMed DECIMAL(18,8) SET @TCMed = ( SELECT @TempoOn * 60 / @PezziConf -- tempo in ore ) DECLARE @TCLav DECIMAL(18,8) SET @TCLav = ( SELECT @TempoAuto * 60 / @PezziConf -- tempo in ore ) DECLARE @TCEff DECIMAL(18,8) SET @TCEff = ( SELECT @TempoRun * 60 / @PezziConf -- tempo in ore ) /**************************************************** * Calcolo i TEMPI CICLO realtime (anche non confermati) ****************************************************/ DECLARE @TCMedRT DECIMAL(18,8) SET @TCMedRT = ( SELECT @TempoOnRT / @PezziProd ) DECLARE @TCLavRT DECIMAL(18,8) SET @TCLavRT = ( SELECT @TempoAutoRT / @PezziProd ) DECLARE @TCEffRT DECIMAL(18,8) SET @TCEffRT = ( SELECT @TempoRunRT / @PezziProd ) SELECT @CodArticolo as CodArticolo, @PezziLanciati as PezziLanciati, @PezziProd as PezziProd, @PezziConf as PezziConf, @TCAss AS TCAssegnato, @CodOperatore AS CodOperatore, @TempoOn AS TempoOn, @TempoAuto AS TempoAuto, @TempoRun AS TempoRun, @TCMed AS TCMedio, @TCLav AS TCLav, @TCEff AS TCEff, @TCMedRT AS TCMedioRT, @TCLavRT AS TCLavRT, @TCEffRT AS TCEffRT RETURN go commit; go -- registro versione... INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(310, GETDATE()) GO