1314 lines
39 KiB
Transact-SQL
1314 lines
39 KiB
Transact-SQL
create table CalendApertura(
|
|
NumGG int not null constraint PK_CalendApertura primary key,
|
|
T1 int not null,
|
|
T2 int not null,
|
|
T3 int not null,
|
|
oraInizio int,
|
|
oraFine int
|
|
)
|
|
go
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
INSERT INTO dbo.CalendApertura
|
|
VALUES (1, 8, 8, 8, 0, 24)
|
|
INSERT INTO dbo.CalendApertura
|
|
VALUES (2, 8, 8, 8, 0, 24)
|
|
INSERT INTO dbo.CalendApertura
|
|
VALUES (3, 8, 8, 8, 0, 24)
|
|
INSERT INTO dbo.CalendApertura
|
|
VALUES (4, 8, 8, 8, 0, 24)
|
|
INSERT INTO dbo.CalendApertura
|
|
VALUES (5, 8, 8, 8, 0, 24)
|
|
INSERT INTO dbo.CalendApertura
|
|
VALUES (6, 8, 0, 0, 0, 14)
|
|
INSERT INTO dbo.CalendApertura
|
|
VALUES (7, 0, 0, 8, 22, 24)
|
|
go
|
|
|
|
commit transaction
|
|
go
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
create table DatiProduzione(
|
|
IdxConferma int not null identity constraint PK_DatiProduzione primary key,
|
|
IdxODL int not null,
|
|
DataOraApp datetime not null,
|
|
DataRif datetime not null,
|
|
TurnoRif int,
|
|
CodArticolo nvarchar(50),
|
|
IdxMacchina nvarchar(50) not null,
|
|
TCAssegnato decimal(18,8),
|
|
MatrOpr int,
|
|
MatrApp int not null,
|
|
DataOraFrom datetime,
|
|
DataOraTo datetime,
|
|
TotPzProd int,
|
|
Tempo decimal(18,8),
|
|
ClasseTempo nvarchar(50)
|
|
)
|
|
go
|
|
|
|
exec sp_addextendedproperty 'MS_Description', 'matricola dell''operatore che ha lavorato sulla macchina', 'SCHEMA', 'dbo', 'TABLE', 'DatiProduzione', 'COLUMN', 'MatrOpr'
|
|
go
|
|
|
|
exec sp_addextendedproperty 'MS_Description', 'matricola dell''approvatore del record', 'SCHEMA', 'dbo', 'TABLE', 'DatiProduzione', 'COLUMN', 'MatrApp'
|
|
go
|
|
|
|
exec sp_addextendedproperty 'MS_Description', 'pezzi prodotti in ciclo', 'SCHEMA', 'dbo', 'TABLE', 'DatiProduzione', 'COLUMN', 'TotPzProd'
|
|
go
|
|
|
|
exec sp_addextendedproperty 'MS_Description', 'TCAssegnato x num pezzi prodotti', 'SCHEMA', 'dbo', 'TABLE', 'DatiProduzione', 'COLUMN', 'Tempo'
|
|
go
|
|
|
|
commit
|
|
go
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
set ANSI_NULLS on
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_DatiConf_conferma
|
|
* conferma la produzione per la macchina indicata
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2011.03.30
|
|
**************************************/
|
|
alter PROCEDURE stp_DatiConf_conferma
|
|
(
|
|
@idxODL INT,
|
|
@idxMacchina NVARCHAR(50),
|
|
@MatrApp INT,
|
|
@dataFrom DATETIME,
|
|
@dataTo DATETIME,
|
|
@turno INT,
|
|
@idxStato INT,
|
|
@pezziConf INT
|
|
)
|
|
AS
|
|
|
|
BEGIN TRAN
|
|
|
|
-- calcolo valori
|
|
DECLARE @CodArticolo NVARCHAR(50)
|
|
SET @CodArticolo = ISNULL((SELECT ISNULL(CodArticolo,'') FROM ODL WHERE IdxODL = @idxODL), '')
|
|
DECLARE @TCAss DECIMAL(18,8)
|
|
SET @TCAss = ISNULL((SELECT ISNULL(TCAssegnato, 1) FROM ODL WHERE IdxODL = @idxODL), 1)
|
|
-- versione semplificata: approva tutto x data e turno INIZIALE del periodo indicato
|
|
INSERT INTO DatiConfermati(IdxODL, DataOraApp, DataRif, TurnoRif, CodArticolo, IdxMacchina, TCAssegnato, MatrOpr, MatrApp, DataOraFrom, DataOraTo, IdxStato, TotPzProd, TempoProdotto)
|
|
VALUES (@idxODL, GETDATE(), @dataFrom, @turno, @CodArticolo, @idxMacchina, @TCAss, @MatrApp, @MatrApp, @dataFrom, @dataTo, @idxStato, @pezziConf, @pezziConf*@TCAss)
|
|
|
|
COMMIT TRAN
|
|
|
|
RETURN
|
|
go
|
|
|
|
commit
|
|
go
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
set ANSI_NULLS on
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_DatiProd_insAllPeriodo
|
|
* calcola il tempo da diario di bordo x una macchina dato periodo e inserisce in tabella dati prod INSIEME ai pezzi prodotti
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2011.06.06
|
|
**************************************/
|
|
create PROCEDURE stp_DatiProd_insAllPeriodo
|
|
(
|
|
@IdxMacchina NVARCHAR(50),
|
|
@dataFrom DATETIME,
|
|
@dataTo DATETIME,
|
|
@dataRif DATETIME,
|
|
@turnoRif INT,
|
|
@MatrApp INT
|
|
)
|
|
AS
|
|
|
|
BEGIN TRAN
|
|
-- calcolo i pz prod da confermare per l'intero periodo
|
|
DECLARE @pzProd AS INT
|
|
SET @pzProd = ( SELECT ISNULL(SUM(PzProd),0)
|
|
FROM TempiCicloRilevati
|
|
WHERE IdxMacchina = @idxMacchina
|
|
AND DataOraRif BETWEEN @dataFrom AND @dataTo )
|
|
|
|
-- calcolo l'ODL, l'articolo ed il TCiclo...
|
|
DECLARE @idxODL INT
|
|
SET @idxODL = ( SELECT ISNULL(IdxODL, 0) FROM ODL WHERE (@dataFrom BETWEEN DataInizio AND ISNULL(DataFine, DATEADD(d, 1, GETDATE()))) AND NOT (DataInizio IS NULL) )
|
|
|
|
DECLARE @CodArticolo NVARCHAR(50)
|
|
SET @CodArticolo = ISNULL((SELECT ISNULL(CodArticolo,'') FROM ODL WHERE IdxODL = @idxODL), '')
|
|
|
|
DECLARE @TCAss DECIMAL(18,8)
|
|
SET @TCAss = ISNULL((SELECT ISNULL(TCAssegnato, 1) FROM ODL WHERE IdxODL = @idxODL), 1)
|
|
|
|
-- dichiaro le ore che calcolo man mano...
|
|
DECLARE @totOre DECIMAL(18,8)
|
|
DECLARE @ClasseTempo NVARCHAR(50)
|
|
|
|
-- variabili x ricerca gg festivi o aperture/chiusure ND programmate
|
|
DECLARE @chiusura INT
|
|
DECLARE @apertura INT
|
|
DECLARE @ggSett INT
|
|
-- verifico se sia giorno di chiusura, in tal caso carico 8 h in T_OFF_ND
|
|
SET @chiusura = ( SELECT COUNT(*) FROM CalendFesteFerie WHERE data = @dataRif )
|
|
-- verifico che da apertura sia un periodo valido e non di fermo programmato
|
|
IF(@chiusura = 0)
|
|
BEGIN
|
|
-- controllo a seconda della data e turno a che gg di settimana e turno corrisponde...
|
|
SET DATEFIRST 1; -- setto al lunedì inizio settimana
|
|
SET @ggSett = DATEPART(dw, @dataFrom ) -- calcolo giorno
|
|
SET @apertura = ( SELECT CASE @turnoRif WHEN 1 THEN T1 WHEN 2 THEN T2 ELSE T3 END FROM CalendApertura WHERE NumGG = @ggSett ) -- cerco ore apertura...
|
|
SET @chiusura = ( SELECT CASE @apertura WHEN 8 THEN 0 ELSE 1 END ) -- e se sia turno valido (8h) o vuoto (0h) nel qual caso chiusura > 0
|
|
END
|
|
-- se c'è chiusura per turno singolo o per giorno intero...
|
|
IF(@chiusura > 0)
|
|
BEGIN
|
|
SET @ClasseTempo = 'T_OFF_ND'
|
|
SET @totOre = 8
|
|
INSERT INTO DatiProduzione(IdxODL, DataOraApp, DataRif, TurnoRif, CodArticolo, IdxMacchina, TCAssegnato, MatrOpr, MatrApp,
|
|
DataOraFrom, DataOraTo, TotPzProd, Tempo, ClasseTempo)
|
|
VALUES (@idxODL, GETDATE(), @dataRif, @turnoRif, @CodArticolo, @IdxMacchina, @TCAss, @MatrApp, @MatrApp,
|
|
@dataFrom, @dataTo, @pzProd, @totOre, @ClasseTempo)
|
|
END
|
|
ELSE -- normale dichiarazione
|
|
BEGIN
|
|
-- inserisco i dati di SOLO tempo prodotto e pz prodotti
|
|
SET @ClasseTempo = 'T_AutoRun'
|
|
SET @totOre = dbo.f_calcolaTempoClasse_ByInterv(@IdxMacchina, @dataFrom, @dataTo, @ClasseTempo)
|
|
IF(@totOre > 0)
|
|
BEGIN
|
|
INSERT INTO DatiProduzione(IdxODL, DataOraApp, DataRif, TurnoRif, CodArticolo, IdxMacchina, TCAssegnato, MatrOpr, MatrApp,
|
|
DataOraFrom, DataOraTo, TotPzProd, Tempo, ClasseTempo)
|
|
VALUES (@idxODL, GETDATE(), @dataRif, @turnoRif, @CodArticolo, @IdxMacchina, @TCAss, @MatrApp, @MatrApp,
|
|
@dataFrom, @dataTo, @pzProd, @totOre, @ClasseTempo)
|
|
END
|
|
|
|
-- inserisco gli altri tempi, pezzi prod ZERO!!!
|
|
SET @ClasseTempo = 'T_Microfermo'
|
|
SET @totOre = dbo.f_calcolaTempoClasse_ByInterv(@IdxMacchina, @dataFrom, @dataTo, @ClasseTempo)
|
|
IF(@totOre > 0)
|
|
BEGIN
|
|
INSERT INTO DatiProduzione(IdxODL, DataOraApp, DataRif, TurnoRif, CodArticolo, IdxMacchina, TCAssegnato, MatrOpr, MatrApp,
|
|
DataOraFrom, DataOraTo, TotPzProd, Tempo, ClasseTempo)
|
|
VALUES (@idxODL, GETDATE(), @dataRif, @turnoRif, @CodArticolo, @IdxMacchina, @TCAss, @MatrApp, @MatrApp,
|
|
@dataFrom, @dataTo, 0, @totOre, @ClasseTempo)
|
|
END
|
|
|
|
SET @ClasseTempo = 'T_FermoGiallo'
|
|
SET @totOre = dbo.f_calcolaTempoClasse_ByInterv(@IdxMacchina, @dataFrom, @dataTo, @ClasseTempo)
|
|
IF(@totOre > 0)
|
|
BEGIN
|
|
INSERT INTO DatiProduzione(IdxODL, DataOraApp, DataRif, TurnoRif, CodArticolo, IdxMacchina, TCAssegnato, MatrOpr, MatrApp,
|
|
DataOraFrom, DataOraTo, TotPzProd, Tempo, ClasseTempo)
|
|
VALUES (@idxODL, GETDATE(), @dataRif, @turnoRif, @CodArticolo, @IdxMacchina, @TCAss, @MatrApp, @MatrApp,
|
|
@dataFrom, @dataTo, 0, @totOre, @ClasseTempo)
|
|
END
|
|
|
|
SET @ClasseTempo = 'T_FermoRosso'
|
|
SET @totOre = dbo.f_calcolaTempoClasse_ByInterv(@IdxMacchina, @dataFrom, @dataTo, @ClasseTempo)
|
|
IF(@totOre > 0)
|
|
BEGIN
|
|
INSERT INTO DatiProduzione(IdxODL, DataOraApp, DataRif, TurnoRif, CodArticolo, IdxMacchina, TCAssegnato, MatrOpr, MatrApp,
|
|
DataOraFrom, DataOraTo, TotPzProd, Tempo, ClasseTempo)
|
|
VALUES (@idxODL, GETDATE(), @dataRif, @turnoRif, @CodArticolo, @IdxMacchina, @TCAss, @MatrApp, @MatrApp,
|
|
@dataFrom, @dataTo, 0, @totOre, @ClasseTempo)
|
|
END
|
|
|
|
SET @ClasseTempo = 'T_OFF'
|
|
SET @totOre = dbo.f_calcolaTempoClasse_ByInterv(@IdxMacchina, @dataFrom, @dataTo, @ClasseTempo)
|
|
IF(@totOre > 0)
|
|
BEGIN
|
|
INSERT INTO DatiProduzione(IdxODL, DataOraApp, DataRif, TurnoRif, CodArticolo, IdxMacchina, TCAssegnato, MatrOpr, MatrApp,
|
|
DataOraFrom, DataOraTo, TotPzProd, Tempo, ClasseTempo)
|
|
VALUES (@idxODL, GETDATE(), @dataRif, @turnoRif, @CodArticolo, @IdxMacchina, @TCAss, @MatrApp, @MatrApp,
|
|
@dataFrom, @dataTo, 0, @totOre, @ClasseTempo)
|
|
END
|
|
END
|
|
|
|
COMMIT TRAN
|
|
RETURN
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_DatiProd_insert
|
|
* dichiara i dati x la machcina indicata x tab DatiProduzione
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2011.06.06
|
|
**************************************/
|
|
create PROCEDURE stp_DatiProd_insert
|
|
(
|
|
@idxODL INT,
|
|
@idxMacchina NVARCHAR(50),
|
|
@MatrApp INT,
|
|
@dataFrom DATETIME,
|
|
@dataTo DATETIME,
|
|
@turno INT,
|
|
@pezziConf INT,
|
|
@Tempo DECIMAL(18,8),
|
|
@ClasseTempo NVARCHAR(50)
|
|
)
|
|
AS
|
|
|
|
BEGIN TRAN
|
|
-- calcolo variabili
|
|
DECLARE @CodArticolo NVARCHAR(50)
|
|
SET @CodArticolo = ISNULL((SELECT ISNULL(CodArticolo,'') FROM ODL WHERE IdxODL = @idxODL), '')
|
|
DECLARE @TCAss DECIMAL(18,8)
|
|
SET @TCAss = ISNULL((SELECT ISNULL(TCAssegnato, 1) FROM ODL WHERE IdxODL = @idxODL), 1)
|
|
-- versione semplificata: approva tutto x data e turno INIZIALE del periodo indicato
|
|
INSERT INTO DatiProduzione(IdxODL, DataOraApp, DataRif, TurnoRif, CodArticolo, IdxMacchina, TCAssegnato, MatrOpr, MatrApp, DataOraFrom, DataOraTo, TotPzProd, Tempo, ClasseTempo)
|
|
VALUES (@idxODL, GETDATE(), @dataFrom, @turno, @CodArticolo, @idxMacchina, @TCAss, @MatrApp, @MatrApp, @dataFrom, @dataTo, @pezziConf, @Tempo, @ClasseTempo)
|
|
|
|
COMMIT TRAN
|
|
|
|
RETURN
|
|
go
|
|
|
|
commit
|
|
go
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
set ANSI_NULLS on
|
|
go
|
|
|
|
/*************************************
|
|
* Function f_calcolaTempoClasse_ByInterv
|
|
* calcola il totale del tempo di una classe fermata per un intervallo date
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2011.06.07
|
|
**************************************/
|
|
create FUNCTION f_calcolaTempoClasse_ByInterv
|
|
(
|
|
@IdxMacchina NVARCHAR(50),
|
|
@dataFrom DATETIME,
|
|
@dataTo DATETIME,
|
|
@classeTempo NVARCHAR(50)
|
|
)
|
|
RETURNS DECIMAL(18,8)
|
|
AS
|
|
BEGIN
|
|
-- dichiaro out
|
|
DECLARE @totOre AS DECIMAL(18,8)
|
|
DECLARE @incl AS DECIMAL(18,8)
|
|
DECLARE @start AS DECIMAL(18,8)
|
|
DECLARE @end AS DECIMAL(18,8)
|
|
DECLARE @full AS DECIMAL(18,8)
|
|
|
|
-- inizio calcolando il tempo degli eventi totalmente inclusi nell'intervallo
|
|
SET @incl = (SELECT CAST(ISNULL(SUM(ddb.DurataMinuti),0) AS DECIMAL(18,8)) / 60 AS Tempo
|
|
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati a ON ddb.IdxStato = a.IdxStato
|
|
WHERE (ddb.IdxMacchina = @IdxMacchina)
|
|
AND (ddb.InizioStato BETWEEN @dataFrom AND @dataTo)
|
|
AND (ddb.FineStato BETWEEN @dataFrom AND @dataTo)
|
|
AND a.ClasseTempo = @classeTempo)
|
|
|
|
-- ora sommo gli eventi sui bordi: inizio...
|
|
SET @start = (SELECT CAST(ISNULL(DATEDIFF(n, @dataFrom, CASE WHEN ddb.FineStato < @dataTo THEN ddb.FineStato ELSE @dataTo END) ,0) AS DECIMAL(18,8)) / 60 AS Tempo
|
|
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati a ON ddb.IdxStato = a.IdxStato
|
|
WHERE (ddb.IdxMacchina = @IdxMacchina)
|
|
AND (ddb.InizioStato < @dataFrom)
|
|
AND (ddb.FineStato BETWEEN @dataFrom AND @dataTo)
|
|
AND a.ClasseTempo = @classeTempo)
|
|
|
|
-- ...e fine...
|
|
SET @end = (SELECT CAST(ISNULL(DATEDIFF(n, CASE WHEN ddb.InizioStato < @dataFrom THEN @dataFrom ELSE ddb.InizioStato END, @dataTo) ,0) AS DECIMAL(18,8)) / 60 AS Tempo
|
|
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati a ON ddb.IdxStato = a.IdxStato
|
|
WHERE (ddb.IdxMacchina = @IdxMacchina)
|
|
AND (ddb.InizioStato BETWEEN @dataFrom AND @dataTo)
|
|
AND (ddb.FineStato > @dataTo)
|
|
AND a.ClasseTempo = @classeTempo)
|
|
|
|
-- ...e pure eventi totalmente overlapping...
|
|
SET @full = (SELECT CAST(ISNULL(DATEDIFF(n, @dataFrom, @dataTo) ,0) AS DECIMAL(18,8)) / 60 AS Tempo
|
|
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati a ON ddb.IdxStato = a.IdxStato
|
|
WHERE (ddb.IdxMacchina = @IdxMacchina)
|
|
AND (ddb.InizioStato < @dataFrom)
|
|
AND (ddb.FineStato > @dataTo)
|
|
AND a.ClasseTempo = @classeTempo)
|
|
|
|
-- sommo!
|
|
SET @totOre = (ISNULL(@incl,0) + ISNULL(@start,0) + ISNULL(@end,0) + ISNULL(@full,0))
|
|
|
|
RETURN @totOre
|
|
|
|
END
|
|
go
|
|
|
|
commit
|
|
go
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
set ANSI_NULLS on
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_PzProd_getByMacchinaPeriodo
|
|
* recupera per la macchina indicata i pezzi prodotti nel periodo
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2011.06.06
|
|
**************************************/
|
|
create PROCEDURE stp_PzProd_getByMacchinaPeriodo
|
|
(
|
|
@idxMacchina NVARCHAR(50),
|
|
@startProd DATETIME,
|
|
@endProd DATETIME
|
|
)
|
|
AS
|
|
|
|
BEGIN TRAN
|
|
|
|
SELECT @idxMacchina as idxMacchina, ISNULL(SUM(PzProd),0) as pezziNonConfermati, @startProd AS DataFrom, @endProd AS DataTo
|
|
FROM TempiCicloRilevati
|
|
WHERE IdxMacchina = @idxMacchina
|
|
AND DataOraRif BETWEEN @startProd AND @endProd
|
|
|
|
COMMIT TRAN
|
|
|
|
RETURN
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_TempoByIdxMaccPeriodClass
|
|
* calcola il tempo da diario di bordo x una macchian dato periodo e tipo classe stati
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2011.06.06
|
|
**************************************/
|
|
create PROCEDURE stp_TempoByIdxMaccPeriodClass
|
|
(
|
|
@IdxMacchina NVARCHAR(50),
|
|
@DataFrom DATETIME,
|
|
@DataTo DATETIME,
|
|
@ClasseTempo NVARCHAR(50)
|
|
)
|
|
AS
|
|
|
|
|
|
SELECT CAST(ISNULL(SUM(ddb.DurataMinuti),0) AS DECIMAL(18,8)) / 60 AS ore FROM DiarioDiBordo ddb
|
|
INNER JOIN AnagraficaStati a ON ddb.IdxStato = a.IdxStato
|
|
WHERE (a.ClasseTempo = @ClasseTempo)
|
|
AND (ddb.IdxMacchina = @IdxMacchina)
|
|
AND (ddb.InizioStato >= @DataFrom)
|
|
AND (ddb.FineStato <= @DataTo)
|
|
|
|
RETURN
|
|
go
|
|
|
|
commit
|
|
go
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ClasseTempo=N'T_Microfermo'
|
|
WHERE IdxStato=1
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ClasseTempo=N'T_FermoGiallo'
|
|
WHERE IdxStato=2
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ClasseTempo=N'T_FermoGiallo'
|
|
WHERE IdxStato=3
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ClasseTempo=N'T_FermoRosso'
|
|
WHERE IdxStato=4
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ClasseTempo=N'T_FermoRosso'
|
|
WHERE IdxStato=5
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ClasseTempo=N'T_Microfermo'
|
|
WHERE IdxStato=6
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ClasseTempo=N'T_FermoRosso'
|
|
WHERE IdxStato=7
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ClasseTempo=N'T_FermoRosso'
|
|
WHERE IdxStato=8
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ClasseTempo=N'T_FermoRosso'
|
|
WHERE IdxStato=9
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ClasseTempo=N'T_FermoGiallo'
|
|
WHERE IdxStato=10
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ClasseTempo=N'T_Microfermo'
|
|
WHERE IdxStato=12
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ClasseTempo=N'T_FermoRosso'
|
|
WHERE IdxStato=15
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ClasseTempo=N'T_FermoRosso'
|
|
WHERE IdxStato=23
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ClasseTempo=N'T_FermoGiallo'
|
|
WHERE IdxStato=24
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ClasseTempo=N'T_FermoGiallo'
|
|
WHERE IdxStato=25
|
|
INSERT INTO dbo.AnagraficaStati
|
|
VALUES (26, N'Non Disponibile', N'S', 1, N'T_OFF_ND')
|
|
go
|
|
|
|
commit transaction
|
|
go
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
INSERT INTO dbo.AnagClassiTempo
|
|
VALUES (N'T_Microfermo', N'Microfermate')
|
|
INSERT INTO dbo.AnagClassiTempo
|
|
VALUES (N'T_OFF', N'Macchina spenta')
|
|
INSERT INTO dbo.AnagClassiTempo
|
|
VALUES (N'T_OFF_ND', N'Macchina in tempo Non Disponibile')
|
|
INSERT INTO dbo.AnagClassiTempo
|
|
VALUES (N'T_FermoGiallo', N'Macchina in Automatico, ferma per attrezzaggi o fermi a ciclo')
|
|
INSERT INTO dbo.AnagClassiTempo
|
|
VALUES (N'T_FermoRosso', N'Macchina Ferma in RUN')
|
|
go
|
|
|
|
commit transaction
|
|
go
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
DELETE FROM dbo.AnagClassiTempo WHERE ClasseTempo=N'T_Auto'
|
|
DELETE FROM dbo.AnagClassiTempo WHERE ClasseTempo=N'T_Fermo'
|
|
DELETE FROM dbo.AnagClassiTempo WHERE ClasseTempo=N'T_ND'
|
|
go
|
|
|
|
commit transaction
|
|
go
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
INSERT INTO dbo.CalendFesteFerie
|
|
VALUES ('2011-04-25 00:00:00.000', N'festa della liberazione')
|
|
INSERT INTO dbo.CalendFesteFerie
|
|
VALUES ('2011-05-01 00:00:00.000', N'festa dei lavoratori')
|
|
INSERT INTO dbo.CalendFesteFerie
|
|
VALUES ('2011-06-02 00:00:00.000', N'festa della repubblica')
|
|
go
|
|
|
|
commit transaction
|
|
go
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
set ANSI_NULLS on
|
|
go
|
|
|
|
/*************************************
|
|
* Function f_calcolaTempoStato_ByInterv
|
|
* calcola il totale del tempo di uno stato per un intervallo date
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2011.06.23
|
|
**************************************/
|
|
create FUNCTION f_calcolaTempoStato_ByInterv
|
|
(
|
|
@IdxMacchina NVARCHAR(50),
|
|
@dataFrom DATETIME,
|
|
@dataTo DATETIME,
|
|
@IdxStato INT
|
|
)
|
|
RETURNS DECIMAL(18,8)
|
|
AS
|
|
BEGIN
|
|
-- dichiaro out
|
|
DECLARE @totOre AS DECIMAL(18,8)
|
|
DECLARE @incl AS DECIMAL(18,8)
|
|
DECLARE @start AS DECIMAL(18,8)
|
|
DECLARE @end AS DECIMAL(18,8)
|
|
DECLARE @full AS DECIMAL(18,8)
|
|
|
|
-- inizio calcolando il tempo degli eventi totalmente inclusi nell'intervallo
|
|
SET @incl = (SELECT CAST(ISNULL(SUM(ddb.DurataMinuti),0) AS DECIMAL(18,8)) / 60 AS Tempo
|
|
FROM DiarioDiBordo ddb
|
|
WHERE (ddb.IdxMacchina = @IdxMacchina)
|
|
AND (ddb.InizioStato BETWEEN @dataFrom AND @dataTo)
|
|
AND (ddb.FineStato BETWEEN @dataFrom AND @dataTo)
|
|
AND IdxStato = @IdxStato)
|
|
|
|
-- ora sommo gli eventi sui bordi: inizio...
|
|
SET @start = (SELECT CAST(ISNULL(DATEDIFF(n, @dataFrom, CASE WHEN ddb.FineStato < @dataTo THEN ddb.FineStato ELSE @dataTo END) ,0) AS DECIMAL(18,8)) / 60 AS Tempo
|
|
FROM DiarioDiBordo ddb
|
|
WHERE (ddb.IdxMacchina = @IdxMacchina)
|
|
AND (ddb.InizioStato < @dataFrom)
|
|
AND (ddb.FineStato BETWEEN @dataFrom AND @dataTo)
|
|
AND IdxStato = @IdxStato)
|
|
|
|
-- ...e fine...
|
|
SET @end = (SELECT CAST(ISNULL(DATEDIFF(n, CASE WHEN ddb.InizioStato < @dataFrom THEN @dataFrom ELSE ddb.InizioStato END, @dataTo) ,0) AS DECIMAL(18,8)) / 60 AS Tempo
|
|
FROM DiarioDiBordo ddb
|
|
WHERE (ddb.IdxMacchina = @IdxMacchina)
|
|
AND (ddb.InizioStato BETWEEN @dataFrom AND @dataTo)
|
|
AND (ddb.FineStato > @dataTo)
|
|
AND IdxStato = @IdxStato)
|
|
|
|
-- ...e pure eventi totalmente overlapping...
|
|
SET @full = (SELECT CAST(ISNULL(DATEDIFF(n, @dataFrom, @dataTo) ,0) AS DECIMAL(18,8)) / 60 AS Tempo
|
|
FROM DiarioDiBordo ddb
|
|
WHERE (ddb.IdxMacchina = @IdxMacchina)
|
|
AND (ddb.InizioStato < @dataFrom)
|
|
AND (ddb.FineStato > @dataTo)
|
|
AND IdxStato = @IdxStato)
|
|
|
|
|
|
-- sommo!
|
|
SET @totOre = (ISNULL(@incl,0) + ISNULL(@start,0) + ISNULL(@end,0) + ISNULL(@full,0))
|
|
|
|
RETURN @totOre
|
|
|
|
END
|
|
go
|
|
|
|
commit
|
|
go
|
|
|
|
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
alter table DatiProduzione add
|
|
Causale nvarchar(50)
|
|
go
|
|
|
|
set ANSI_NULLS on
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_DatiProd_insAllPeriodo
|
|
* calcola il tempo da diario di bordo x una macchina dato periodo e inserisce in tabella dati prod INSIEME ai pezzi prodotti
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2011.06.06
|
|
**************************************/
|
|
alter PROCEDURE stp_DatiProd_insAllPeriodo
|
|
(
|
|
@IdxMacchina NVARCHAR(50),
|
|
@dataFrom DATETIME,
|
|
@dataTo DATETIME,
|
|
@dataRif DATETIME,
|
|
@turnoRif INT,
|
|
@MatrApp INT
|
|
)
|
|
AS
|
|
|
|
BEGIN TRAN
|
|
-- calcolo i pz prod da confermare per l'intero periodo
|
|
DECLARE @pzProd AS INT
|
|
SET @pzProd = ( SELECT ISNULL(SUM(PzProd),0)
|
|
FROM TempiCicloRilevati
|
|
WHERE IdxMacchina = @idxMacchina
|
|
AND DataOraRif BETWEEN @dataFrom AND @dataTo )
|
|
|
|
-- calcolo l'ODL, l'articolo ed il TCiclo...
|
|
DECLARE @idxODL INT
|
|
SET @idxODL = ( SELECT ISNULL(IdxODL, 0) FROM ODL WHERE (@dataFrom BETWEEN DataInizio AND ISNULL(DataFine, DATEADD(d, 1, GETDATE()))) AND NOT (DataInizio IS NULL) )
|
|
|
|
DECLARE @CodArticolo NVARCHAR(50)
|
|
SET @CodArticolo = ISNULL((SELECT ISNULL(CodArticolo,'') FROM ODL WHERE IdxODL = @idxODL), '')
|
|
|
|
DECLARE @TCAss DECIMAL(18,8)
|
|
SET @TCAss = ISNULL((SELECT ISNULL(TCAssegnato, 1) FROM ODL WHERE IdxODL = @idxODL), 1)
|
|
|
|
-- dichiaro le ore che calcolo man mano...
|
|
DECLARE @totOre DECIMAL(18,8)
|
|
DECLARE @ClasseTempo NVARCHAR(50)
|
|
|
|
-- variabili x ricerca gg festivi o aperture/chiusure ND programmate
|
|
DECLARE @chiusura INT
|
|
DECLARE @apertura INT
|
|
DECLARE @ggSett INT
|
|
-- verifico se sia giorno di chiusura, in tal caso carico 8 h in T_OFF_ND
|
|
SET @chiusura = ( SELECT COUNT(*) FROM CalendFesteFerie WHERE data = @dataRif )
|
|
-- verifico che da apertura sia un periodo valido e non di fermo programmato
|
|
IF(@chiusura = 0)
|
|
BEGIN
|
|
-- controllo a seconda della data e turno a che gg di settimana e turno corrisponde...
|
|
SET DATEFIRST 1; -- setto al lunedì inizio settimana
|
|
SET @ggSett = DATEPART(dw, @dataFrom ) -- calcolo giorno
|
|
SET @apertura = ( SELECT CASE @turnoRif WHEN 1 THEN T1 WHEN 2 THEN T2 ELSE T3 END FROM CalendApertura WHERE NumGG = @ggSett ) -- cerco ore apertura...
|
|
SET @chiusura = ( SELECT CASE @apertura WHEN 8 THEN 0 ELSE 1 END ) -- e se sia turno valido (8h) o vuoto (0h) nel qual caso chiusura > 0
|
|
END
|
|
-- se c'è chiusura per turno singolo o per giorno intero...
|
|
IF(@chiusura > 0)
|
|
BEGIN
|
|
SET @ClasseTempo = 'T_OFF_ND'
|
|
SET @totOre = 8
|
|
INSERT INTO DatiProduzione(IdxODL, DataOraApp, DataRif, TurnoRif, CodArticolo, IdxMacchina, TCAssegnato, MatrOpr, MatrApp,
|
|
DataOraFrom, DataOraTo, TotPzProd, Tempo, ClasseTempo, Causale)
|
|
VALUES (@idxODL, GETDATE(), @dataRif, @turnoRif, @CodArticolo, @IdxMacchina, @TCAss, @MatrApp, @MatrApp,
|
|
@dataFrom, @dataTo, @pzProd, @totOre, @ClasseTempo, @ClasseTempo)
|
|
END
|
|
ELSE -- normale dichiarazione
|
|
BEGIN
|
|
-- inserisco i dati di SOLO tempo prodotto e pz prodotti
|
|
SET @ClasseTempo = 'T_AutoRun'
|
|
SET @totOre = dbo.f_calcolaTempoClasse_ByInterv(@IdxMacchina, @dataFrom, @dataTo, @ClasseTempo)
|
|
IF(@totOre > 0)
|
|
BEGIN
|
|
INSERT INTO DatiProduzione(IdxODL, DataOraApp, DataRif, TurnoRif, CodArticolo, IdxMacchina, TCAssegnato, MatrOpr, MatrApp,
|
|
DataOraFrom, DataOraTo, TotPzProd, Tempo, ClasseTempo, Causale)
|
|
VALUES (@idxODL, GETDATE(), @dataRif, @turnoRif, @CodArticolo, @IdxMacchina, @TCAss, @MatrApp, @MatrApp,
|
|
@dataFrom, @dataTo, @pzProd, @totOre, @ClasseTempo, @ClasseTempo)
|
|
END
|
|
|
|
-- inserisco gli altri tempi, pezzi prod ZERO!!!
|
|
SET @ClasseTempo = 'T_Microfermo'
|
|
SET @totOre = dbo.f_calcolaTempoClasse_ByInterv(@IdxMacchina, @dataFrom, @dataTo, @ClasseTempo)
|
|
IF(@totOre > 0)
|
|
BEGIN
|
|
-- scrivo tutti gli eventi della classe
|
|
EXEC stp_DatiProd_insClasseTempo @IdxMacchina, @dataFrom, @dataTo, @dataRif, @turnoRif, @MatrApp, @idxODL, @CodArticolo, @TCAss, @ClasseTempo
|
|
END
|
|
|
|
SET @ClasseTempo = 'T_FermoGiallo'
|
|
SET @totOre = dbo.f_calcolaTempoClasse_ByInterv(@IdxMacchina, @dataFrom, @dataTo, @ClasseTempo)
|
|
IF(@totOre > 0)
|
|
BEGIN
|
|
-- scrivo tutti gli eventi della classe
|
|
EXEC stp_DatiProd_insClasseTempo @IdxMacchina, @dataFrom, @dataTo, @dataRif, @turnoRif, @MatrApp, @idxODL, @CodArticolo, @TCAss, @ClasseTempo
|
|
END
|
|
|
|
SET @ClasseTempo = 'T_FermoRosso'
|
|
SET @totOre = dbo.f_calcolaTempoClasse_ByInterv(@IdxMacchina, @dataFrom, @dataTo, @ClasseTempo)
|
|
IF(@totOre > 0)
|
|
BEGIN
|
|
-- scrivo tutti gli eventi della classe
|
|
EXEC stp_DatiProd_insClasseTempo @IdxMacchina, @dataFrom, @dataTo, @dataRif, @turnoRif, @MatrApp, @idxODL, @CodArticolo, @TCAss, @ClasseTempo
|
|
END
|
|
|
|
SET @ClasseTempo = 'T_OFF'
|
|
SET @totOre = dbo.f_calcolaTempoClasse_ByInterv(@IdxMacchina, @dataFrom, @dataTo, @ClasseTempo)
|
|
IF(@totOre > 0)
|
|
BEGIN
|
|
-- scrivo tutti gli eventi della classe
|
|
EXEC stp_DatiProd_insClasseTempo @IdxMacchina, @dataFrom, @dataTo, @dataRif, @turnoRif, @MatrApp, @idxODL, @CodArticolo, @TCAss, @ClasseTempo
|
|
END
|
|
END
|
|
|
|
COMMIT TRAN
|
|
RETURN
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_DatiProd_insert
|
|
* dichiara i dati x la machcina indicata x tab DatiProduzione
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2011.06.06
|
|
**************************************/
|
|
alter PROCEDURE stp_DatiProd_insert
|
|
(
|
|
@idxODL INT,
|
|
@idxMacchina NVARCHAR(50),
|
|
@MatrApp INT,
|
|
@dataFrom DATETIME,
|
|
@dataTo DATETIME,
|
|
@turno INT,
|
|
@pezziConf INT,
|
|
@Tempo DECIMAL(18,8),
|
|
@ClasseTempo NVARCHAR(50)
|
|
)
|
|
AS
|
|
|
|
BEGIN TRAN
|
|
-- calcolo variabili
|
|
DECLARE @CodArticolo NVARCHAR(50)
|
|
SET @CodArticolo = ISNULL((SELECT ISNULL(CodArticolo,'') FROM ODL WHERE IdxODL = @idxODL), '')
|
|
DECLARE @TCAss DECIMAL(18,8)
|
|
SET @TCAss = ISNULL((SELECT ISNULL(TCAssegnato, 1) FROM ODL WHERE IdxODL = @idxODL), 1)
|
|
-- versione semplificata: approva tutto x data e turno INIZIALE del periodo indicato
|
|
INSERT INTO DatiProduzione(IdxODL, DataOraApp, DataRif, TurnoRif, CodArticolo, IdxMacchina, TCAssegnato, MatrOpr, MatrApp, DataOraFrom, DataOraTo, TotPzProd, Tempo, ClasseTempo, Causale)
|
|
VALUES (@idxODL, GETDATE(), @dataFrom, @turno, @CodArticolo, @idxMacchina, @TCAss, @MatrApp, @MatrApp, @dataFrom, @dataTo, @pezziConf, @Tempo, @ClasseTempo, @ClasseTempo)
|
|
|
|
COMMIT TRAN
|
|
|
|
RETURN
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_DatiProd_insClasseTempo
|
|
* inserisce i tempi di tutte le SIONGOLE causali rilevate per un intervallo di tempo ed una data classe tempo
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2011.06.23
|
|
**************************************/
|
|
create PROCEDURE stp_DatiProd_insClasseTempo
|
|
(
|
|
@IdxMacchina NVARCHAR(50),
|
|
@dataFrom DATETIME,
|
|
@dataTo DATETIME,
|
|
@dataRif DATETIME,
|
|
@turnoRif INT,
|
|
@MatrApp INT,
|
|
@idxODL INT,
|
|
@CodArticolo NVARCHAR(50),
|
|
@TCAss DECIMAL(18,8),
|
|
@ClasseTempo NVARCHAR(50)
|
|
)
|
|
AS
|
|
|
|
-- creo tab elenco delle fermate raggruppate x classe tempo
|
|
WITH cte_stati AS(
|
|
SELECT DISTINCT ddb.IdxStato, Descrizione as Causale
|
|
FROM DiarioDiBordo AS ddb INNER JOIN AnagraficaStati AS a ON ddb.IdxStato = a.IdxStato
|
|
WHERE (ddb.InizioStato BETWEEN @dataFrom AND @dataTo) AND (a.ClasseTempo = @classeTempo) AND (IdxMacchina = @IdxMacchina)
|
|
)
|
|
|
|
--...e lo inserisco!
|
|
INSERT INTO DatiProduzione(IdxODL, DataOraApp, DataRif, TurnoRif, CodArticolo, IdxMacchina, TCAssegnato, MatrOpr, MatrApp, DataOraFrom,
|
|
DataOraTo, TotPzProd, Tempo, ClasseTempo, Causale)
|
|
(
|
|
SELECT @idxODL, GETDATE(), @dataRif, @turnoRif, @CodArticolo, @IdxMacchina, @TCAss, @MatrApp, @MatrApp, @dataFrom,
|
|
@dataTo, 0, dbo.f_calcolaTempoStato_ByInterv(@IdxMacchina,@dataFrom, @dataTo, IdxStato), @ClasseTempo, Causale
|
|
FROM cte_stati
|
|
)
|
|
|
|
|
|
RETURN
|
|
go
|
|
|
|
commit
|
|
go
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
alter table AnagraficaStati add
|
|
ShowArticolo bit
|
|
go
|
|
|
|
set ANSI_NULLS on
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_DatiProd_insClasseTempo
|
|
* inserisce i tempi di tutte le SIONGOLE causali rilevate per un intervallo di tempo ed una data classe tempo
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2011.06.23
|
|
**************************************/
|
|
alter PROCEDURE stp_DatiProd_insClasseTempo
|
|
(
|
|
@IdxMacchina NVARCHAR(50),
|
|
@dataFrom DATETIME,
|
|
@dataTo DATETIME,
|
|
@dataRif DATETIME,
|
|
@turnoRif INT,
|
|
@MatrApp INT,
|
|
@idxODL INT,
|
|
@CodArticolo NVARCHAR(50),
|
|
@TCAss DECIMAL(18,8),
|
|
@ClasseTempo NVARCHAR(50)
|
|
)
|
|
AS
|
|
|
|
-- creo tab elenco delle fermate raggruppate x classe tempo
|
|
WITH cte_stati AS(
|
|
SELECT DISTINCT ddb.IdxStato, Descrizione as Causale, a.ShowArticolo
|
|
FROM DiarioDiBordo AS ddb INNER JOIN AnagraficaStati AS a ON ddb.IdxStato = a.IdxStato
|
|
WHERE (ddb.InizioStato BETWEEN @dataFrom AND @dataTo) AND (a.ClasseTempo = @classeTempo) AND (IdxMacchina = @IdxMacchina)
|
|
)
|
|
|
|
--...e lo inserisco!
|
|
INSERT INTO DatiProduzione(IdxODL, DataOraApp, DataRif, TurnoRif, CodArticolo, IdxMacchina, TCAssegnato, MatrOpr, MatrApp, DataOraFrom,
|
|
DataOraTo, TotPzProd, Tempo, ClasseTempo, Causale)
|
|
(
|
|
SELECT @idxODL, GETDATE(), @dataRif, @turnoRif, CASE ShowArticolo WHEN 1 THEN @CodArticolo ELSE '' END AS CodArticolo, @IdxMacchina, @TCAss, @MatrApp, @MatrApp, @dataFrom,
|
|
@dataTo, 0, dbo.f_calcolaTempoStato_ByInterv(@IdxMacchina,@dataFrom, @dataTo, IdxStato), @ClasseTempo, Causale
|
|
FROM cte_stati
|
|
)
|
|
|
|
|
|
RETURN
|
|
go
|
|
|
|
commit
|
|
go
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=0
|
|
WHERE IdxStato=1
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=1
|
|
WHERE IdxStato=2
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=1
|
|
WHERE IdxStato=3
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=0
|
|
WHERE IdxStato=4
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=0
|
|
WHERE IdxStato=5
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=1
|
|
WHERE IdxStato=6
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=0
|
|
WHERE IdxStato=7
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=0
|
|
WHERE IdxStato=8
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=0
|
|
WHERE IdxStato=9
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=1
|
|
WHERE IdxStato=10
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=0
|
|
WHERE IdxStato=11
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=1
|
|
WHERE IdxStato=12
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=1
|
|
WHERE IdxStato=13
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=1
|
|
WHERE IdxStato=14
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=0
|
|
WHERE IdxStato=15
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=0
|
|
WHERE IdxStato=23
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=1
|
|
WHERE IdxStato=24
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=1
|
|
WHERE IdxStato=25
|
|
UPDATE dbo.AnagraficaStati SET
|
|
ShowArticolo=0
|
|
WHERE IdxStato=26
|
|
go
|
|
|
|
commit transaction
|
|
go
|
|
|
|
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
set ANSI_NULLS on
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_DatiProd_insClasseTempo
|
|
* inserisce i tempi di tutte le SIONGOLE causali rilevate per un intervallo di tempo ed una data classe tempo
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2011.06.23
|
|
**************************************/
|
|
alter PROCEDURE stp_DatiProd_insClasseTempo
|
|
(
|
|
@IdxMacchina NVARCHAR(50),
|
|
@dataFrom DATETIME,
|
|
@dataTo DATETIME,
|
|
@dataRif DATETIME,
|
|
@turnoRif INT,
|
|
@MatrApp INT,
|
|
@idxODL INT,
|
|
@CodArticolo NVARCHAR(50),
|
|
@TCAss DECIMAL(18,8),
|
|
@ClasseTempo NVARCHAR(50)
|
|
)
|
|
AS
|
|
|
|
-- creo tab elenco delle fermate raggruppate x classe tempo
|
|
WITH cte_stati AS(
|
|
SELECT DISTINCT ddb.IdxStato, Descrizione as Causale, a.ShowArticolo
|
|
FROM DiarioDiBordo AS ddb INNER JOIN AnagraficaStati AS a ON ddb.IdxStato = a.IdxStato
|
|
WHERE (ddb.InizioStato BETWEEN @dataFrom AND @dataTo) AND (a.ClasseTempo = @classeTempo) AND (IdxMacchina = @IdxMacchina)
|
|
)
|
|
|
|
--...e lo inserisco!
|
|
INSERT INTO DatiProduzione(IdxODL, DataOraApp, DataRif, TurnoRif, CodArticolo, IdxMacchina, TCAssegnato, MatrOpr, MatrApp, DataOraFrom,
|
|
DataOraTo, TotPzProd, Tempo, ClasseTempo, Causale)
|
|
(
|
|
SELECT @idxODL, GETDATE(), @dataRif, @turnoRif, CASE ShowArticolo WHEN 1 THEN @CodArticolo ELSE '' END AS CodArticolo, @IdxMacchina, @TCAss, @MatrApp, @MatrApp, @dataFrom,
|
|
@dataTo, 0, dbo.f_calcolaTempoStato_ByInterv(@IdxMacchina,@dataFrom, @dataTo, IdxStato), @ClasseTempo, Causale
|
|
FROM cte_stati
|
|
)
|
|
|
|
|
|
RETURN
|
|
go
|
|
|
|
commit
|
|
go
|
|
|
|
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
set ANSI_NULLS on
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_DatiProd_insClasseTempo
|
|
* inserisce i tempi di tutte le SIONGOLE causali rilevate per un intervallo di tempo ed una data classe tempo
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2011.06.23
|
|
**************************************/
|
|
alter PROCEDURE stp_DatiProd_insClasseTempo
|
|
(
|
|
@IdxMacchina NVARCHAR(50),
|
|
@dataFrom DATETIME,
|
|
@dataTo DATETIME,
|
|
@dataRif DATETIME,
|
|
@turnoRif INT,
|
|
@MatrApp INT,
|
|
@idxODL INT,
|
|
@CodArticolo NVARCHAR(50),
|
|
@TCAss DECIMAL(18,8),
|
|
@ClasseTempo NVARCHAR(50)
|
|
)
|
|
AS
|
|
|
|
-- creo tab elenco delle fermate raggruppate x classe tempo
|
|
WITH cte_stati AS(
|
|
SELECT DISTINCT ddb.IdxStato, Descrizione as Causale, a.ShowArticolo
|
|
FROM DiarioDiBordo AS ddb INNER JOIN AnagraficaStati AS a ON ddb.IdxStato = a.IdxStato
|
|
WHERE (ddb.InizioStato BETWEEN @dataFrom AND @dataTo) AND (a.ClasseTempo = @classeTempo) AND (IdxMacchina = @IdxMacchina)
|
|
)
|
|
|
|
--...e lo inserisco!
|
|
INSERT INTO DatiProduzione(IdxODL, DataOraApp, DataRif, TurnoRif, CodArticolo, IdxMacchina, TCAssegnato, MatrOpr, MatrApp, DataOraFrom,
|
|
DataOraTo, TotPzProd, Tempo, ClasseTempo, Causale)
|
|
(
|
|
SELECT @idxODL, GETDATE(), @dataRif, @turnoRif, CASE ShowArticolo WHEN 1 THEN @CodArticolo ELSE '' END AS CodArticolo, @IdxMacchina, CASE ShowArticolo WHEN 1 THEN @TCAss ELSE 0 END AS TCAss, @MatrApp, @MatrApp, @dataFrom,
|
|
@dataTo, 0, dbo.f_calcolaTempoStato_ByInterv(@IdxMacchina,@dataFrom, @dataTo, IdxStato), @ClasseTempo, Causale
|
|
FROM cte_stati
|
|
)
|
|
|
|
|
|
RETURN
|
|
go
|
|
|
|
commit
|
|
go
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
set ANSI_NULLS on
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_DatiProd_insAllPeriodo
|
|
* calcola il tempo da diario di bordo x una macchina dato periodo e inserisce in tabella dati prod INSIEME ai pezzi prodotti
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2011.06.06
|
|
**************************************/
|
|
alter PROCEDURE stp_DatiProd_insAllPeriodo
|
|
(
|
|
@IdxMacchina NVARCHAR(50),
|
|
@dataFrom DATETIME,
|
|
@dataTo DATETIME,
|
|
@dataRif DATETIME,
|
|
@turnoRif INT,
|
|
@MatrApp INT
|
|
)
|
|
AS
|
|
|
|
BEGIN TRAN
|
|
-- calcolo i pz prod da confermare per l'intero periodo
|
|
DECLARE @pzProd AS INT
|
|
SET @pzProd = ( SELECT ISNULL(SUM(PzProd),0)
|
|
FROM TempiCicloRilevati
|
|
WHERE IdxMacchina = @idxMacchina
|
|
AND DataOraRif BETWEEN @dataFrom AND @dataTo )
|
|
|
|
-- calcolo l'ODL, l'articolo ed il TCiclo...
|
|
DECLARE @idxODL INT
|
|
SET @idxODL = ( SELECT ISNULL(IdxODL, 0) FROM ODL WHERE (@dataFrom BETWEEN DataInizio AND ISNULL(DataFine, DATEADD(d, 1, GETDATE()))) AND NOT (DataInizio IS NULL) )
|
|
|
|
DECLARE @CodArticolo NVARCHAR(50)
|
|
SET @CodArticolo = ISNULL((SELECT ISNULL(CodArticolo,'') FROM ODL WHERE IdxODL = @idxODL), '')
|
|
|
|
DECLARE @TCAss DECIMAL(18,8)
|
|
SET @TCAss = ISNULL((SELECT ISNULL(TCAssegnato, 1) FROM ODL WHERE IdxODL = @idxODL), 1)
|
|
|
|
-- dichiaro le ore che calcolo man mano...
|
|
DECLARE @totOre DECIMAL(18,8)
|
|
DECLARE @ClasseTempo NVARCHAR(50)
|
|
|
|
-- variabili x ricerca gg festivi o aperture/chiusure ND programmate
|
|
DECLARE @chiusura INT
|
|
DECLARE @apertura INT
|
|
DECLARE @ggSett INT
|
|
-- verifico se sia giorno di chiusura, in tal caso carico 8 h in T_OFF_ND
|
|
SET @chiusura = ( SELECT COUNT(*) FROM CalendFesteFerie WHERE data = @dataRif )
|
|
-- verifico che da apertura sia un periodo valido e non di fermo programmato
|
|
IF(@chiusura = 0)
|
|
BEGIN
|
|
-- controllo a seconda della data e turno a che gg di settimana e turno corrisponde...
|
|
SET DATEFIRST 1; -- setto al lunedì inizio settimana
|
|
SET @ggSett = DATEPART(dw, @dataFrom ) -- calcolo giorno
|
|
SET @apertura = ( SELECT CASE @turnoRif WHEN 1 THEN T1 WHEN 2 THEN T2 ELSE T3 END FROM CalendApertura WHERE NumGG = @ggSett ) -- cerco ore apertura...
|
|
SET @chiusura = ( SELECT CASE @apertura WHEN 8 THEN 0 ELSE 1 END ) -- e se sia turno valido (8h) o vuoto (0h) nel qual caso chiusura > 0
|
|
END
|
|
-- se c'è chiusura per turno singolo o per giorno intero...
|
|
IF(@chiusura > 0)
|
|
BEGIN
|
|
SET @ClasseTempo = 'T_OFF_ND'
|
|
SET @totOre = 8
|
|
INSERT INTO DatiProduzione(IdxODL, DataOraApp, DataRif, TurnoRif, CodArticolo, IdxMacchina, TCAssegnato, MatrOpr, MatrApp,
|
|
DataOraFrom, DataOraTo, TotPzProd, Tempo, ClasseTempo, Causale)
|
|
VALUES (@idxODL, GETDATE(), @dataRif, @turnoRif, '', @IdxMacchina, 0, @MatrApp, @MatrApp, -- non metto ne tempo ne cod articolo...
|
|
@dataFrom, @dataTo, @pzProd, @totOre, @ClasseTempo, @ClasseTempo)
|
|
END
|
|
ELSE -- normale dichiarazione
|
|
BEGIN
|
|
-- inserisco i dati di SOLO tempo prodotto e pz prodotti
|
|
SET @ClasseTempo = 'T_AutoRun'
|
|
SET @totOre = dbo.f_calcolaTempoClasse_ByInterv(@IdxMacchina, @dataFrom, @dataTo, @ClasseTempo)
|
|
IF(@totOre > 0)
|
|
BEGIN
|
|
INSERT INTO DatiProduzione(IdxODL, DataOraApp, DataRif, TurnoRif, CodArticolo, IdxMacchina, TCAssegnato, MatrOpr, MatrApp,
|
|
DataOraFrom, DataOraTo, TotPzProd, Tempo, ClasseTempo, Causale)
|
|
VALUES (@idxODL, GETDATE(), @dataRif, @turnoRif, @CodArticolo, @IdxMacchina, @TCAss, @MatrApp, @MatrApp,
|
|
@dataFrom, @dataTo, @pzProd, @totOre, @ClasseTempo, @ClasseTempo)
|
|
END
|
|
|
|
-- inserisco gli altri tempi, pezzi prod ZERO!!!
|
|
SET @ClasseTempo = 'T_Microfermo'
|
|
SET @totOre = dbo.f_calcolaTempoClasse_ByInterv(@IdxMacchina, @dataFrom, @dataTo, @ClasseTempo)
|
|
IF(@totOre > 0)
|
|
BEGIN
|
|
-- scrivo tutti gli eventi della classe
|
|
EXEC stp_DatiProd_insClasseTempo @IdxMacchina, @dataFrom, @dataTo, @dataRif, @turnoRif, @MatrApp, @idxODL, @CodArticolo, @TCAss, @ClasseTempo
|
|
END
|
|
|
|
SET @ClasseTempo = 'T_FermoGiallo'
|
|
SET @totOre = dbo.f_calcolaTempoClasse_ByInterv(@IdxMacchina, @dataFrom, @dataTo, @ClasseTempo)
|
|
IF(@totOre > 0)
|
|
BEGIN
|
|
-- scrivo tutti gli eventi della classe
|
|
EXEC stp_DatiProd_insClasseTempo @IdxMacchina, @dataFrom, @dataTo, @dataRif, @turnoRif, @MatrApp, @idxODL, @CodArticolo, @TCAss, @ClasseTempo
|
|
END
|
|
|
|
SET @ClasseTempo = 'T_FermoRosso'
|
|
SET @totOre = dbo.f_calcolaTempoClasse_ByInterv(@IdxMacchina, @dataFrom, @dataTo, @ClasseTempo)
|
|
IF(@totOre > 0)
|
|
BEGIN
|
|
-- scrivo tutti gli eventi della classe
|
|
EXEC stp_DatiProd_insClasseTempo @IdxMacchina, @dataFrom, @dataTo, @dataRif, @turnoRif, @MatrApp, @idxODL, @CodArticolo, @TCAss, @ClasseTempo
|
|
END
|
|
|
|
SET @ClasseTempo = 'T_OFF'
|
|
SET @totOre = dbo.f_calcolaTempoClasse_ByInterv(@IdxMacchina, @dataFrom, @dataTo, @ClasseTempo)
|
|
IF(@totOre > 0)
|
|
BEGIN
|
|
-- scrivo tutti gli eventi della classe
|
|
EXEC stp_DatiProd_insClasseTempo @IdxMacchina, @dataFrom, @dataTo, @dataRif, @turnoRif, @MatrApp, @idxODL, @CodArticolo, @TCAss, @ClasseTempo
|
|
END
|
|
END
|
|
|
|
COMMIT TRAN
|
|
RETURN
|
|
go
|
|
|
|
commit
|
|
go
|
|
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
set ANSI_NULLS on
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_DatiConf_getByPeriodo
|
|
*
|
|
* recupera i dati confermati x un periodo, ordinati in data DESC
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2011.07.04
|
|
**************************************/
|
|
create PROCEDURE stp_DatiConf_getByPeriodo
|
|
(
|
|
@dataFrom DATETIME,
|
|
@dataTo DATETIME
|
|
)
|
|
AS
|
|
|
|
SELECT *
|
|
FROM DatiConfermati
|
|
WHERE (DataRif >= @dataFrom AND DataRif <= @dataTo)
|
|
ORDER BY DataRif DESC
|
|
|
|
RETURN
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_DatiProd_getByMacchPeriodo
|
|
*
|
|
* recupera i dati confermati x una macchina e periodo, ordinati in data DESC
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2011.07.04
|
|
**************************************/
|
|
create PROCEDURE stp_DatiProd_getByMacchPeriodo
|
|
(
|
|
@idxMacchina NVARCHAR(50),
|
|
@dataFrom DATETIME,
|
|
@dataTo DATETIME
|
|
)
|
|
AS
|
|
|
|
SELECT *
|
|
FROM DatiProduzione
|
|
WHERE IdxMacchina = @idxMacchina AND (DataRif >= @dataFrom AND DataRif <= @dataTo)
|
|
ORDER BY DataRif DESC
|
|
|
|
RETURN
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_DatiProd_getByPeriodo
|
|
*
|
|
* recupera i dati confermati x un periodo, ordinati in data DESC
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2011.07.04
|
|
**************************************/
|
|
create PROCEDURE stp_DatiProd_getByPeriodo
|
|
(
|
|
@dataFrom DATETIME,
|
|
@dataTo DATETIME
|
|
)
|
|
AS
|
|
|
|
SELECT *
|
|
FROM DatiProduzione
|
|
WHERE (DataRif >= @dataFrom AND DataRif <= @dataTo)
|
|
ORDER BY DataRif DESC
|
|
|
|
RETURN
|
|
go
|
|
|
|
commit
|
|
go
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- registro versione...
|
|
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(300, GETDATE())
|
|
GO
|