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

1491 lines
50 KiB
Transact-SQL

-- schema
create schema man authorization dbo
go
-- stored x trigger...
set xact_abort on
go
begin transaction
go
set ANSI_NULLS on
go
/*************************************
* STORED PROCEDURE stp_EL_processaEvento
* Processa un singolo evento
*
* Note : richiamata anche nel trigger della tabella EventList
*
* modif.:
**************************************/
create PROCEDURE stp_EL_processaEvento
(
@IdxTipo INT,
@IdxMacchina NVARCHAR(50),
@MatricolaKanban NVARCHAR(50),
@DataOra DATETIME,
@NumPz INT,
@FlgAggStato CHAR(1) = 'Y' -- Y/N = elabora o meno aggiornamento StatiMacchine e DatiMacchine
)
AS
---- parametri x test
--DECLARE @IdxTipo INT = 0
--DECLARE @IdxMacchina NVARCHAR(50)
--DECLARE @DataOra DATETIME
--DECLARE @MatricolaKanban NVARCHAR(50)
--DECLARE @TCMedio DECIMAL(18,8)
--DECLARE @NumPz INT
--SET @IdxTipo = ( SELECT i.IdxTipo FROM inserted i )
--SET @IdxMacchina = ( SELECT i.IdxMacchina FROM inserted i )
--SET @DataOra = ( SELECT i.InizioStato FROM inserted i )
--SET @MatricolaKanban = ( SELECT i.MatricolaKanban FROM inserted i )
--SET @NumPz = ( SELECT CASE WHEN (ISNUMERIC(value)=1) THEN value ELSE 1 END FROM inserted i )
-- INIZIO DICHIARAZIONI
DECLARE @TabAzione NVARCHAR(50) = '';
DECLARE @Azione NVARCHAR(50) = '';
DECLARE @CodArticolo NVARCHAR(50) = ''
DECLARE @MatricolaKanbanOk NVARCHAR(50);
DECLARE @DataOraPrec DATETIME;
DECLARE @TCMedio DECIMAL(18,8) = 0;
/* recupero altri valori ( se non trova record lascia il valore invariato cioè = '' )*/
SELECT @TabAzione = ISNULL(TabAzione,'')
, @Azione = ISNULL(Azione,'')
FROM AnagraficaEventi WHERE IdxTipo = @IdxTipo
--SELECT @TabAzione , @Azione
IF (@TabAzione <> '' AND @Azione <> '')
BEGIN
/* azioni richieste: seconda dei casi eseguo... */
/******************************************
*
* Calcolo tempo ciclo per INIZIO
*
******************************************/
IF(@TabAzione = 'TempiCicloRilevati' AND @Azione = 'Insert')
BEGIN
-- recupero codice articolo
SET @CodArticolo = ( SELECT CodArticolo FROM Kanban WHERE MatricolaKanban = @MatricolaKanban )
/* calcolo tempo tra gli ultimi 2 eventi "contapezzi" */
SET @DataOraPrec = ISNULL((SELECT Top 1 InizioStato FROM EventList WHERE IdxMacchina = @IdxMacchina AND IdxTipo = @IdxTipo AND InizioStato < @DataOra ORDER BY InizioStato DESC), @DataOra )
-- se è oltre 10 gg calcolo in secondi... 2013.8.30
IF (DATEDIFF(DD, @DataOraPrec, @DataOra) > 10)
SET @TCMedio = ( SELECT (DATEDIFF(s, @DataOraPrec, @DataOra) / 60.00 ) ) --calcolo in secondi
ELSE
SET @TCMedio = ( SELECT (DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 ) )
/* inserisco riga di tempo ciclo */
INSERT INTO TempiCicloRilevati
VALUES(@IdxMacchina, @CodArticolo, @DataOra, @TCMedio, @NumPz)
END
/******************************************
*
* Calcolo tempo ciclo con logica stop/start
*
******************************************/
ELSE IF(@TabAzione = 'TempiCicloRilevati' AND @Azione = 'Stop2StartCiclo')
BEGIN
/* prendo la matricola dall'evento inizio (precedente) */
SET @MatricolaKanbanOk = ISNULL((SELECT Top 1 MatricolaKanban FROM EventList WHERE IdxMacchina = @IdxMacchina AND IdxTipo = @IdxTipo - 1 AND InizioStato < @DataOra ORDER BY InizioStato DESC), @MatricolaKanban )
-- calcolare num pezzi da codice...
SET @CodArticolo = ( SELECT CodArticolo FROM Kanban WHERE MatricolaKanban = @MatricolaKanbanOk )
/* calcolo tempo tra eventi "contapezzi" inizio - fine NB: idxEvento per fine è idxEvento inizio + 1 ... HARD CODED!!! */
SET @DataOraPrec = ISNULL((SELECT Top 1 InizioStato FROM EventList WHERE IdxMacchina = @IdxMacchina AND IdxTipo = @IdxTipo - 1 AND InizioStato < @DataOra ORDER BY InizioStato DESC), @DataOra )
-- se è oltre 10 gg calcolo in secondi... 2013.8.30
IF (DATEDIFF(DD, @DataOraPrec, @DataOra) > 10)
SET @TCMedio = ( DATEDIFF(s, @DataOraPrec, @DataOra) / 60.00 ) --calcolo in secondi
ELSE
SET @TCMedio = ( DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 )
/* inserisco riga di tempo ciclo */
INSERT INTO TempiCicloRilevati
VALUES(@IdxMacchina, @CodArticolo, @DataOra, @TCMedio, @NumPz)
END
/******************************************
*
* calcolo tempo ciclo con logica stop/stop
*
******************************************/
ELSE IF(@TabAzione = 'TempiCicloRilevati' AND @Azione = 'Stop2StopCiclo')
BEGIN
/* prendo la matricola dall'evento inizio (precedente) */
SET @MatricolaKanbanOk = ISNULL((SELECT Top 1 MatricolaKanban FROM EventList WHERE IdxMacchina = @IdxMacchina AND IdxTipo = @IdxTipo AND InizioStato < @DataOra ORDER BY InizioStato DESC), @MatricolaKanban )
-- calcolare num pezzi da codice...
SET @NumPz = ( SELECT PzPallet FROM Kanban WHERE MatricolaKanban = @MatricolaKanbanOk )
SET @CodArticolo = ( SELECT CodArticolo FROM Kanban WHERE MatricolaKanban = @MatricolaKanbanOk )
/* calcolo tempo tra eventi "contapezzi" fine - fine NB: idxEvento per fine è idxEvento inizio + 1 ... HARD CODED!!! */
SET @DataOraPrec = ISNULL( (SELECT Top 1 InizioStato FROM EventList WHERE IdxMacchina = @IdxMacchina AND IdxTipo = @IdxTipo AND InizioStato < @DataOra ORDER BY InizioStato DESC), @DataOra )
-- se è oltre 10 gg calcolo in secondi... 2013.8.30
IF (DATEDIFF(DD, @DataOraPrec, @DataOra) > 10)
SET @TCMedio = ( DATEDIFF(s, @DataOraPrec, @DataOra) / 60.00 ) --calcolo in secondi
ELSE
SET @TCMedio = ( DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 )
/* inserisco riga di tempo ciclo */
INSERT INTO TempiCicloRilevati
VALUES(@IdxMacchina, @CodArticolo, @DataOra, @TCMedio, @NumPz)
END
/******************************************
*
* Aggiorno kanban in dati macchine per
* INIZIO ATTREZZAGGIO
*
******************************************/
ELSE IF(@TabAzione = 'DatiMacchine' AND @Azione = 'Inizio' AND @FlgAggStato = 'Y')
BEGIN
/* aggiorno riga di dati macchina */
UPDATE DatiMacchine
SET kanban_A = @MatricolaKanban,
kanban_B = @MatricolaKanban
WHERE idxMacchina = @IdxMacchina
/* aggiorno stato macchina */
UPDATE StatoMacchine
SET MatricolaKanban = @MatricolaKanban
WHERE idxMacchina = @IdxMacchina
/* aggiorno dati kanban statoMacchine... */
UPDATE StatoMacchine
SET KanbanCode = k.KanbanCode, TempoCicloBase = k.TempoCicloBase, PzPalletProd = k.PzPallet
FROM Kanban AS k
INNER JOIN StatoMacchine ON k.MatricolaKanban = StatoMacchine.MatricolaKanban
WHERE (StatoMacchine.idxMacchina = @IdxMacchina)
END
/******************************************
*
* Aggiorno kanban in dati macchine per
* FINE PRODUZIONE
*
******************************************/
ELSE IF(@TabAzione = 'DatiMacchine' AND @Azione = 'Fine' AND @FlgAggStato = 'Y')
BEGIN
/* calcolo valori */
SET @MatricolaKanban = 'KAND' -- kanban non definito !!!HARD CODED!!!
/* aggiorno riga di dati macchina */
UPDATE DatiMacchine
SET kanban_A = @MatricolaKanban,
kanban_B = @MatricolaKanban
WHERE idxMacchina = @IdxMacchina
/* aggiorno stato macchina */
UPDATE StatoMacchine
SET MatricolaKanban = @MatricolaKanban
WHERE idxMacchina = @IdxMacchina
/* aggiorno dati kanban statoMacchine... */
UPDATE StatoMacchine
SET KanbanCode = k.KanbanCode, TempoCicloBase = k.TempoCicloBase, PzPalletProd = k.PzPallet
FROM Kanban AS k INNER JOIN StatoMacchine ON k.MatricolaKanban = StatoMacchine.MatricolaKanban
WHERE (StatoMacchine.idxMacchina = @IdxMacchina)
END
END
RETURN
go
commit
go
-- indici DDB
create index idx_TempoCicloBase on DiarioDiBordo(TempoCicloBase)
include(IdxMacchina,InizioStato,MatricolaKanban,KanbanCode)
go
-- trigger EL
set xact_abort on
go
begin transaction
go
set ANSI_NULLS on
go
/***************************************************
* Trigger trg_doActions
*
* processa eventuali azioni legate ad un inserimento evento
*
* modificato: S.E.L.
* 2011.05.18
*
***************************************************/
alter TRIGGER trg_doActions
ON EventList
FOR INSERT
AS
/* dichiarazione variabili */
DECLARE @IdxTipo INT
DECLARE @TabAzione NVARCHAR(50)
DECLARE @Azione NVARCHAR(50)
DECLARE @IdxMacchina NVARCHAR(50)
DECLARE @MatricolaKanban NVARCHAR(50)
DECLARE @MatricolaKanbanOk NVARCHAR(50)
DECLARE @CodArticolo NVARCHAR(50)
DECLARE @TCMedio DECIMAL(18,8)
DECLARE @DataOra DATETIME
DECLARE @DataOraPrec DATETIME
DECLARE @NumPz INT
/* recupero valori dell'INSERT */
SET @IdxTipo = ( SELECT i.IdxTipo FROM inserted i )
SET @IdxMacchina = ( SELECT i.IdxMacchina FROM inserted i )
SET @MatricolaKanban = ( SELECT i.MatricolaKanban FROM inserted i )
SET @DataOra = ( SELECT i.InizioStato FROM inserted i )
SET @NumPz = ( SELECT CASE WHEN (ISNUMERIC(value)=1) THEN value ELSE 1 END FROM inserted i )
EXECUTE dbo.stp_EL_processaEvento @IdxTipo, @IdxMacchina, @MatricolaKanban, @DataOra, @NumPz, 'Y'
/* SOSTITUITA CON STORED
/* controllo se l'evento richieda azioni successive */
IF(@TabAzione <> '' AND @Azione <> '')
BEGIN
/* azioni richieste: seconda dei casi eseguo... */
/******************************************
*
* Calcolo tempo ciclo per INIZIO
*
******************************************/
IF(@TabAzione = 'TempiCicloRilevati' AND @Azione = 'Insert')
BEGIN
/* calcolo valori */
SET @DataOra = ( SELECT i.InizioStato FROM inserted i )
SET @MatricolaKanban = ( SELECT i.MatricolaKanban FROM inserted i )
SET @NumPz = ( SELECT CASE WHEN (ISNUMERIC(value)=1) THEN value ELSE 1 END FROM inserted i )
SET @CodArticolo = ( SELECT CodArticolo FROM Kanban WHERE MatricolaKanban = @MatricolaKanban )
/* calcolo tempo tra gli ultimi 2 eventi "contapezzi" */
SET @DataOraPrec = ( SELECT ISNULL((SELECT Top 1 InizioStato FROM EventList WHERE IdxMacchina = @IdxMacchina AND IdxTipo = @IdxTipo AND InizioStato < @DataOra ORDER BY InizioStato DESC), @DataOra ) )
-- se è oltre 10 gg calcolo in secondi... 2013.8.30
IF (DATEDIFF(DD, @DataOraPrec, @DataOra) > 10)
BEGIN
SET @TCMedio = ( SELECT (DATEDIFF(s, @DataOraPrec, @DataOra) / 60.00 ) ) --calcolo in secondi
END
ELSE
BEGIN
SET @TCMedio = ( SELECT (DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 ) )
END
-- versione vecchia (blocco se oltre 24 gg di fermo...)
--BEGIN TRY
-- /* è in millisecondi, divido per 60'000.00 x avere minuti centesimali*/
-- SET @TCMedio = ( SELECT (DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 ) )
--END TRY
--BEGIN CATCH
-- SET @TCMedio = ( SELECT (DATEDIFF(s, @DataOraPrec, @DataOra) / 60.00 ) ) --calcolo in secondi
--END CATCH
/* inserisco riga di tempo ciclo */
INSERT INTO TempiCicloRilevati
VALUES(@IdxMacchina, @CodArticolo, @DataOra, @TCMedio, @NumPz)
END
/******************************************
*
* Calcolo tempo ciclo con logica stop/start
*
******************************************/
ELSE IF(@TabAzione = 'TempiCicloRilevati' AND @Azione = 'Stop2StartCiclo')
BEGIN
/* calcolo valori */
SET @DataOra = ( SELECT i.InizioStato FROM inserted i )
SET @MatricolaKanban = ( SELECT i.MatricolaKanban FROM inserted i )
/* prendo la matricola dall'evento inizio (precedente) */
SET @MatricolaKanbanOk = ( SELECT ISNULL((SELECT Top 1 MatricolaKanban FROM EventList WHERE IdxMacchina = @IdxMacchina AND IdxTipo = @IdxTipo - 1 AND InizioStato < @DataOra ORDER BY InizioStato DESC), @MatricolaKanban ) )
-- calcolare num pezzi da codice...
SET @NumPz = ( SELECT CASE WHEN (ISNUMERIC(value)=1) THEN value ELSE 1 END FROM inserted i )
SET @CodArticolo = ( SELECT CodArticolo FROM Kanban WHERE MatricolaKanban = @MatricolaKanbanOk )
/* calcolo tempo tra eventi "contapezzi" inizio - fine NB: idxEvento per fine è idxEvento inizio + 1 ... HARD CODED!!! */
SET @DataOraPrec = ( SELECT ISNULL((SELECT Top 1 InizioStato FROM EventList WHERE IdxMacchina = @IdxMacchina AND IdxTipo = @IdxTipo - 1 AND InizioStato < @DataOra ORDER BY InizioStato DESC), @DataOra ) )
-- se è oltre 10 gg calcolo in secondi... 2013.8.30
IF (DATEDIFF(DD, @DataOraPrec, @DataOra) > 10)
BEGIN
SET @TCMedio = ( SELECT (DATEDIFF(s, @DataOraPrec, @DataOra) / 60.00 ) ) --calcolo in secondi
END
ELSE
BEGIN
SET @TCMedio = ( SELECT (DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 ) )
END
-- versione vecchia (blocco se oltre 24 gg di fermo...)
--BEGIN TRY
-- /* è in millisecondi, divido per 60'000.00 x avere minuti centesimali*/
-- SET @TCMedio = ( SELECT (DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 ) )
--END TRY
--BEGIN CATCH
-- SET @TCMedio = ( SELECT (DATEDIFF(s, @DataOraPrec, @DataOra) / 60.00 ) ) --calcolo in secondi
--END CATCH
/* inserisco riga di tempo ciclo */
INSERT INTO TempiCicloRilevati
VALUES(@IdxMacchina, @CodArticolo, @DataOra, @TCMedio, @NumPz)
END
/******************************************
*
* calcolo tempo ciclo con logica stop/stop
*
******************************************/
ELSE IF(@TabAzione = 'TempiCicloRilevati' AND @Azione = 'Stop2StopCiclo')
BEGIN
/* calcolo valori */
SET @DataOra = ( SELECT i.InizioStato FROM inserted i )
SET @MatricolaKanban = ( SELECT i.MatricolaKanban FROM inserted i )
/* prendo la matricola dall'evento inizio (precedente) */
SET @MatricolaKanbanOk = ( SELECT ISNULL((SELECT Top 1 MatricolaKanban FROM EventList WHERE IdxMacchina = @IdxMacchina AND IdxTipo = @IdxTipo AND InizioStato < @DataOra ORDER BY InizioStato DESC), @MatricolaKanban ) )
-- calcolare num pezzi da codice...
SET @NumPz = ( SELECT PzPallet FROM Kanban WHERE MatricolaKanban = @MatricolaKanbanOk )
SET @CodArticolo = ( SELECT CodArticolo FROM Kanban WHERE MatricolaKanban = @MatricolaKanbanOk )
/* calcolo tempo tra eventi "contapezzi" fine - fine NB: idxEvento per fine è idxEvento inizio + 1 ... HARD CODED!!! */
SET @DataOraPrec = ( SELECT ISNULL((SELECT Top 1 InizioStato FROM EventList WHERE IdxMacchina = @IdxMacchina AND IdxTipo = @IdxTipo AND InizioStato < @DataOra ORDER BY InizioStato DESC), @DataOra ) )
-- se è oltre 10 gg calcolo in secondi... 2013.8.30
IF (DATEDIFF(DD, @DataOraPrec, @DataOra) > 10)
BEGIN
SET @TCMedio = ( SELECT (DATEDIFF(s, @DataOraPrec, @DataOra) / 60.00 ) ) --calcolo in secondi
END
ELSE
BEGIN
SET @TCMedio = ( SELECT (DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 ) )
END
-- versione vecchia (blocco se oltre 24 gg di fermo...)
--BEGIN TRY
-- /* è in millisecondi, divido per 60'000.00 x avere minuti centesimali*/
-- SET @TCMedio = ( SELECT (DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 ) )
--END TRY
--BEGIN CATCH
-- SET @TCMedio = ( SELECT (DATEDIFF(s, @DataOraPrec, @DataOra) / 60.00 ) ) --calcolo in secondi
--END CATCH
/* inserisco riga di tempo ciclo */
BEGIN TRY
INSERT INTO TempiCicloRilevati
VALUES(@IdxMacchina, @CodArticolo, @DataOra, @TCMedio, @NumPz)
END TRY
BEGIN CATCH
-- dovrei loggare...
END CATCH
END
/******************************************
*
* Aggiorno kanban in dati macchine per
* INIZIO ATTREZZAGGIO
*
******************************************/
ELSE IF(@TabAzione = 'DatiMacchine' AND @Azione = 'Inizio')
BEGIN
/* calcolo valori */
SET @MatricolaKanban = ( SELECT i.MatricolaKanban FROM inserted i )
/* aggiorno riga di dati macchina */
UPDATE DatiMacchine
SET kanban_A = @MatricolaKanban,
kanban_B = @MatricolaKanban
WHERE idxMacchina = @IdxMacchina
/* aggiorno stato macchina */
UPDATE StatoMacchine
SET MatricolaKanban = @MatricolaKanban
WHERE idxMacchina = @IdxMacchina
/* aggiorno dati kanban statoMacchine... */
UPDATE StatoMacchine
SET KanbanCode = k.KanbanCode, TempoCicloBase = k.TempoCicloBase, PzPalletProd = k.PzPallet
FROM Kanban AS k INNER JOIN StatoMacchine ON k.MatricolaKanban = StatoMacchine.MatricolaKanban
WHERE (StatoMacchine.idxMacchina = @IdxMacchina)
END
/******************************************
*
* Aggiorno kanban in dati macchine per
* FINE PRODUZIONE
*
******************************************/
ELSE IF(@TabAzione = 'DatiMacchine' AND @Azione = 'Fine')
BEGIN
/* calcolo valori */
SET @MatricolaKanban = 'KAND' -- kanban non definito !!!HARD CODED!!!
/* aggiorno riga di dati macchina */
UPDATE DatiMacchine
SET kanban_A = @MatricolaKanban,
kanban_B = @MatricolaKanban
WHERE idxMacchina = @IdxMacchina
/* aggiorno stato macchina */
UPDATE StatoMacchine
SET MatricolaKanban = @MatricolaKanban
WHERE idxMacchina = @IdxMacchina
/* aggiorno dati kanban statoMacchine... */
UPDATE StatoMacchine
SET KanbanCode = k.KanbanCode, TempoCicloBase = k.TempoCicloBase, PzPalletProd = k.PzPallet
FROM Kanban AS k INNER JOIN StatoMacchine ON k.MatricolaKanban = StatoMacchine.MatricolaKanban
WHERE (StatoMacchine.idxMacchina = @IdxMacchina)
END
END
*/
-- INFINE CHIAMO REFRESH TAB STATO...
EXEC stp_MSE_refresh @IdxMacchina
go
commit
go
-- viste
set xact_abort on
go
begin transaction
go
set ANSI_NULLS on
go
create VIEW v_Eventi_To_StatiMacchina
AS
/* mostra gli eventi macchina ed eventualmenti gli stati macchina che hanno provocato
EVENTI -> STATI DIARIO DI BORDO
FARE FILTRO X MACCHINA E ORDER BY INIZIO STATO
SELECT * FROM dbo.v_Eventi_To_StatiMacchina
WHERE IdxMacchina = 1010
AND InizioStato < '20131009 19:00.000'
ORDER BY InizioStato DESC;
*/
WITH cteDiario AS
(
SELECT d.IdxMacchina, d.InizioStato, d.FineStato, d.IdxStato, d.DurataMinuti, d.[Value], d.MatricolaKanban, d.KanbanCode
,d.TempoCicloBase, d.PzPalletProd, d.MatrOpr, d.pallet
,a.Descrizione AS DescStato
FROM DiarioDiBordo AS d
INNER JOIN dbo.AnagraficaStati AS a ON d.IdxStato = a.IdxStato
)
SELECT e.IdxMacchina, e.InizioStato AS InizioEvento, e.IdxTipo AS IdxTipoEvento, e.MatricolaKanban, e.[Value], e.MatrOpr, e.pallet,
ae.Nome AS NomeEvento,ae.TabAzione,ae.Azione,
di.FineStato AS FineStatoPrec, di.InizioStato AS InizioStatoPrec, di.IdxStato AS IdxStatoIniz, di.DescStato AS DescStatoIniziale,
df.InizioStato AS FineStato, df.IdxStato AS idxStatoFine, df.DescStato AS DescStatoFine
FROM EventList AS e
INNER JOIN dbo.AnagraficaEventi AS ae ON e.IdxTipo = ae.IdxTipo
--LEFT JOIN cteDiario AS di ON e.IdxMacchina = di.IdxMacchina AND e.InizioStato = di.FineStato
--LEFT JOIN cteDiario AS df ON e.IdxMacchina = df.IdxMacchina AND e.InizioStato = df.InizioStato
LEFT JOIN cteDiario AS di ON e.IdxMacchina = di.IdxMacchina AND ( e.InizioStato >= DATEADD( ms , -80, di.FineStato ) AND e.InizioStato <= di.FineStato )
LEFT JOIN cteDiario AS df ON e.IdxMacchina = df.IdxMacchina AND ( e.InizioStato >= DATEADD( ms , -80, df.InizioStato ) AND e.InizioStato <= df.InizioStato )
-- LEFT JOIN cteDiario AS df ON e.IdxMacchina = df.IdxMacchina AND e.InizioStato = df.InizioStato
--WHERE e.IdxMacchina = 1010
--AND e.InizioStato < '20131009 19:00.000'
--ORDER BY e.InizioStato DESC;
go
create VIEW v_StatiMacchina_From_Eventi
AS
/*
mostra gli stati macchina e gli eventi che li hanno generati
STATI DIARIO DI BORDO -> EVENTI
FARE FILTRO X MACCHINA E ORDER BY INIZIO STATO
SELECT * FROM dbo.v_StatiMacchina_From_Eventi
WHERE IdxMacchina = 1010
AND InizioStato < '20131009 19:00.000'
ORDER BY InizioStato DESC;
*/
WITH cteDiario AS
(
SELECT d.IdxMacchina, d.InizioStato, d.FineStato, d.IdxStato, d.DurataMinuti, d.[Value], d.MatricolaKanban, d.KanbanCode
,d.TempoCicloBase, d.PzPalletProd, d.MatrOpr, d.pallet
,a.Descrizione AS DescStato
FROM DiarioDiBordo AS d
INNER JOIN dbo.AnagraficaStati AS a ON d.IdxStato = a.IdxStato
)
SELECT e.IdxMacchina, e.InizioStato AS InizioEvento, e.IdxTipo AS IdxTipoEvento, e.MatricolaKanban, e.[Value], e.MatrOpr, e.pallet,
ae.Nome AS NomeEvento,ae.TabAzione,ae.Azione,
di.InizioStato,di.IdxStato AS IdxStatoIniz, di.DescStato AS DescStatoIniziale,
df.InizioStato AS FineStato, df.IdxStato AS idxStatoFine, df.DescStato AS DescStatoFine
FROM EventList AS e
INNER JOIN dbo.AnagraficaEventi AS ae ON e.IdxTipo = ae.IdxTipo
LEFT JOIN cteDiario AS di ON e.IdxMacchina = di.IdxMacchina AND e.InizioStato = di.FineStato
LEFT JOIN cteDiario AS df ON e.IdxMacchina = df.IdxMacchina AND e.InizioStato = df.InizioStato
--WHERE e.IdxMacchina = 1010
--AND e.InizioStato < '20131009 19:00.000'
--ORDER BY e.InizioStato DESC;
go
commit
go
-- stored: nuove!!!
set xact_abort on
go
begin transaction
go
set ANSI_NULLS on
go
/*************************************
* STORED PROCEDURE stp_Comm_getLastByMacchina
* ottiene l'elenco degli ultimi N commenti per una macchina specificata
*
* modif.: S.E.L. - 2013.10.16
**************************************/
create PROCEDURE stp_Comm_getLastByMacchina
(
@IdxMacchina NVARCHAR(50) = '0',
@showMax INT = 10
)
AS
SELECT TOP (@showMax) o.idxODL, o.CodArticolo, el.IdxMacchina, el.InizioStato, el.Value,
ISNULL(ao.Cognome,'cognome') + ' ' + ISNULL(ao.Nome,'') AS Operatore
FROM EventList el INNER JOIN ODL o ON el.IdxMacchina = o.IdxMacchina AND el.InizioStato BETWEEN o.DataInizio AND ISNULL(o.DataFine, GETDATE())
LEFT OUTER JOIN AnagraficaOperatori ao ON el.MatrOpr = ao.MatrOpr
WHERE el.IdxMacchina = CASE WHEN @IdxMacchina = 0 THEN el.IdxMacchina ELSE @IdxMacchina END
AND el.IdxTipo = 999 -- 999 = commento! HARD CODED!!!
ORDER BY el.InizioStato DESC
RETURN
go
/*************************************
* STORED PROCEDURE stp_DDB_getNextByMacchinaFrom
* ottiene i dati dell'evento successivo una macchina ed un istante specificati
*
* modif.: S.E.L. - 2013.10.24
**************************************/
create PROCEDURE stp_DDB_getNextByMacchinaFrom
(
@IdxMacchina NVARCHAR(50),
@dataRif DATETIME
)
AS
SELECT TOP 1 *
FROM DiarioDiBordo
WHERE (IdxMacchina = @IdxMacchina) AND
(InizioStato > @dataRif)
ORDER BY InizioStato
RETURN
go
/*************************************
* STORED PROCEDURE stp_FNQ_getFilt
* ottiene elenco FERMI NON QUALIFICATI filtrati x macchina, gg da guardare a ritroso e durata
*
* modif.: S.E.L. - 2013.10.23
**************************************/
create PROCEDURE stp_FNQ_getFilt
(
@IdxMacchina NVARCHAR(50) = 0,
@gg INT = 3, -- num gg da mostrare a ritroso (da ADESSO)
@durataMin FLOAT = 30 -- min 30 min
)
AS
-- imposto inizio/fine
DECLARE @Inizio DATETIME
DECLARE @Fine DATETIME
SELECT @Fine = GETDATE(), @Inizio = DATEADD(DAY, -@gg, GETDATE())
SELECT m.IdxMacchina, InizioStato, m.Nome as Macchina, ddb.IdxStato, Ans.Descrizione AS Stato, Ans.Semaforo,
ISNULL(DurataMinuti, DATEDIFF(s, InizioStato, @Fine) / 60) AS DurataMinuti, Value, KanbanCode as CodArticolo
FROM DiarioDiBordo AS ddb INNER JOIN AnagraficaStati AnS ON ddb.IdxStato = AnS.IdxStato INNER JOIN MAcchine m ON ddb.IdxMacchina = m.IdxMacchina
WHERE Ans.Semaforo IN ('G','R')
AND m.IdxMacchina = CASE WHEN @IdxMacchina = 0 THEN m.IdxMacchina ELSE @IdxMacchina END
AND ((InizioStato BETWEEN @Inizio AND @Fine) OR (FineStato BETWEEN @Inizio AND @Fine))
AND ISNULL(DurataMinuti, DATEDIFF(s, InizioStato, @Fine) / 60) >= @durataMin
ORDER BY InizioStato DESC
RETURN
go
commit
go
set xact_abort on
go
begin transaction
go
set ANSI_NULLS on
go
-- =============================================
-- Author: Samuele E. Locatelli
-- Create date: 2009-03-04
-- mod date:
--
-- Description: riallineamento con update massivo dati db
-- aggiorna i dati nel db per portarli ad essere "odierni" ovvero ultimo evento appena successo
-- =============================================
create PROCEDURE man.stp_riallineaDateDb
AS
DECLARE @Database AS SYSNAME;
DECLARE @lastData AS DATETIME
DECLARE @diff_min as INT
DECLARE @idxMacchina AS NVARCHAR(50)
DECLARE @idxMacchinaTest AS NVARCHAR(50) = '1008'
DBCC SHOWCONTIG(EventList)
DBCC SHOWCONTIG(DiarioDiBordo)
SET @Database = DB_NAME()
EXEC USP_DisableEnableNonClusteredIndexes @Database ,null, 1 -- disabilito indici
PRINT 'inizio UPDATE tabelle...'
/* ELIMINO MACCHINA 99 */
/*
-- elimino tutti gli eventi della macchina test
DELETE FROM EventList WHERE IdxMacchina = @idxMacchinaTest
-- elimino da diario di bordo della macchina test
DELETE FROM DiarioDiBordo WHERE IdxMacchina = @idxMacchinaTest
-- elimino da tempi ciclo teorici della macchina test
DELETE FROM TempiCicloTeorici WHERE IdxMacchina = @idxMacchinaTest
-- elimino da tempi ciclo rilevati della macchina test
DELETE FROM TempiCicloRilevati WHERE IdxMacchina = @idxMacchinaTest
DELETE dbo.KeepAlive WHERE IdxMacchina = @idxMacchinaTest
DELETE DatiMacchine WHERE IdxMacchina = @idxMacchinaTest
DELETE StatoMacchine WHERE IdxMacchina = @idxMacchinaTest
DELETE Macchine WHERE IdxMacchina = @idxMacchinaTest
*/
-- calcolo l'ultima data degli eventi esclusa macchina test
SET @lastData = ( SELECT MAX(InizioStato) AS inizio FROM DiarioDiBordo WHERE IdxMacchina <> @idxMacchinaTest )
SET @idxMacchina = ( SELECT TOP 1 IdxMacchina FROM DiarioDiBordo WHERE InizioStato = @lastData )
-- SELECT @idxMacchina, @idxMacchinaTest
-- ora calcolo la differenza tra quello e la data/ora odierna
SET @diff_min = (SELECT DATEDIFF(n, @lastData, getdate()))
/* TRASLO GLI EVENTI DELLE MACCHINE A DATA-ORA ATTUALI */
-- aggiorno EventList
UPDATE EventList SET InizioStato = DATEADD(n, @diff_min, InizioStato)
-- aggiorno DiarioDiBordo
UPDATE DiarioDiBordo SET InizioStato = DATEADD(n, @diff_min, InizioStato),FineStato = DATEADD(n, @diff_min, FineStato)
-- aggiorno StatoMacchine
UPDATE StatoMacchine SET InizioStato = DATEADD(n, @diff_min, InizioStato)
-- aggiorno KeepAlive
UPDATE KeepAlive SET DataOraServer = DATEADD(n, @diff_min, DataOraServer), DataOraMacchina = DATEADD(n, @diff_min, DataOraMacchina), DataOraStart = DATEADD(n, @diff_min, DataOraStart)
-- aggiorno TC teorici
UPDATE TempiCicloTeorici SET DataOraFrom = DATEADD(n, @diff_min, DataOraFrom), DataOraTo = DATEADD(n, @diff_min, DataOraTo)
-- aggiorno TC rilevati
UPDATE TempiCicloRilevati SET DataOraRif = DATEADD(n, @diff_min, DataOraRif)
-- aggiorno Dati confermati
UPDATE DatiConfermati SET DataOraApp = DATEADD(n, @diff_min, DataOraApp), DataRif = DATEADD(n, @diff_min, DataRif), DataOraFrom = DATEADD(n, @diff_min, DataOraFrom), DataOraTo = DATEADD(n, @diff_min, DataOraTo)
-- elimino tutti gli eventi della macchina test superiori a @lastData ( sono i dati di prova )
DELETE FROM EventList WHERE IdxMacchina = @idxMacchinaTest AND InizioStato > DATEADD(n, @diff_min, @lastData )
DELETE FROM DiarioDiBordo WHERE IdxMacchina = @idxMacchinaTest AND InizioStato > DATEADD(n, @diff_min, @lastData )
DELETE FROM TempiCicloRilevati WHERE IdxMacchina = @idxMacchinaTest AND DataOraRif > DATEADD(n, @diff_min, @lastData )
-- aggiorno lo stato macchine
UPDATE StatoMacchine
SET IdxStato = Diario.IdxStato
FROM StatoMacchine AS s
INNER JOIN (
SELECT d.IdxMacchina, d.IdxStato,d.InizioStato
FROM DiarioDiBordo AS d
INNER JOIN
(
SELECT idxMacchina, MAX(InizioStato) As InizioStato
FROM DiarioDiBordo
GROUP BY idxMacchina
) AS a ON a.IdxMacchina = d.IdxMacchina AND a.InizioStato = d.InizioStato
) AS Diario
ON s.IdxMacchina = Diario.IdxMacchina
-- aggiornamento x tablet
EXEC [dbo].[stp_MSE_getData] 0
PRINT 'concluso UPDATE tabelle...'
-- --shrink del db
PRINT 'compatto DB...'
DBCC SHRINKDATABASE (@Database)
--ricostruisco indici DOPO shrink
PRINT 'ricostruisco indici...'
-- riabilito tutti gli indici non-cluster ( fa una reindex )
EXEC USP_DisableEnableNonClusteredIndexes @Database ,null, 2 --riattivo indici
-- ricostruisco i cluster
ALTER INDEX PK_EventList ON dbo.EventList REBUILD
WITH (FILLFACTOR = 98, SORT_IN_TEMPDB = ON );
ALTER INDEX PK_DiarioDiBordo ON dbo.DiarioDiBordo REBUILD
WITH (FILLFACTOR = 98, SORT_IN_TEMPDB = ON );
--DBCC DBREINDEX(EventList)
--DBCC DBREINDEX(DiarioDiBordo)
--DBCC DBREINDEX(TransizioneIngressi)
--DBCC DBREINDEX(Kanban2ins)
--DBCC DBREINDEX(Kanban)
--DBCC DBREINDEX(AnagraficaOperatori)
--DBCC DBREINDEX(AnagraficaOperatori2ins)
DBCC SHOWCONTIG(EventList)
DBCC SHOWCONTIG(DiarioDiBordo)
/*
-- ******************************************************
-- *** PROCEDURE VARIE PER CREAZIONE DB DEMO ***
-- ******************************************************
-- FARE il restore del DB
-- Poi faccio pulizia dei vecchi DATI del DB
USE MoonPro_DEMO;
DECLARE @Database AS SYSNAME;
SET @Database = DB_NAME()
EXEC USP_DisableEnableNonClusteredIndexes @Database ,null, 1 -- disabilito indici
DECLARE @lastData AS datetime
SET @lastData = '20130920'
DELETE FROM EventList WHERE InizioStato < @lastData
DELETE FROM DiarioDiBordo WHERE InizioStato < @lastData
DELETE FROM TempiCicloRilevati WHERE DataOraRif < @lastData
-- riallineo dati a GETDATE()
EXEC [man].[stp_riallineaDateDb]
-- ******************************************************
-- *** CANCELLAZIONE DELLE ultime tre ORE di EVENTI ***
-- ******************************************************
-- riallineo alla data/ora attuale prima della cancellazione
EXEC [man].[stp_riallineaDateDb]
DELETE FROM EventList WHERE InizioStato > DATEADD(n, -720, GETDATE() )
DELETE FROM DiarioDiBordo WHERE InizioStato > DATEADD(n, -720, GETDATE() )
DELETE FROM TempiCicloRilevati WHERE DataOraRif > DATEADD(n, -720, GETDATE() )
DELETE FROM DatiConfermati WHERE DataRif > DATEADD(n, -720, GETDATE() )
UPDATE KeepAlive
SET DataOraServer = DATEADD(n, -720, DataOraServer ) ,
DataOraMacchina = DATEADD(n, -720, DataOraMacchina ) ,
DataOraStart = DATEADD(n, -720, DataOraStart )
-- riallineo alla data/ora attuale
EXEC [man].[stp_riallineaDateDb]
*/
RETURN
go
-- ================================================
-- Author: Samuele E. Locatelli
-- Create date: 2012.11.23
--
-- Description: rigenerazione del diario di bordo
-- a partire da macchina eventi/stati + EventList
-- ================================================
create PROCEDURE man.stp_ricalcolaDatiMacchinaFromDate
(
@idxMacchina NVARCHAR(50),
@inizio DATETIME,
@idxStatoStart INT = 1
)
AS
SET NOCOUNT ON;
DECLARE @fine DATETIME
--DBCC SHOWCONTIG(EventList)
--DBCC SHOWCONTIG(DiarioDiBordo)
/* DA USARE ? Verificare */
--DECLARE @Database AS SYSNAME;
--SET @Database = DB_NAME()
--EXEC USP_DisableEnableNonClusteredIndexes @Database ,null, 1 -- disabilito indici
-- update SAM 2013.10.24: "torno indietro" di 2 eventi rispetto alal data ora indicata come start, SE CI SONO
SELECT @inizio = ISNULL(MIN(InizioStato),@inizio) FROM
(
SELECT TOP 3 InizioStato
FROM DiarioDiBordo
WHERE IdxMacchina = @idxMacchina AND InizioStato < @inizio
ORDER BY InizioStato DESC
) AS tbl
-- DISATTIVO inserimento in DiarioDiBordo per la macchina indicata
-- DEVE disattivare anche il caricamento degli eventi
UPDATE DatiMacchine
SET insEnabled = 0
WHERE IdxMacchina = @IdxMacchina
-- devo sempre rielaborare tutti gli eventi fino a dataora odierna
SET @fine = ( SELECT MAX(InizioStato) FROM EventList
WHERE idxMacchina = @idxMacchina )
-- svuoto dati che vado a sostituire
PRINT 'svuoto TempiCicloRilevati per periodo indicato...'
DELETE FROM TempiCicloRilevati WHERE idxMacchina = @idxMacchina AND DataOraRif BETWEEN @inizio AND @fine
PRINT 'svuoto DiarioDiBordo per periodo indicato...'
EXEC stp_DDB_deleteMacchinaPeriodo @idxMacchina, @inizio, @fine -- cancella diario di bordo
PRINT 'processo EventList per periodo indicato...'
DECLARE @InizioStato DATETIME
DECLARE @IdxTipo INT
DECLARE @MatricolaKanban NVARCHAR(50)
DECLARE @Value NVARCHAR(50)
DECLARE @MatrOpr INT
DECLARE @pallet NVARCHAR(20)
DECLARE @nextIdxStato INT
DECLARE @currIdxStato INT
DECLARE @IdxFamiglia INT
DECLARE @TabAzione NVARCHAR(50) = '';
DECLARE @Azione NVARCHAR(50) = '';
-- calcolo famiglia macchina!
SET @IdxFamiglia = ( SELECT IdxFamiglia FROM Macchine2FamiglieMacchine WHERE idxMacchina = @idxMacchina )
-- Recupero stato precedente, altrimenti ipotizzo macchina inizialmente in stato richiesto (default: 1 = pronta) e quindi imposto stato current a quello iniziale richiesto...
SET @currIdxStato = ISNULL( ( SELECT TOP 1 IdxStato FROM DiarioDiBordo WHERE IdxMacchina = @idxMacchina AND InizioStato < @inizio
ORDER BY InizioStato DESC ) , @idxStatoStart)
-- verifico i record elaborati
SELECT COUNT(*)
FROM EventList AS e
LEFT JOIN dbo.AnagraficaEventi AS a ON e.idxTipo = a.IdxTipo
WHERE e.IdxMacchina = @idxMacchina
AND e.InizioStato BETWEEN @inizio AND @fine
-- leggo la tabella degli eventi con cursore x percorrere i dati...
DECLARE event2proc CURSOR FOR
SELECT e.InizioStato, e.IdxTipo, e.MatricolaKanban, e.Value, e.MatrOpr, e.pallet,
a.TabAzione, a.Azione
FROM EventList AS e
LEFT JOIN dbo.AnagraficaEventi AS a ON e.idxTipo = a.IdxTipo
WHERE e.IdxMacchina = @idxMacchina
AND e.InizioStato BETWEEN @inizio AND @fine
ORDER BY e.InizioStato;
/*
SELECT InizioStato, IdxTipo, MatricolaKanban, Value, MatrOpr, pallet
FROM EventList
WHERE IdxMacchina = @idxMacchina
AND InizioStato BETWEEN @inizio AND @fine
ORDER BY InizioStato;
*/
OPEN event2proc;
FETCH NEXT FROM event2proc
INTO @InizioStato, @IdxTipo, @MatricolaKanban, @Value, @MatrOpr, @pallet, @TabAzione, @Azione;
DECLARE @NumPz INT = 1;
DECLARE @ContaInsert INT = 0;
WHILE @@FETCH_STATUS = 0
BEGIN
IF ( ISNULL(@TabAzione,'') <> '' AND ISNULL(@Azione,'') <> '')
BEGIN
SET @NumPz = CASE WHEN (ISNUMERIC(@Value)=1) THEN @Value ELSE 1 END
EXEC dbo.stp_EL_processaEvento @IdxTipo, @idxMacchina, @MatricolaKanban, @InizioStato, @NumPz , 'N'
END
-- calcolo l'eventuale NUOVO idxStato
SET @nextIdxStato = ISNULL( (SELECT next_IdxStato FROM TransizioneStati
WHERE IdxFamiglia = @IdxFamiglia AND IdxStato = @currIdxStato AND IdxTipo = @IdxTipo ), @currIdxStato )
-- SE lo stato cambia registro nel DiarioDiBordo!
IF (@nextIdxStato <> @currIdxStato)
BEGIN
-- inserisco in DiarioDiBordo
INSERT INTO DiarioDiBordo
(IdxMacchina, InizioStato, FineStato, IdxStato, MatricolaKanban, Value, MatrOpr, pallet)
VALUES (@IdxMacchina, @InizioStato, NULL, @nextIdxStato, @MatricolaKanban, @Value, @MatrOpr, @pallet)
-- infine imposto il nuovo stato current...
SET @currIdxStato = @nextIdxStato
SET @ContaInsert = @ContaInsert + 1
END
-- Get the next values
FETCH NEXT FROM event2proc
INTO @InizioStato, @IdxTipo, @MatricolaKanban, @Value, @MatrOpr, @pallet, @TabAzione, @Azione;
END
CLOSE event2proc;
DEALLOCATE event2proc;
-- resetto microStato a 1
UPDATE dbo.MicroStatoMacchina
SET IdxMicroStato = 1,
InizioStato = @InizioStato,
Value = '0'
WHERE IdxMacchina = @idxMacchina
-- fa un controllo: elimina eventuali dichairazioni in DDB SE durata < 0...
DELETE FROM DiarioDiBordo WHERE DurataMinuti < 0 AND IdxMacchina = @idxMacchina
-- RI-ATTIVO inserimento in DiarioDiBordo per la macchina indicata
UPDATE DatiMacchine
SET insEnabled = 1
WHERE IdxMacchina = @IdxMacchina
PRINT 'concluso UPDATE tabelle...' + 'INSERT DiarioBordo : ' + CONVERT(VARCHAR(30),@ContaInsert)
--DBCC SHOWCONTIG(EventList)
--DBCC SHOWCONTIG(DiarioDiBordo)
--EXEC USP_DisableEnableNonClusteredIndexes @Database,null, 2 --riattivo indici
--ricostruisco indici X QUESTE TABELLE DOPPIA RICOSTRUZIONE INDICI NON NECESSARIA
--PRINT 'ricostruisco indici...'
--DBCC DBREINDEX(EventList)
--DBCC DBREINDEX(DiarioDiBordo)
--DBCC DBREINDEX(TransizioneIngressi)
--DBCC DBREINDEX(Kanban2ins)
--DBCC DBREINDEX(Kanban)
--DBCC DBREINDEX(AnagraficaOperatori)
--DBCC DBREINDEX(AnagraficaOperatori2ins)
--DBCC SHOWCONTIG(EventList)
--DBCC SHOWCONTIG(DiarioDiBordo)
RETURN
go
commit
go
-- stored update!
set xact_abort on
go
begin transaction
go
set ANSI_NULLS on
go
/*************************************
* STORED PROCEDURE stp_ODL_getByMacchinaPeriodo
* ottiene l'elenco degli ODL in lavorazione su una macchina in un dato periodo
*
* modif.: S.E.L. - 2012.04.02
**************************************/
alter PROCEDURE stp_ODL_getByMacchinaPeriodo
(
@IdxMacchina NVARCHAR(50),
@dataFrom DATETIME,
@dataTo DATETIME
)
AS
BEGIN
SELECT *
FROM v_ODL_exp
WHERE IdxMacchina = @IdxMacchina
AND ((DataInizio BETWEEN @dataFrom AND @dataTo) OR (DataFine BETWEEN @dataFrom AND @dataTo) OR (DataInizio <= @dataFrom AND ISNULL(DataFine,GETDATE()) >= @dataTo))
END
RETURN
go
/*************************************
* STORED PROCEDURE stp_repDonati_getDatiProdMacchina
* restituisce i dati di produzione di una macchina per PERIODO
*
* modif.: S.E.L. - 2012.03.21
**************************************/
alter PROCEDURE stp_repDonati_getDatiProdMacchinaPeriodo
(
@idxMacchina NVARCHAR(50),
@dataFrom DATETIME,
@dataTo DATETIME
)
AS
-- calcolo pezzi CONTATI, non quelli poi confermati...
DECLARE @PezziProd INT
SET @PezziProd = ISNULL((
SELECT COUNT(*)FROM TempiCicloRilevati
WHERE idxMacchina = @idxMacchina
AND DataOraRif BETWEEN @dataFrom AND @dataTo
), 0)
-- calcolo TEMPO MEDIO ponderato in base al num di pezzi per tipo...
DECLARE @TCAss DECIMAL(18,8)
;WITH cte_tabMinProd as
(
SELECT ISNULL(COUNT(tcr.DataOraRif), 0) * ISNULL(o.TCAssegnato, 0) AS MinProd
FROM TempiCicloRilevati tcr INNER JOIN ODL o
ON o.IdxMacchina=tcr.IdxMacchina AND o.CodArticolo = tcr.CodArticolo
WHERE tcr.DataOraRif BETWEEN o.DataInizio AND ISNULL(o.DataFine, GETDATE())
AND tcr.DataOraRif BETWEEN @dataFrom AND @dataTo
AND ((o.DataInizio <= @dataTo) AND (ISNULL(o.DataFine, GETDATE()) >= @dataFrom))
GROUP BY o.TCAssegnato
)
SELECT @TCAss = ISNULL(SUM(MinProd) / CASE WHEN @PezziProd > 0 THEN @PezziProd ELSE 1 END, 0)
FROM cte_tabMinProd
/****************************************************
* 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 BETWEEN @dataFrom AND @dataTo
AND IdxMacchina = @idxMacchina
)
-- 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 BETWEEN @dataFrom AND @dataTo
AND IdxMacchina = @idxMacchina
)
-- 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 BETWEEN @dataFrom AND @dataTo
AND IdxMacchina = @idxMacchina
)
/****************************************************
* Calcolo i TEMPI CICLO realtime (anche non confermati)
****************************************************/
-- DIVISIONE PER ZERO: controllo pezzi prod > 0...
DECLARE @numPezzi INT
SET @numPezzi = @PezziProd - 1 -- divido per n-1 per avere numIntervalli = numPezzi
IF(@numPezzi < 1) SET @numPezzi = 1
DECLARE @TCMedRT DECIMAL(18,8)
SET @TCMedRT = (
SELECT @TempoOnRT / @numPezzi
)
DECLARE @TCLavRT DECIMAL(18,8)
SET @TCLavRT = (
SELECT @TempoAutoRT / @numPezzi
)
DECLARE @TCEffRT DECIMAL(18,8)
SET @TCEffRT = ISNULL(( SELECT dbo.f_lastTempoTecnico(@idxMacchina, 2) ), -1) -- provo a calcolare ultimi tempi tecnici
IF (@TCEffRT =-1)
BEGIN
SET @TCEffRT = (
SELECT @TempoRunRT / @numPezzi
)
END
SELECT @PezziProd as PezziProd, @TCAss AS TCAssegnato, @TCMedRT AS TCMedioRT, @TCLavRT AS TCLavRT, @TCEffRT AS TCEffRT
RETURN
go
commit
go
-- dati eventi/stati/transizioni...
set xact_abort on
go
begin transaction
go
UPDATE dbo.AnagraficaEventi SET
Nome=N'Bcode - Cambio Pallet (unused)'
WHERE IdxTipo=11
UPDATE dbo.AnagraficaEventi SET
Nome=N'Barcode - Fermo Organizzativo', TabAzione=N'DatiMacchine', Azione=N'Fine'
WHERE IdxTipo=19
INSERT INTO dbo.AnagraficaEventi
VALUES (999, N'Commento', N'', N'')
go
commit transaction
go
set xact_abort on
go
begin transaction
go
UPDATE dbo.AnagraficaStati SET
Semaforo=N'S', ClasseTempo=N'T_OFF'
WHERE IdxStato=27
INSERT INTO dbo.AnagraficaStati
VALUES (30, N'Fermo Organizzativo', N'S', 1, N'T_OFF', 0)
go
commit transaction
go
-- tab transizioni!
set xact_abort on
go
begin transaction
go
DELETE FROM dbo.TransizioneStati WHERE IdxFamiglia=1 and IdxStato=1 and IdxTipo=1
DELETE FROM dbo.TransizioneStati WHERE IdxFamiglia=4 and IdxStato=1 and IdxTipo=1
go
commit transaction
go
set xact_abort on
go
begin transaction
go
INSERT INTO dbo.TransizioneStati
VALUES (2, 1, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (2, 2, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (2, 3, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (2, 4, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (2, 5, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (2, 6, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (2, 7, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (2, 8, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (2, 9, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (2, 10, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (2, 12, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (2, 13, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (2, 14, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (2, 15, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 1, 2, 2)
INSERT INTO dbo.TransizioneStati
VALUES (10, 1, 3, 3)
INSERT INTO dbo.TransizioneStati
VALUES (10, 1, 4, 4)
INSERT INTO dbo.TransizioneStati
VALUES (10, 1, 5, 5)
INSERT INTO dbo.TransizioneStati
VALUES (10, 1, 6, 6)
INSERT INTO dbo.TransizioneStati
VALUES (10, 1, 7, 7)
INSERT INTO dbo.TransizioneStati
VALUES (10, 1, 8, 8)
INSERT INTO dbo.TransizioneStati
VALUES (10, 1, 9, 9)
INSERT INTO dbo.TransizioneStati
VALUES (10, 1, 10, 10)
INSERT INTO dbo.TransizioneStati
VALUES (10, 1, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 1, 19, 30)
INSERT INTO dbo.TransizioneStati
VALUES (10, 1, 29, 28)
INSERT INTO dbo.TransizioneStati
VALUES (10, 1, 30, 29)
INSERT INTO dbo.TransizioneStati
VALUES (10, 2, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 3, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 3, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 4, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 4, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 5, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 5, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 5, 19, 30)
INSERT INTO dbo.TransizioneStati
VALUES (10, 6, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 6, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 6, 19, 30)
INSERT INTO dbo.TransizioneStati
VALUES (10, 7, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 7, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 7, 19, 30)
INSERT INTO dbo.TransizioneStati
VALUES (10, 8, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 8, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 8, 19, 30)
INSERT INTO dbo.TransizioneStati
VALUES (10, 9, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 9, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 9, 19, 30)
INSERT INTO dbo.TransizioneStati
VALUES (10, 10, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 10, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 10, 19, 30)
INSERT INTO dbo.TransizioneStati
VALUES (10, 11, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 11, 19, 30)
INSERT INTO dbo.TransizioneStati
VALUES (10, 11, 29, 28)
INSERT INTO dbo.TransizioneStati
VALUES (10, 11, 30, 29)
INSERT INTO dbo.TransizioneStati
VALUES (10, 12, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 12, 2, 2)
INSERT INTO dbo.TransizioneStati
VALUES (10, 12, 3, 3)
INSERT INTO dbo.TransizioneStati
VALUES (10, 12, 4, 4)
INSERT INTO dbo.TransizioneStati
VALUES (10, 12, 5, 5)
INSERT INTO dbo.TransizioneStati
VALUES (10, 12, 6, 6)
INSERT INTO dbo.TransizioneStati
VALUES (10, 12, 7, 7)
INSERT INTO dbo.TransizioneStati
VALUES (10, 12, 8, 8)
INSERT INTO dbo.TransizioneStati
VALUES (10, 12, 9, 9)
INSERT INTO dbo.TransizioneStati
VALUES (10, 12, 10, 10)
INSERT INTO dbo.TransizioneStati
VALUES (10, 12, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 12, 19, 30)
INSERT INTO dbo.TransizioneStati
VALUES (10, 12, 29, 28)
INSERT INTO dbo.TransizioneStati
VALUES (10, 12, 30, 29)
INSERT INTO dbo.TransizioneStati
VALUES (10, 13, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 13, 29, 28)
INSERT INTO dbo.TransizioneStati
VALUES (10, 13, 30, 29)
INSERT INTO dbo.TransizioneStati
VALUES (10, 14, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 14, 29, 28)
INSERT INTO dbo.TransizioneStati
VALUES (10, 14, 30, 29)
INSERT INTO dbo.TransizioneStati
VALUES (10, 15, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 15, 2, 2)
INSERT INTO dbo.TransizioneStati
VALUES (10, 15, 3, 3)
INSERT INTO dbo.TransizioneStati
VALUES (10, 15, 4, 4)
INSERT INTO dbo.TransizioneStati
VALUES (10, 15, 5, 5)
INSERT INTO dbo.TransizioneStati
VALUES (10, 15, 6, 6)
INSERT INTO dbo.TransizioneStati
VALUES (10, 15, 7, 7)
INSERT INTO dbo.TransizioneStati
VALUES (10, 15, 8, 8)
INSERT INTO dbo.TransizioneStati
VALUES (10, 15, 9, 9)
INSERT INTO dbo.TransizioneStati
VALUES (10, 15, 10, 10)
INSERT INTO dbo.TransizioneStati
VALUES (10, 15, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 15, 19, 30)
INSERT INTO dbo.TransizioneStati
VALUES (10, 15, 29, 28)
INSERT INTO dbo.TransizioneStati
VALUES (10, 15, 30, 29)
INSERT INTO dbo.TransizioneStati
VALUES (10, 23, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 23, 29, 28)
INSERT INTO dbo.TransizioneStati
VALUES (10, 23, 30, 29)
INSERT INTO dbo.TransizioneStati
VALUES (10, 24, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 24, 29, 28)
INSERT INTO dbo.TransizioneStati
VALUES (10, 24, 30, 29)
INSERT INTO dbo.TransizioneStati
VALUES (10, 25, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 25, 2, 2)
INSERT INTO dbo.TransizioneStati
VALUES (10, 25, 3, 3)
INSERT INTO dbo.TransizioneStati
VALUES (10, 25, 4, 4)
INSERT INTO dbo.TransizioneStati
VALUES (10, 25, 5, 5)
INSERT INTO dbo.TransizioneStati
VALUES (10, 25, 6, 6)
INSERT INTO dbo.TransizioneStati
VALUES (10, 25, 7, 7)
INSERT INTO dbo.TransizioneStati
VALUES (10, 25, 8, 8)
INSERT INTO dbo.TransizioneStati
VALUES (10, 25, 9, 9)
INSERT INTO dbo.TransizioneStati
VALUES (10, 25, 10, 10)
INSERT INTO dbo.TransizioneStati
VALUES (10, 25, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 25, 19, 30)
INSERT INTO dbo.TransizioneStati
VALUES (10, 25, 26, 27)
INSERT INTO dbo.TransizioneStati
VALUES (10, 25, 29, 28)
INSERT INTO dbo.TransizioneStati
VALUES (10, 25, 30, 29)
INSERT INTO dbo.TransizioneStati
VALUES (10, 26, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 26, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 26, 19, 30)
INSERT INTO dbo.TransizioneStati
VALUES (10, 26, 29, 28)
INSERT INTO dbo.TransizioneStati
VALUES (10, 26, 30, 29)
INSERT INTO dbo.TransizioneStati
VALUES (10, 27, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 27, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 27, 19, 30)
INSERT INTO dbo.TransizioneStati
VALUES (10, 28, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 28, 14, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 29, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 29, 14, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 30, 1, 1)
INSERT INTO dbo.TransizioneStati
VALUES (10, 30, 12, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 30, 14, 11)
INSERT INTO dbo.TransizioneStati
VALUES (10, 30, 26, 27)
go
commit transaction
go
set xact_abort on
go
begin transaction
go
DELETE FROM dbo.TransizioneStati WHERE IdxFamiglia=10 and IdxStato=12 and IdxTipo=15
DELETE FROM dbo.TransizioneStati WHERE IdxFamiglia=10 and IdxStato=13 and IdxTipo=16
DELETE FROM dbo.TransizioneStati WHERE IdxFamiglia=10 and IdxStato=13 and IdxTipo=21
DELETE FROM dbo.TransizioneStati WHERE IdxFamiglia=10 and IdxStato=14 and IdxTipo=17
DELETE FROM dbo.TransizioneStati WHERE IdxFamiglia=10 and IdxStato=14 and IdxTipo=20
DELETE FROM dbo.TransizioneStati WHERE IdxFamiglia=10 and IdxStato=14 and IdxTipo=22
DELETE FROM dbo.TransizioneStati WHERE IdxFamiglia=10 and IdxStato=15 and IdxTipo=18
DELETE FROM dbo.TransizioneStati WHERE IdxFamiglia=10 and IdxStato=23 and IdxTipo=23
DELETE FROM dbo.TransizioneStati WHERE IdxFamiglia=10 and IdxStato=24 and IdxTipo=24
DELETE FROM dbo.TransizioneStati WHERE IdxFamiglia=10 and IdxStato=25 and IdxTipo=15
DELETE FROM dbo.TransizioneStati WHERE IdxFamiglia=10 and IdxStato=25 and IdxTipo=25
go
commit transaction
go
set xact_abort on
go
begin transaction
go
set identity_insert dbo.LinkMenuJQM on
go
INSERT INTO dbo.LinkMenuJQM
(idxLink, TipoLink, ordine, Testo, NavigateUrl, icona)
VALUES (12, N'DetMacc', 5, N'Commenti', N'~/Commenti.aspx', N'star')
INSERT INTO dbo.LinkMenuJQM
(idxLink, TipoLink, ordine, Testo, NavigateUrl, icona)
VALUES (13, N'EditMacch', 5, N'Commenti', N'~/Commenti.aspx', N'star')
go
set identity_insert dbo.LinkMenuJQM off
go
commit transaction
go
-- registro versione...
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(401, GETDATE())
GO
SELECT TOP 10 * FROM LogUpdateDb ORDER BY Versione DESC
GO
-- 5 sec su db SteamWare