Files
Samuele E. Locatelli 2b1479f315 spostamento update SQL
2018-05-03 15:06:47 +02:00

329 lines
9.0 KiB
Transact-SQL

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