605 lines
22 KiB
Transact-SQL
605 lines
22 KiB
Transact-SQL
set xact_abort on;
|
|
go
|
|
|
|
begin transaction;
|
|
go
|
|
|
|
set ANSI_NULLS on;
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_MSE_refresh
|
|
* AGGIORNA tabella stato attuale macchine x macchina indicata
|
|
*
|
|
* modif.: S.E.L. - 2013.02.28
|
|
**************************************/
|
|
create PROCEDURE stp_MSE_refresh
|
|
(
|
|
@IdxMacchina NVARCHAR(50) -- macchina da aggiornare
|
|
)
|
|
AS
|
|
|
|
--init variabili!
|
|
DECLARE @adesso DATETIME = GETDATE()
|
|
DECLARE @trovate INT = 0
|
|
DECLARE @tvStato TABLE (
|
|
idxStato INT NULL,
|
|
DescrizioneStato NVARCHAR(50),
|
|
Semaforo NVARCHAR(50),
|
|
Minuti INT NULL
|
|
)
|
|
DECLARE @tvODL TABLE (
|
|
IdxODL INT NULL,
|
|
CodArticolo NVARCHAR(50),
|
|
DescArticolo NVARCHAR(50),
|
|
IdxMacchina INT NULL,
|
|
CodMacchina NVARCHAR(50),
|
|
Nome NVARCHAR(50),
|
|
NumPezzi INT NULL,
|
|
TCAssegnato DECIMAL(18,8),
|
|
DataInizio DATETIME,
|
|
DataFine DATETIME
|
|
)
|
|
DECLARE @tvProd TABLE (
|
|
CodArticolo NVARCHAR(50),
|
|
PezziLanciati INT NULL,
|
|
PezziProd INT NULL,
|
|
PezziConf INT NULL,
|
|
TCAssegnato DECIMAL(18,8),
|
|
CodOperatore INT NULL,
|
|
TempoOn DECIMAL(18,8),
|
|
TempoAuto DECIMAL(18,8),
|
|
TempoRun DECIMAL(18,8),
|
|
TCMedio DECIMAL(18,8),
|
|
TCLav DECIMAL(18,8),
|
|
TCEff DECIMAL(18,8),
|
|
TCMedioRT DECIMAL(18,8),
|
|
TCLavRT DECIMAL(18,8),
|
|
TCEffRT DECIMAL(18,8)
|
|
)
|
|
|
|
BEGIN
|
|
-- controllo: se c'è riga macchina richiesta...
|
|
SELECT @trovate=COUNT(*) FROM MappaStatoExpl WHERE IdxMacchina = @IdxMacchina
|
|
|
|
-- se NON c'è la creo...
|
|
IF(@trovate = 0)
|
|
BEGIN
|
|
-- calcolo ODL
|
|
;WITH cteODL AS
|
|
(
|
|
SELECT * FROM ODL
|
|
WHERE IdxODL IN
|
|
(
|
|
SELECT IdxODL
|
|
FROM ODL
|
|
WHERE DataFine IS NULL
|
|
AND (IdxMacchina = @IdxMacchina)
|
|
|
|
UNION
|
|
|
|
SELECT MAX(IdxODL)
|
|
FROM ODL
|
|
WHERE IdxMacchina = @IdxMacchina
|
|
)
|
|
)
|
|
-- inserisco i nuovi dati
|
|
INSERT INTO MappaStatoExpl(lastUpdate, IdxMacchina, CodMacchina, Nome, url, IdxODL, CodArticolo, NumPezzi, TCAssegnato, DataInizioODL)
|
|
SELECT @adesso, ma.IdxMacchina, ma.CodMacchina, ma.Nome, url, ISNULL(o.IdxODL,0), ISNULL(o.CodArticolo,'-'), ISNULL(o.NumPezzi,0), ISNULL(o.TCAssegnato,0), ISNULL(o.DataInizio,'2000/01/01')
|
|
FROM Macchine ma LEFT OUTER JOIN cteODL o ON ma.IdxMacchina=o.IdxMacchina
|
|
WHERE ma.IdxMacchina = @IdxMacchina
|
|
AND NOT (locazione IS NULL)
|
|
AND ( (ISNULL(o.IdxODL,0) = 0) OR ((o.DataFine IS NULL) AND NOT (o.DataInizio IS NULL)) )
|
|
ORDER BY ma.locazione
|
|
END
|
|
|
|
-- popolo tab stati
|
|
INSERT @tvStato(idxStato, Minuti)
|
|
EXEC stp_repDonati_getLastStatoDurataMacchina @IdxMacchina, 0.1
|
|
-- fix dati mancanti
|
|
UPDATE tvs
|
|
SET tvs.Semaforo = s.Semaforo
|
|
,tvs.DescrizioneStato = s.Descrizione
|
|
FROM @tvStato tvs INNER JOIN AnagraficaStati s ON tvs.idxStato=s.IdxStato
|
|
|
|
-- popolo tab ODL
|
|
INSERT @tvODL
|
|
EXEC stp_ODL_getByMacchina @IdxMacchina
|
|
|
|
-- popolo tab pezzi/tempi
|
|
INSERT @tvProd(CodArticolo,PezziLanciati,PezziProd,PezziConf,TCAssegnato,CodOperatore,TempoOn,TempoAuto,TempoRun,TCMedio,TCLav,TCEff,TCMedioRT,TCLavRT,TCEffRT )
|
|
EXEC stp_repDonati_getDatiProdMacchina @IdxMacchina
|
|
|
|
-- aggiorno in blocco i valori
|
|
UPDATE mse
|
|
SET mse.lastUpdate = @adesso
|
|
,mse.idxStato = ISNULL(tvs.idxStato,0)
|
|
,mse.durata = ISNULL(tvs.Minuti,0)
|
|
,mse.Semaforo = ISNULL(tvs.Semaforo,'')
|
|
,mse.DescrizioneStato = ISNULL(tvs.DescrizioneStato,'')
|
|
,mse.TCAssegnato = ISNULL(tvo.TCAssegnato,0)
|
|
,mse.NumPezzi = ISNULL(tvo.NumPezzi,0)
|
|
,mse.DataInizioODL = ISNULL(tvo.DataInizio,'2000/01/01')
|
|
,mse.PezziProd = ISNULL(tvp.PezziProd,0)
|
|
,mse.PezziConf = ISNULL(tvp.PezziConf,0)
|
|
,mse.TempoOn = ISNULL(tvp.TempoOn,0)
|
|
,mse.TempoAuto = ISNULL(tvp.TempoAuto,0)
|
|
,mse.TempoRun = ISNULL(tvp.TempoRun,0)
|
|
,mse.TCMedio = ISNULL(tvp.TCMedio,0)
|
|
,mse.TCLav = ISNULL(tvp.TCLav,0)
|
|
,mse.TCEff = ISNULL(tvp.TCEff,0)
|
|
,mse.TCMedioRT = ISNULL(tvp.TCMedioRT,0)
|
|
,mse.TCLavRT = ISNULL(tvp.TCLavRT,0)
|
|
,mse.TCEffRT = ISNULL(tvp.TCEffRT,0)
|
|
FROM MappaStatoExpl mse
|
|
CROSS JOIN @tvStato tvs
|
|
CROSS JOIN @tvODL tvo
|
|
CROSS JOIN @tvProd tvp
|
|
WHERE mse.Idxmacchina = @IdxMacchina
|
|
|
|
END
|
|
|
|
RETURN
|
|
go
|
|
|
|
commit;
|
|
go
|
|
|
|
|
|
set xact_abort on;
|
|
go
|
|
|
|
begin transaction;
|
|
go
|
|
|
|
set ANSI_NULLS on;
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE InsEvento
|
|
* inserimento di un evento nel db (tab EventList)
|
|
* inerimento in anagrafica a "nd" dell'operatore se matricola mancasse
|
|
*
|
|
* modif.: S.E.L.
|
|
* il: 2008.08.07
|
|
**************************************/
|
|
alter PROCEDURE stp_EL_InsEvento
|
|
(
|
|
@IdxMacchina varchar(50),
|
|
@IdxTipo int,
|
|
@MatricolaKanban varchar(50),
|
|
@Value varchar(50),
|
|
@MatrOpr int,
|
|
@pallet varchar(20)
|
|
)
|
|
AS
|
|
/*************************************
|
|
* verifico se esista operatore
|
|
**************************************/
|
|
SELECT *
|
|
FROM AnagraficaOperatori
|
|
WHERE (MatrOpr = @MatrOpr)
|
|
IF(@@ROWCOUNT = 0 )
|
|
BEGIN
|
|
/* inserisco nuovo record */
|
|
INSERT INTO AnagraficaOperatori(MatrOpr, Cognome, Nome, isAdmin, authKey)
|
|
VALUES (@MatrOpr,'nd (cognome)','nd (nome)', 0, '12345')
|
|
END
|
|
|
|
/* inserisco evento*/
|
|
INSERT INTO EventList
|
|
(IdxMacchina, InizioStato, IdxTipo, MatricolaKanban, Value, MatrOpr, pallet)
|
|
VALUES (@IdxMacchina, GETDATE(), @IdxTipo, @MatricolaKanban, @Value, @MatrOpr, @pallet)
|
|
|
|
RETURN
|
|
go
|
|
|
|
/*************************************
|
|
* STORED PROCEDURE stp_MSE_getData
|
|
* tabella stato attuale macchine (da mostrare)
|
|
*
|
|
* modif.: S.E.L. - 2013.02.28
|
|
**************************************/
|
|
alter PROCEDURE stp_MSE_getData
|
|
(
|
|
@maxAgeSec INT -- soglia di "vecchiaia" del dato massima accettabile dopo cui parte ricalcolo, in millisec, se < 1000 ignoro!
|
|
)
|
|
AS
|
|
|
|
-- cerco dato + recente
|
|
DECLARE @adesso DATETIME = GETDATE()
|
|
DECLARE @lastUpdate DATETIME
|
|
|
|
SELECT TOP 1 @lastUpdate=ISNULL(lastUpdate, '2000/01/01') FROM MappaStatoExpl ORDER BY lastUpdate DESC
|
|
SELECT @lastUpdate= ISNULL(@lastUpdate, '2000/01/01')
|
|
|
|
-- solo se sup ai 1000 ms! oppure zero...
|
|
IF(@maxAgeSec > 1000 OR @maxAgeSec=0)
|
|
BEGIN
|
|
-- dato vecchio! aggiorno!
|
|
IF(DATEDIFF(s,@lastUpdate,@adesso)*1000 > @maxAgeSec)
|
|
BEGIN
|
|
-- truncate table precedente
|
|
TRUNCATE TABLE MappaStatoExpl
|
|
|
|
;WITH cteODL AS
|
|
(
|
|
SELECT * FROM ODL
|
|
WHERE IdxODL IN
|
|
(
|
|
SELECT IdxODL
|
|
FROM ODL
|
|
WHERE DataFine IS NULL
|
|
|
|
UNION
|
|
|
|
SELECT MAX(IdxODL)
|
|
FROM ODL
|
|
GROUP BY IdxMacchina
|
|
)
|
|
)
|
|
-- inserisco di nuovo i dati
|
|
INSERT INTO MappaStatoExpl(lastUpdate, IdxMacchina, CodMacchina, Nome, url, IdxODL, CodArticolo, NumPezzi, TCAssegnato, DataInizioODL)
|
|
SELECT @adesso, ma.IdxMacchina, ma.CodMacchina, ma.Nome, url, ISNULL(o.IdxODL,0), ISNULL(o.CodArticolo,'-'), ISNULL(o.NumPezzi,0), ISNULL(o.TCAssegnato,0), ISNULL(o.DataInizio,'2000/01/01')
|
|
FROM Macchine ma LEFT OUTER JOIN cteODL o ON ma.IdxMacchina=o.IdxMacchina
|
|
WHERE NOT (locazione IS NULL) AND ( (ISNULL(o.IdxODL,0) = 0) OR ((o.DataFine IS NULL) AND NOT (o.DataInizio IS NULL)) )
|
|
ORDER BY ma.locazione
|
|
|
|
-- dichiaro le 2 table variables che userò x caricare i dati di stato
|
|
DECLARE @tvStato TABLE (
|
|
IdxMacchina INT NULL,
|
|
idxStato INT NULL,
|
|
DescrizioneStato NVARCHAR(50),
|
|
Semaforo NVARCHAR(50),
|
|
Minuti INT NULL
|
|
)
|
|
DECLARE @tvODL TABLE (
|
|
IdxODL INT NULL,
|
|
CodArticolo NVARCHAR(50),
|
|
DescArticolo NVARCHAR(50),
|
|
IdxMacchina INT NULL,
|
|
CodMacchina NVARCHAR(50),
|
|
Nome NVARCHAR(50),
|
|
NumPezzi INT NULL,
|
|
TCAssegnato DECIMAL(18,8),
|
|
DataInizio DATETIME,
|
|
DataFine DATETIME
|
|
)
|
|
DECLARE @tvProd TABLE (
|
|
IdxMacchina INT NULL,
|
|
CodArticolo NVARCHAR(50),
|
|
PezziLanciati INT NULL,
|
|
PezziProd INT NULL,
|
|
PezziConf INT NULL,
|
|
TCAssegnato DECIMAL(18,8),
|
|
CodOperatore INT NULL,
|
|
TempoOn DECIMAL(18,8),
|
|
TempoAuto DECIMAL(18,8),
|
|
TempoRun DECIMAL(18,8),
|
|
TCMedio DECIMAL(18,8),
|
|
TCLav DECIMAL(18,8),
|
|
TCEff DECIMAL(18,8),
|
|
TCMedioRT DECIMAL(18,8),
|
|
TCLavRT DECIMAL(18,8),
|
|
TCEffRT DECIMAL(18,8)
|
|
)
|
|
|
|
DECLARE @numRows INT = 0
|
|
DECLARE @currRow INT = 1
|
|
DECLARE @IdxMacchina INT = 0
|
|
|
|
SET @numRows = ISNULL((SELECT COUNT(*) FROM MappaStatoExpl),0)
|
|
|
|
-- carico altri dati con ciclo while
|
|
WHILE (@currRow <= @numRows)
|
|
BEGIN
|
|
-- macchina corrente!
|
|
SELECT @IdxMacchina = IdxMacchina FROM MappaStatoExpl WHERE RowNum = @currRow
|
|
|
|
-- popolo tab stati
|
|
INSERT @tvStato(idxStato, Minuti)
|
|
EXEC stp_repDonati_getLastStatoDurataMacchina @IdxMacchina, 0.1
|
|
-- fix dati mancanti
|
|
UPDATE tvs
|
|
SET tvs.IdxMacchina = @IdxMacchina
|
|
,tvs.Semaforo = s.Semaforo
|
|
,tvs.DescrizioneStato = s.Descrizione
|
|
FROM @tvStato tvs INNER JOIN AnagraficaStati s ON tvs.idxStato=s.IdxStato
|
|
WHERE tvs.IdxMacchina IS NULL
|
|
|
|
-- popolo tab ODL
|
|
INSERT @tvODL
|
|
EXEC stp_ODL_getByMacchina @IdxMacchina
|
|
|
|
-- popolo tab pezzi/tempi
|
|
INSERT @tvProd(CodArticolo,PezziLanciati,PezziProd,PezziConf,TCAssegnato,CodOperatore,TempoOn,TempoAuto,TempoRun,TCMedio,TCLav,TCEff,TCMedioRT,TCLavRT,TCEffRT )
|
|
EXEC stp_repDonati_getDatiProdMacchina @IdxMacchina
|
|
-- fix dati mancanti
|
|
UPDATE tvp
|
|
SET tvp.IdxMacchina = @IdxMacchina
|
|
FROM @tvProd tvp
|
|
WHERE tvp.IdxMacchina IS NULL
|
|
|
|
-- aggiorno contatore
|
|
SET @currRow = @currRow + 1
|
|
END
|
|
-- aggiorno in blocco i valori x stato e pezzi prodotti
|
|
UPDATE mse
|
|
SET mse.idxStato = ISNULL(tvs.idxStato,0)
|
|
,mse.durata = ISNULL(tvs.Minuti,0)
|
|
,mse.Semaforo = ISNULL(tvs.Semaforo,'')
|
|
,mse.DescrizioneStato = ISNULL(tvs.DescrizioneStato,'')
|
|
FROM MappaStatoExpl mse INNER JOIN @tvStato tvs ON mse.IdxMacchina=tvs.IdxMacchina
|
|
|
|
-- aggiorno in blocco i valori x ODL
|
|
UPDATE mse
|
|
SET mse.TCAssegnato = ISNULL(tvo.TCAssegnato,0)
|
|
,mse.NumPezzi = ISNULL(tvo.NumPezzi,0)
|
|
,mse.DataInizioODL = ISNULL(tvo.DataInizio,'2000/01/01')
|
|
FROM MappaStatoExpl mse INNER JOIN @tvODL tvo ON mse.IdxMacchina=tvo.IdxMacchina
|
|
|
|
-- aggiorno in blocco i valori x produzione
|
|
UPDATE mse
|
|
SET mse.PezziProd = ISNULL(tvp.PezziProd,0)
|
|
,mse.PezziConf = ISNULL(tvp.PezziConf,0)
|
|
,mse.TempoOn = ISNULL(tvp.TempoOn,0)
|
|
,mse.TempoAuto = ISNULL(tvp.TempoAuto,0)
|
|
,mse.TempoRun = ISNULL(tvp.TempoRun,0)
|
|
,mse.TCMedio = ISNULL(tvp.TCMedio,0)
|
|
,mse.TCLav = ISNULL(tvp.TCLav,0)
|
|
,mse.TCEff = ISNULL(tvp.TCEff,0)
|
|
,mse.TCMedioRT = ISNULL(tvp.TCMedioRT,0)
|
|
,mse.TCLavRT = ISNULL(tvp.TCLavRT,0)
|
|
,mse.TCEffRT = ISNULL(tvp.TCEffRT,0)
|
|
FROM MappaStatoExpl mse INNER JOIN @tvProd tvp ON mse.IdxMacchina=tvp.IdxMacchina
|
|
|
|
END
|
|
END
|
|
-- restituisco la tabella finale
|
|
SELECT *
|
|
FROM MappaStatoExpl
|
|
|
|
RETURN
|
|
go
|
|
|
|
commit;
|
|
go
|
|
|
|
|
|
set xact_abort on;
|
|
go
|
|
|
|
begin transaction;
|
|
go
|
|
|
|
set ANSI_NULLS on;
|
|
go
|
|
|
|
/***************************************************
|
|
* Trigger trg_ODL_updateMSE
|
|
*
|
|
* fa un refresh completo della MSE ad ogni intervento sull'ODL
|
|
*
|
|
* modificato: S.E.L.
|
|
* 2013.03.14
|
|
*
|
|
***************************************************/
|
|
create TRIGGER trg_ODL_updateMSE
|
|
ON ODL
|
|
FOR INSERT, UPDATE
|
|
AS
|
|
|
|
-- eseguo RICALCOLO tabella stato expl
|
|
EXEC stp_MSE_getData 0
|
|
go
|
|
|
|
commit;
|
|
go
|
|
|
|
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 )
|
|
/* recupero altri valori */
|
|
SET @TabAzione = ( SELECT ISNULL(TabAzione,'') FROM AnagraficaEventi WHERE IdxTipo = @IdxTipo )
|
|
SET @Azione = ( SELECT ISNULL(Azione,'') FROM AnagraficaEventi WHERE IdxTipo = @IdxTipo )
|
|
/* 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 ) )
|
|
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 ) )
|
|
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 ) )
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- registro versione...
|
|
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(375, GETDATE())
|
|
GO
|
|
|
|
SELECT TOP 10 * FROM LogUpdateDb ORDER BY Versione DESC
|
|
GO |