-- 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