aggiunto progetto MapoDb...
This commit is contained in:
@@ -0,0 +1,167 @@
|
||||
create table LogUpdateDb(
|
||||
Versione int not null constraint PK_LogUpdateDb primary key,
|
||||
Data datetime
|
||||
)
|
||||
go
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
alter table AnagraficaStati add
|
||||
Priorita int
|
||||
go
|
||||
|
||||
exec sp_addextendedproperty 'MS_Description', 'livello di precedenza (il minore precede e sovrascrive i livelli successivi)', 'SCHEMA', 'dbo', 'TABLE', 'AnagraficaStati', 'COLUMN', 'Priorita'
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
alter TRIGGER UpdDiarioDiBordo
|
||||
ON DiarioDiBordo
|
||||
FOR INSERT
|
||||
AS
|
||||
|
||||
/* dichiaro variabili */
|
||||
DECLARE @IdxMacchina NVARCHAR(50)
|
||||
DECLARE @InizioStato DATETIME
|
||||
DECLARE @soloMinuti FLOAT
|
||||
DECLARE @IdxStatoOld INT
|
||||
DECLARE @IdxStatoNew INT
|
||||
DECLARE @semaforoOld VARCHAR(50)
|
||||
DECLARE @semaforoNew VARCHAR(50)
|
||||
DECLARE @prioritaOld INT
|
||||
DECLARE @prioritaNew INT
|
||||
|
||||
/* recupero valori x inserting */
|
||||
SET @IdxMacchina = ( SELECT i.IdxMacchina FROM inserted i )
|
||||
SET @InizioStato = ( SELECT i.InizioStato FROM inserted i )
|
||||
SET @soloMinuti = ( SELECT DATEDIFF(n, InizioStato, @InizioStato) FROM DiarioDiBordo WHERE (FineStato IS NULL) AND (IdxMacchina = @IdxMacchina) AND (InizioStato <>@InizioStato) )
|
||||
/* recupero dati x stati e semafori/priorità x eventuale update a ritroso dello stato */
|
||||
SET @IdxStatoOld = ( SELECT IdxStato FROM DiarioDiBordo WHERE (FineStato IS NULL) AND (IdxMacchina = @IdxMacchina) AND (InizioStato <>@InizioStato) )
|
||||
SET @IdxStatoNew = ( SELECT i.IdxStato FROM inserted i )
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------ */
|
||||
/* CONTROLLO SE NECESSARIO AGGIORNARE STATO PRECEDENTE guardando le famiglie "semaforiche" e la priorità dello stato vecchio e nuovo*/
|
||||
/* faccio i controlli SOLO se lo stato è cambiato da vecchio a nuovo */
|
||||
IF (@IdxStatoOld <> @IdxStatoNew)
|
||||
BEGIN
|
||||
SET @semaforoOld = ( SELECT Semaforo FROM AnagraficaStati WHERE IdxStato = @IdxStatoOld )
|
||||
SET @semaforoNew = ( SELECT Semaforo FROM AnagraficaStati WHERE IdxStato = @IdxStatoNew )
|
||||
|
||||
/* questo controllo ed eventuale update lo faccio SOLO se i semafori corrispondono (stessa "famiglia" */
|
||||
IF (@semaforoOld = @semaforoNew)
|
||||
BEGIN
|
||||
SET @prioritaOld = ( SELECT Priorita FROM AnagraficaStati WHERE IdxStato = @IdxStatoOld )
|
||||
SET @prioritaNew = ( SELECT Priorita FROM AnagraficaStati WHERE IdxStato = @IdxStatoNew )
|
||||
|
||||
/* controlo se la priorità nuova sia + bassa della precedente e nel caso sovrascrivo */
|
||||
IF (@prioritaNew < @prioritaOld)
|
||||
BEGIN
|
||||
/* in questo caso imposto lo stato precedente come quello nuovo */
|
||||
UPDATE DiarioDiBordo
|
||||
SET IdxStato = @IdxStatoNew
|
||||
WHERE (FineStato IS NULL) AND (IdxMacchina = @IdxMacchina) AND (InizioStato <> @InizioStato)
|
||||
END
|
||||
END
|
||||
END
|
||||
/* ------------------------------------------------------------------------------------------------------------ */
|
||||
|
||||
/* Chiudo lo stato precedente */
|
||||
UPDATE DiarioDiBordo
|
||||
SET FineStato = @InizioStato, DurataMinuti = @soloMinuti + CAST((DATEDIFF(ms, DATEADD(n,@soloMinuti,InizioStato), @InizioStato)) AS FLOAT)/60000
|
||||
WHERE (FineStato IS NULL) AND (IdxMacchina = @IdxMacchina) AND (InizioStato <> @InizioStato)
|
||||
|
||||
/* Aggiorno tabella stato corrente della macchina */
|
||||
DELETE FROM StatoMacchine
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
|
||||
INSERT INTO StatoMacchine(IdxMacchina, IdxStato, InizioStato, Value, MatricolaKanban, KanbanCode, TempoCicloBase, PzPalletProd)
|
||||
SELECT IdxMacchina, IdxStato, InizioStato, Value, MatricolaKanban, KanbanCode, TempoCicloBase, PzPalletProd
|
||||
FROM inserted
|
||||
|
||||
/* aggiorno dati kanban DiarioDiBordo... */
|
||||
UPDATE DiarioDiBordo
|
||||
SET KanbanCode = k.KanbanCode, TempoCicloBase = k.TempoCicloBase, PzPalletProd = k.PzPallet
|
||||
FROM Kanban AS k INNER JOIN
|
||||
DiarioDiBordo ON k.MatricolaKanban = DiarioDiBordo.MatricolaKanban
|
||||
WHERE (DiarioDiBordo.TempoCicloBase IS NULL)
|
||||
|
||||
/* 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.TempoCicloBase IS NULL)
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
Priorita=1
|
||||
WHERE IdxStato=1
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
Priorita=1
|
||||
WHERE IdxStato=2
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
Priorita=1
|
||||
WHERE IdxStato=3
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
Priorita=1
|
||||
WHERE IdxStato=4
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
Priorita=3
|
||||
WHERE IdxStato=5
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
Priorita=1
|
||||
WHERE IdxStato=6
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
Priorita=1
|
||||
WHERE IdxStato=7
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
Priorita=1
|
||||
WHERE IdxStato=8
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
Priorita=1
|
||||
WHERE IdxStato=9
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
Priorita=1
|
||||
WHERE IdxStato=10
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
Priorita=1
|
||||
WHERE IdxStato=11
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
Priorita=4
|
||||
WHERE IdxStato=12
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
Priorita=1
|
||||
WHERE IdxStato=13
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
Priorita=1
|
||||
WHERE IdxStato=14
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
Priorita=5
|
||||
WHERE IdxStato=15
|
||||
go
|
||||
|
||||
commit transaction
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(10, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,45 @@
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
create table TempiCicloRilevati(
|
||||
IdxMacchina nvarchar(50) not null,
|
||||
DataOraRif datetime not null,
|
||||
TempoMedio decimal(18,8) not null constraint DF_TempiCicloRilevati_TempoMedio default (1),
|
||||
PzProd int not null constraint DF_TempiCicloRilevati_PzProd default (1),
|
||||
|
||||
constraint PK_TempiCicloRilevati primary key(IdxMacchina,DataOraRif)
|
||||
)
|
||||
go
|
||||
|
||||
alter table TempiCicloRilevati add
|
||||
constraint FK_TempiCicloRilevati_Macchine foreign key(IdxMacchina) references Macchine(IdxMacchina) on update cascade
|
||||
go
|
||||
|
||||
create table TempiCicloTeorici(
|
||||
IdxMacchina nvarchar(50) not null,
|
||||
DataOraFrom datetime not null,
|
||||
DataOraTo datetime,
|
||||
TempoAssegnato decimal(18,8) not null constraint DF_TempiCicloTeorici_TempoMedio default (1),
|
||||
|
||||
constraint PK_TempiCicloTeorici primary key(IdxMacchina,DataOraFrom)
|
||||
)
|
||||
go
|
||||
|
||||
alter table TempiCicloTeorici add
|
||||
constraint FK_TempiCicloTeorici_Macchine foreign key(IdxMacchina) references Macchine(IdxMacchina) on update cascade
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(15, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,215 @@
|
||||
create table AnagClassiTempo(
|
||||
ClasseTempo nvarchar(50) not null constraint PK_AnagClassiTempo primary key,
|
||||
Descrizione nvarchar(500)
|
||||
)
|
||||
go
|
||||
|
||||
|
||||
alter table AnagraficaStati add
|
||||
ClasseTempo nvarchar(50)
|
||||
go
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
INSERT INTO dbo.AnagClassiTempo
|
||||
VALUES (N'T_Auto', N'Macchina in Automatico')
|
||||
INSERT INTO dbo.AnagClassiTempo
|
||||
VALUES (N'T_AutoRun', N'Macchina in Automatico e Lavora')
|
||||
INSERT INTO dbo.AnagClassiTempo
|
||||
VALUES (N'T_Fermo', N'Macchina Ferma')
|
||||
INSERT INTO dbo.AnagClassiTempo
|
||||
VALUES (N'T_ND', N'Macchina non disponibile')
|
||||
go
|
||||
|
||||
commit transaction
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
ClasseTempo=N'T_Auto'
|
||||
WHERE IdxStato=1
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
ClasseTempo=N'T_ND'
|
||||
WHERE IdxStato=2
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
ClasseTempo=N'T_ND'
|
||||
WHERE IdxStato=3
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
ClasseTempo=N'T_Fermo'
|
||||
WHERE IdxStato=4
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
ClasseTempo=N'T_Fermo'
|
||||
WHERE IdxStato=5
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
ClasseTempo=N'T_Fermo'
|
||||
WHERE IdxStato=6
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
ClasseTempo=N'T_Fermo'
|
||||
WHERE IdxStato=7
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
ClasseTempo=N'T_Fermo'
|
||||
WHERE IdxStato=8
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
ClasseTempo=N'T_Fermo'
|
||||
WHERE IdxStato=9
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
ClasseTempo=N'T_ND'
|
||||
WHERE IdxStato=10
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
ClasseTempo=N'T_ND'
|
||||
WHERE IdxStato=11
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
ClasseTempo=N'T_Fermo'
|
||||
WHERE IdxStato=12
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
ClasseTempo=N'T_AutoRun'
|
||||
WHERE IdxStato=13
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
ClasseTempo=N'T_ND'
|
||||
WHERE IdxStato=14
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
ClasseTempo=N'T_Auto'
|
||||
WHERE IdxStato=15
|
||||
go
|
||||
|
||||
commit transaction
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
create table DatiConfermati(
|
||||
IdxConferma int not null identity constraint PK_DatiConfermati primary key,
|
||||
DataOraApp datetime not null,
|
||||
DataRif datetime not null,
|
||||
TurnoRif int,
|
||||
CodArticolo nvarchar(50),
|
||||
IdxMacchina nvarchar(50) not null,
|
||||
TCAssegnato decimal(18,8),
|
||||
MatrOpr int,
|
||||
MatrApp int not null,
|
||||
DataOraFrom datetime,
|
||||
DataOraTo datetime,
|
||||
IdxStato int not null,
|
||||
TotPzProd int,
|
||||
TempoProdotto decimal(18,8),
|
||||
TempoLavoro decimal(18,8),
|
||||
TempoAuto decimal(18,8),
|
||||
TempoFermo decimal(18,8),
|
||||
TotPzFermo int
|
||||
)
|
||||
go
|
||||
|
||||
exec sp_addextendedproperty 'MS_Description', 'matricola dell''operatore che ha lavorato sulla macchina', 'SCHEMA', 'dbo', 'TABLE', 'DatiConfermati', 'COLUMN', 'MatrOpr'
|
||||
go
|
||||
|
||||
exec sp_addextendedproperty 'MS_Description', 'matricola dell''approvatore del record', 'SCHEMA', 'dbo', 'TABLE', 'DatiConfermati', 'COLUMN', 'MatrApp'
|
||||
go
|
||||
|
||||
exec sp_addextendedproperty 'MS_Description', 'pezzi prodotti in ciclo', 'SCHEMA', 'dbo', 'TABLE', 'DatiConfermati', 'COLUMN', 'TotPzProd'
|
||||
go
|
||||
|
||||
exec sp_addextendedproperty 'MS_Description', 'TCAssegnato x num pezzi prodotti', 'SCHEMA', 'dbo', 'TABLE', 'DatiConfermati', 'COLUMN', 'TempoProdotto'
|
||||
go
|
||||
|
||||
exec sp_addextendedproperty 'MS_Description', 'Totale tempo macchina in automatico ed in lavoro', 'SCHEMA', 'dbo', 'TABLE', 'DatiConfermati', 'COLUMN', 'TempoLavoro'
|
||||
go
|
||||
|
||||
exec sp_addextendedproperty 'MS_Description', 'Totale tempo macchina in automatico', 'SCHEMA', 'dbo', 'TABLE', 'DatiConfermati', 'COLUMN', 'TempoAuto'
|
||||
go
|
||||
|
||||
exec sp_addextendedproperty 'MS_Description', 'Totale tempo macchina in fermo (anche ND)', 'SCHEMA', 'dbo', 'TABLE', 'DatiConfermati', 'COLUMN', 'TempoFermo'
|
||||
go
|
||||
|
||||
exec sp_addextendedproperty 'MS_Description', 'pezzi prodotti durante la fermata (es setup)', 'SCHEMA', 'dbo', 'TABLE', 'DatiConfermati', 'COLUMN', 'TotPzFermo'
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
create table TabAvvioProduzione(
|
||||
IdxProduzione int not null identity constraint PK_TabAvvioProduzione primary key,
|
||||
CodArticolo nvarchar(50) not null,
|
||||
NumPezzi int not null,
|
||||
TCAssegnato decimal(18,8) not null constraint DF_TabAvvioProduzione_TCAssegnato default (1)
|
||||
)
|
||||
go
|
||||
|
||||
|
||||
drop table TempiCicloRilevati
|
||||
go
|
||||
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
create table TempiCicloRilevati(
|
||||
IdxMacchina nvarchar(50) not null,
|
||||
DataOraRif datetime not null,
|
||||
TCMedio decimal(18,8) not null constraint DF_TempiCicloRilevati_TempoMedio default (1),
|
||||
PzProd int not null constraint DF_TempiCicloRilevati_PzProd default (1),
|
||||
|
||||
constraint PK_TempiCicloRilevati primary key(IdxMacchina,DataOraRif)
|
||||
)
|
||||
go
|
||||
|
||||
alter table TempiCicloRilevati add
|
||||
constraint FK_TempiCicloRilevati_Macchine foreign key(IdxMacchina) references Macchine(IdxMacchina) on update cascade
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
drop table TempiCicloTeorici
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
create table TempiCicloTeorici(
|
||||
IdxMacchina nvarchar(50) not null,
|
||||
DataOraFrom datetime not null,
|
||||
DataOraTo datetime,
|
||||
TCAssegnato decimal(18,8) not null constraint DF_TempiCicloTeorici_TempoMedio default (1),
|
||||
|
||||
constraint PK_TempiCicloTeorici primary key(IdxMacchina,DataOraFrom)
|
||||
)
|
||||
go
|
||||
|
||||
alter table TempiCicloTeorici add
|
||||
constraint FK_TempiCicloTeorici_Macchine foreign key(IdxMacchina) references Macchine(IdxMacchina) on update cascade
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(20, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,258 @@
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
drop table TempiCicloRilevati
|
||||
go
|
||||
|
||||
create table TempiCicloRilevati(
|
||||
IdxMacchina nvarchar(50) not null,
|
||||
CodArticolo nvarchar(50) not null,
|
||||
DataOraRif datetime not null,
|
||||
TCMedio decimal(18,8) not null constraint DF_TempiCicloRilevati_TempoMedio default (1),
|
||||
PzProd int not null constraint DF_TempiCicloRilevati_PzProd default (1),
|
||||
|
||||
constraint PK_TempiCicloRilevati primary key(IdxMacchina,CodArticolo,DataOraRif)
|
||||
)
|
||||
go
|
||||
|
||||
alter table TempiCicloRilevati add
|
||||
constraint FK_TempiCicloRilevati_Macchine foreign key(IdxMacchina) references Macchine(IdxMacchina) on update cascade
|
||||
go
|
||||
|
||||
drop table TempiCicloTeorici
|
||||
go
|
||||
|
||||
create table TempiCicloTeorici(
|
||||
IdxMacchina nvarchar(50) not null,
|
||||
CodArticolo nvarchar(50) not null,
|
||||
DataOraFrom datetime not null,
|
||||
DataOraTo datetime,
|
||||
TCAssegnato decimal(18,8) not null constraint DF_TempiCicloTeorici_TempoMedio default (1),
|
||||
|
||||
constraint PK_TempiCicloTeorici primary key(IdxMacchina,CodArticolo,DataOraFrom)
|
||||
)
|
||||
go
|
||||
|
||||
alter table TempiCicloTeorici add
|
||||
constraint FK_TempiCicloTeorici_Macchine foreign key(IdxMacchina) references Macchine(IdxMacchina) on update cascade
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
INSERT INTO dbo.AnagraficaEventi
|
||||
VALUES (20, N'Contapezzi')
|
||||
go
|
||||
|
||||
commit transaction
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
alter table Kanban add
|
||||
CodArticolo nvarchar(50)
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
alter table AnagraficaEventi add
|
||||
TabAzione nvarchar(50) constraint DF_AnagraficaEventi_TabAzione default (''),
|
||||
Azione nvarchar(50) constraint DF_AnagraficaEventi_Azione default ('')
|
||||
go
|
||||
|
||||
update AnagraficaEventi set TabAzione='',Azione=''
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
create 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 @CodArticolo NVARCHAR(50)
|
||||
DECLARE @TCMedio DECIMAL(18,8)
|
||||
DECLARE @DataOra DATETIME
|
||||
DECLARE @DataOraPrec DATETIME
|
||||
|
||||
|
||||
/* 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... */
|
||||
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 @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 ) )
|
||||
/* è in millisecondi, divido per 60'000.00 x avere minuti centesimali*/
|
||||
SET @TCMedio = ( SELECT (DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 ) )
|
||||
/* inserisco riga di tempo ciclo */
|
||||
INSERT INTO TempiCicloRilevati
|
||||
VALUES(@IdxMacchina, @CodArticolo, @DataOra, @TCMedio, 1)
|
||||
END
|
||||
END
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
UPDATE dbo.AnagraficaEventi SET
|
||||
TabAzione=N'TempiCicloRilevati', Azione=N'Insert'
|
||||
WHERE IdxTipo=20
|
||||
go
|
||||
|
||||
commit transaction
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
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 @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... */
|
||||
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 ) )
|
||||
/* è in millisecondi, divido per 60'000.00 x avere minuti centesimali*/
|
||||
SET @TCMedio = ( SELECT (DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 ) )
|
||||
/* inserisco riga di tempo ciclo */
|
||||
INSERT INTO TempiCicloRilevati
|
||||
VALUES(@IdxMacchina, @CodArticolo, @DataOra, @TCMedio, @NumPz)
|
||||
END
|
||||
END
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_TC_getByMacchinaPeriodo
|
||||
* recupera tempi ciclo x machcian e periodo
|
||||
*
|
||||
* modif.: S.E.L. - 2010.12.15
|
||||
**************************************/
|
||||
create PROCEDURE stp_TC_getByMacchinaPeriodo
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@Inizio DATETIME,
|
||||
@Fine DATETIME
|
||||
)
|
||||
AS
|
||||
|
||||
SELECT * FROM TempiCicloRilevati
|
||||
WHERE IdxMacchina = @IdxMacchina AND
|
||||
(DataOraRif >= @Inizio) AND (DataOraRif <= @Fine)
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(25, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,223 @@
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_TC_getMaxByMacchinaPeriodo
|
||||
* recupera tempi ciclo x macchina e periodo
|
||||
*
|
||||
* modif.: S.E.L. - 2010.12.15
|
||||
**************************************/
|
||||
create PROCEDURE stp_TC_getMaxByMacchinaPeriodo
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@Inizio DATETIME,
|
||||
@Fine DATETIME
|
||||
)
|
||||
AS
|
||||
|
||||
SELECT @IdxMacchina AS IdxMacchina, '' AS CodArticolo, GETDATE() as DataOraRif, MAX(TCMedio) AS TCMedio, 0 AS PzProd FROM TempiCicloRilevati
|
||||
WHERE IdxMacchina = @IdxMacchina AND
|
||||
(DataOraRif >= @Inizio) AND (DataOraRif <= @Fine)
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_TC_getMinByMacchinaPeriodo
|
||||
* recupera tempi ciclo x macchina e periodo
|
||||
*
|
||||
* modif.: S.E.L. - 2010.12.15
|
||||
**************************************/
|
||||
create PROCEDURE stp_TC_getMinByMacchinaPeriodo
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@Inizio DATETIME,
|
||||
@Fine DATETIME
|
||||
)
|
||||
AS
|
||||
|
||||
SELECT @IdxMacchina AS IdxMacchina, '' AS CodArticolo, GETDATE() as DataOraRif, MIN(TCMedio) AS TCMedio, 0 AS PzProd FROM TempiCicloRilevati
|
||||
WHERE IdxMacchina = @IdxMacchina AND
|
||||
(DataOraRif >= @Inizio) AND (DataOraRif <= @Fine)
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_TC_getMaxByMacchinaPeriodo
|
||||
* recupera tempi ciclo x macchina e periodo
|
||||
*
|
||||
* modif.: S.E.L. - 2010.12.15
|
||||
**************************************/
|
||||
alter PROCEDURE stp_TC_getMaxByMacchinaPeriodo
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@Inizio DATETIME,
|
||||
@Fine DATETIME
|
||||
)
|
||||
AS
|
||||
|
||||
SELECT @IdxMacchina AS IdxMacchina, '' AS CodArticolo, GETDATE() as DataOraRif, MAX(TCMedio) AS TCMedio, 0 AS PzProd FROM TempiCicloRilevati
|
||||
WHERE IdxMacchina = @IdxMacchina AND
|
||||
(DataOraRif >= @Inizio) AND (DataOraRif <= @Fine)
|
||||
AND TCMedio > 0
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_TC_getMedByMacchinaPeriodo
|
||||
* recupera tempi ciclo x macchina e periodo
|
||||
*
|
||||
* modif.: S.E.L. - 2010.12.24
|
||||
**************************************/
|
||||
create PROCEDURE stp_TC_getMedByMacchinaPeriodo
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@Inizio DATETIME,
|
||||
@Fine DATETIME
|
||||
)
|
||||
AS
|
||||
|
||||
SELECT @IdxMacchina AS IdxMacchina, '' AS CodArticolo, GETDATE() as DataOraRif, SUM(TCMedio * PzProd) / SUM(PzProd) AS TCMedio, 0 AS PzProd FROM TempiCicloRilevati
|
||||
WHERE IdxMacchina = @IdxMacchina AND
|
||||
(DataOraRif >= @Inizio) AND (DataOraRif <= @Fine)
|
||||
AND TCMedio > 0
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_TC_getMinByMacchinaPeriodo
|
||||
* recupera tempi ciclo x macchina e periodo
|
||||
*
|
||||
* modif.: S.E.L. - 2010.12.15
|
||||
**************************************/
|
||||
alter PROCEDURE stp_TC_getMinByMacchinaPeriodo
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@Inizio DATETIME,
|
||||
@Fine DATETIME
|
||||
)
|
||||
AS
|
||||
|
||||
SELECT @IdxMacchina AS IdxMacchina, '' AS CodArticolo, GETDATE() as DataOraRif, MIN(TCMedio) AS TCMedio, 0 AS PzProd FROM TempiCicloRilevati
|
||||
WHERE IdxMacchina = @IdxMacchina AND
|
||||
(DataOraRif >= @Inizio) AND (DataOraRif <= @Fine)
|
||||
AND TCMedio > 0
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
-- =============================================
|
||||
-- Author: Samuele E. Locatelli
|
||||
-- Create date: 2009-03-04
|
||||
-- mod date: 2010-07-14
|
||||
--
|
||||
-- Description: riallineamento con update massivo dati db
|
||||
-- aggiorna i dati nel db per portarli ad essere "odierni" ovvero ultimo evento appena successo
|
||||
-- =============================================
|
||||
alter PROCEDURE stp_ZZZ_riallineaDateDb
|
||||
AS
|
||||
|
||||
DBCC SHOWCONTIG(EventList)
|
||||
DBCC SHOWCONTIG(DiarioDiBordo)
|
||||
|
||||
EXEC USP_DisableEnableNonClusteredIndexes 'Mapo_ColMecc',null, 1 --disabilito indici
|
||||
|
||||
|
||||
PRINT 'inizio UPDATE tabelle...'
|
||||
|
||||
DECLARE @lastData AS DATETIME
|
||||
DECLARE @diff_min as INT
|
||||
|
||||
-- calcolo l'ultima data degli eventi
|
||||
SET @lastData = (SELECT MAX(InizioStato) AS inizio FROM EventList)
|
||||
|
||||
-- ora calcolo la differenza tra quello e la data/ora odierna
|
||||
SET @diff_min = (SELECT DATEDIFF(n, @lastData, getdate()))
|
||||
|
||||
-- aggiorno tabelle di conseguenza modificando le date
|
||||
|
||||
-- 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)
|
||||
|
||||
|
||||
PRINT 'concluso UPDATE tabelle...'
|
||||
|
||||
|
||||
DBCC SHOWCONTIG(EventList)
|
||||
DBCC SHOWCONTIG(DiarioDiBordo)
|
||||
EXEC USP_DisableEnableNonClusteredIndexes 'Mapo_ColMecc',null, 2 --riattivo indici
|
||||
|
||||
|
||||
--ricostruisco indici
|
||||
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)
|
||||
|
||||
--shrink del db
|
||||
PRINT 'compatto DB...'
|
||||
DBCC SHRINKDATABASE (Mapo_ColMecc)
|
||||
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(30, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,172 @@
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
-- =============================================
|
||||
-- Author: Samuele E. Locatelli
|
||||
-- Create date: 2011-02-20
|
||||
-- Description:
|
||||
-- =============================================
|
||||
create PROCEDURE stp_zzz_rimuoviDuplicatiConsecutivi
|
||||
-- Add the parameters for the stored procedure here
|
||||
@idxMacchina int
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE @InizioStato DATETIME, @IdxTipo INT, @MatricolaKanban NVARCHAR(50);
|
||||
DECLARE @InizioStatoPrec DATETIME, @IdxTipoPrec INT, @MatricolaKanbanPrec NVARCHAR(50);
|
||||
DECLARE @messaggio NVARCHAR(500);
|
||||
|
||||
-- mostro conteggio eventi
|
||||
SELECT count(*), DATEPART(DD,InizioStato) AS inizio FROM EventList
|
||||
WHERE IdxMacchina=37
|
||||
GROUP BY DATEPART(DD,InizioStato)
|
||||
|
||||
-- inizializzo valori precedenti
|
||||
SET @InizioStatoPrec = (SELECT Top 1 InizioStato FROM EventList WHERE idxMacchina = @idxMacchina ORDER BY InizioStato ASC);
|
||||
SET @IdxTipoPrec = (SELECT Top 1 IdxTipo FROM EventList WHERE idxMacchina = @idxMacchina ORDER BY InizioStato ASC);
|
||||
SET @MatricolaKanbanPrec = (SELECT Top 1 MatricolaKanban FROM EventList WHERE idxMacchina = @idxMacchina ORDER BY InizioStato ASC);
|
||||
|
||||
-- uso un cursore x percorrere i dati...
|
||||
DECLARE eventiDuplicati CURSOR FOR
|
||||
SELECT InizioStato, IdxTipo, MatricolaKanban
|
||||
FROM EventList
|
||||
WHERE IdxMacchina = @idxMacchina
|
||||
ORDER BY InizioStato;
|
||||
|
||||
OPEN eventiDuplicati;
|
||||
|
||||
FETCH NEXT FROM eventiDuplicati
|
||||
INTO @InizioStato, @IdxTipo,@MatricolaKanban;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
-- controllo: se uguali i valori ai precedenti elimino attuale...
|
||||
IF((@InizioStato > @InizioStatoPrec) AND (@IdxTipo = @IdxTipoPrec) AND (@MatricolaKanban = @MatricolaKanbanPrec))
|
||||
BEGIN
|
||||
SELECT @messaggio = '--> Old tipo: ' + CAST(@IdxTipoPrec AS NVARCHAR(50)) + ' - new: ' + CAST(@IdxTipo AS NVARCHAR(50)) + ' | old time: ' + CAST(@InizioStatoPrec AS NVARCHAR(250)) + ' - new: ' +CAST(@InizioStato AS NVARCHAR(250)) + ' | old kanban: ' + CAST(@MatricolaKanbanPrec AS NVARCHAR(250)) + ' - new: ' +CAST(@MatricolaKanban AS NVARCHAR(250));
|
||||
PRINT @messaggio;
|
||||
-- elimino riga errata
|
||||
DELETE FROM EventList
|
||||
WHERE InizioStato=@InizioStato and IdxMacchina=@idxMacchina and IdxTipo=@IdxTipo and MatricolaKanban=@MatricolaKanban;
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
SELECT @messaggio = 'Ok Old tipo: ' + CAST(@IdxTipoPrec AS NVARCHAR(50)) + ' - new: ' + CAST(@IdxTipo AS NVARCHAR(50)) + ' | old time: ' + CAST(@InizioStatoPrec AS NVARCHAR(250)) + ' - new: ' +CAST(@InizioStato AS NVARCHAR(250)) + ' | old kanban: ' + CAST(@MatricolaKanbanPrec AS NVARCHAR(250)) + ' - new: ' +CAST(@MatricolaKanban AS NVARCHAR(250));
|
||||
--PRINT @messaggio;
|
||||
END
|
||||
|
||||
|
||||
SET @InizioStatoPrec = @InizioStato;
|
||||
SET @IdxTipoPrec = @IdxTipo;
|
||||
SET @MatricolaKanbanPrec = @MatricolaKanban;
|
||||
|
||||
-- Get the next values.
|
||||
FETCH NEXT FROM eventiDuplicati
|
||||
INTO @InizioStato, @IdxTipo, @MatricolaKanban;
|
||||
END
|
||||
CLOSE eventiDuplicati;
|
||||
DEALLOCATE eventiDuplicati;
|
||||
|
||||
-- mostro conteggio eventi
|
||||
SELECT count(*), DATEPART(DD,InizioStato) AS inizio FROM EventList
|
||||
WHERE IdxMacchina=37
|
||||
GROUP BY DATEPART(DD,InizioStato)
|
||||
|
||||
END
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_TC_getCodArticoliByMacchinaPeriodo
|
||||
* recupera tempi ciclo x machcian e periodo
|
||||
*
|
||||
* modif.: S.E.L. - 2010.12.18
|
||||
**************************************/
|
||||
create PROCEDURE stp_TC_getCodArticoliByMacchinaPeriodo
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@Inizio DATETIME,
|
||||
@Fine DATETIME
|
||||
)
|
||||
AS
|
||||
|
||||
SELECT DISTINCT(CodArticolo) FROM TempiCicloRilevati
|
||||
WHERE IdxMacchina = @IdxMacchina AND
|
||||
(DataOraRif >= @Inizio) AND (DataOraRif <= @Fine)
|
||||
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_TC_getByMacchinaPeriodoArticolo
|
||||
* recupera tempi ciclo x macchina, articolo e periodo
|
||||
*
|
||||
* modif.: S.E.L. - 2010.12.18
|
||||
**************************************/
|
||||
create PROCEDURE stp_TC_getByMacchinaPeriodoArticolo
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@CodArticolo NVARCHAR(50),
|
||||
@Inizio DATETIME,
|
||||
@Fine DATETIME
|
||||
)
|
||||
AS
|
||||
|
||||
SELECT * FROM TempiCicloRilevati
|
||||
WHERE IdxMacchina = @IdxMacchina AND CodArticolo = @CodArticolo AND
|
||||
(DataOraRif >= @Inizio) AND (DataOraRif <= @Fine)
|
||||
ORDER BY DataOraRif
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
|
||||
alter table DatiMacchine add
|
||||
constraint PK_DatiMacchine primary key(idxMacchina)
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(230, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,129 @@
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_DDB_getDataFiltered
|
||||
* ottiene i dati nel diario di bordo filtrati x macchina, periodo e durata
|
||||
*
|
||||
* modif.: S.E.L. - 2010.07.13
|
||||
**************************************/
|
||||
alter PROCEDURE stp_DDB_getDataFiltered
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@Inizio DATETIME,
|
||||
@Fine DATETIME,
|
||||
@durataMin FLOAT
|
||||
)
|
||||
AS
|
||||
|
||||
-- controllo fine sia max uguale ad istante attuale
|
||||
DECLARE @adesso DATETIME
|
||||
SET @adesso = GETDATE()
|
||||
|
||||
IF @fine > @adesso
|
||||
BEGIN
|
||||
SET @fine = @adesso
|
||||
END
|
||||
|
||||
SELECT IdxMacchina, InizioStato, ISNULL(FineStato, @Fine) AS FineStato, IdxStato,
|
||||
ISNULL(DurataMinuti, DATEDIFF(s, InizioStato, @Fine)/60) AS DurataMinuti, Value, MatricolaKanban, KanbanCode, TempoCicloBase,
|
||||
PzPalletProd, MatrOpr, pallet
|
||||
FROM DiarioDiBordo
|
||||
WHERE ((IdxMacchina = @IdxMacchina) AND (InizioStato >= @Inizio) AND (InizioStato <= @Fine)) OR
|
||||
((IdxMacchina = @IdxMacchina) AND (FineStato >= @Inizio) AND (FineStato <= @Fine))
|
||||
ORDER BY InizioStato DESC
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_DDB_getSequenza
|
||||
* ottiene la serie in sequenza di dati x macchina-periodo con durata > 0
|
||||
*
|
||||
* modif.: S.E.L. - 2010.07.14
|
||||
**************************************/
|
||||
alter PROCEDURE stp_DDB_getSequenza
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@Inizio DATETIME,
|
||||
@Fine DATETIME
|
||||
)
|
||||
AS
|
||||
|
||||
|
||||
SELECT IdxMacchina, InizioStato, ISNULL(FineStato, @Fine) AS FineStato, IdxStato,
|
||||
ISNULL(DurataMinuti, DATEDIFF(n, InizioStato, @Fine)) AS DurataMinuti, Value, MatricolaKanban, KanbanCode, TempoCicloBase,
|
||||
PzPalletProd, MatrOpr, pallet
|
||||
FROM DiarioDiBordo
|
||||
WHERE ((IdxMacchina = @IdxMacchina) AND (InizioStato >= @Inizio) AND (InizioStato <= @Fine)) OR
|
||||
((IdxMacchina = @IdxMacchina) AND (FineStato >= @Inizio) AND (FineStato <= @Fine))
|
||||
ORDER BY InizioStato
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
INSERT INTO dbo.Permessi
|
||||
VALUES ('ADMIN_kanban', 'caricaUpdateKanban.aspx', 5, 3, 'UpdateKanban', 'UpdateKanbanExpl')
|
||||
INSERT INTO dbo.Permessi
|
||||
VALUES ('ADMIN_operatori', 'caricaUpdateOperatori.aspx', 5, 4, 'UpdateOperatori', 'UpdateOperatoriExpl')
|
||||
UPDATE dbo.Permessi SET
|
||||
URL='~/../MoonPro/MappaStato.aspx'
|
||||
WHERE COD_PERMESSO='MAP'
|
||||
go
|
||||
|
||||
commit transaction
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
INSERT INTO dbo.Permessi2Funzione
|
||||
VALUES ('ADMIN_kanban', N'MoonPro_admin', 'S')
|
||||
INSERT INTO dbo.Permessi2Funzione
|
||||
VALUES ('ADMIN_operatori', N'MoonPro_admin', 'S')
|
||||
go
|
||||
|
||||
commit transaction
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(235, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,55 @@
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_DDB_getDataFiltered
|
||||
* ottiene i dati nel diario di bordo filtrati x macchina, periodo e durata
|
||||
*
|
||||
* modif.: S.E.L. - 2010.07.13
|
||||
**************************************/
|
||||
alter PROCEDURE stp_DDB_getDataFiltered
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@Inizio DATETIME,
|
||||
@Fine DATETIME,
|
||||
@durataMin FLOAT
|
||||
)
|
||||
AS
|
||||
|
||||
-- controllo fine sia max uguale ad istante attuale
|
||||
DECLARE @adesso DATETIME
|
||||
SET @adesso = GETDATE()
|
||||
|
||||
IF @fine > @adesso
|
||||
BEGIN
|
||||
SET @fine = @adesso
|
||||
END
|
||||
|
||||
SELECT IdxMacchina, InizioStato, ISNULL(FineStato, @Fine) AS FineStato, IdxStato,
|
||||
ISNULL(DurataMinuti, DATEDIFF(s, InizioStato, @Fine)/60) AS DurataMinuti, Value, MatricolaKanban, KanbanCode, TempoCicloBase,
|
||||
PzPalletProd, MatrOpr, pallet
|
||||
FROM DiarioDiBordo
|
||||
WHERE ((IdxMacchina = @IdxMacchina) AND (InizioStato >= @Inizio) AND (InizioStato <= @Fine)) OR
|
||||
((IdxMacchina = @IdxMacchina) AND (FineStato >= @Inizio) AND (FineStato <= @Fine))
|
||||
ORDER BY InizioStato DESC
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(236, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,124 @@
|
||||
-- =============================================
|
||||
-- Author: Samuele E. Locatelli
|
||||
-- Create date: 2009-03-04
|
||||
-- mod date: 2010-07-14
|
||||
--
|
||||
-- Description: riallineamento con update massivo dati db
|
||||
-- aggiorna i dati nel db per portarli ad essere "odierni" ovvero ultimo evento appena successo
|
||||
-- =============================================
|
||||
ALTER PROCEDURE [dbo].[stp_ZZZ_riallineaDateDb]
|
||||
AS
|
||||
|
||||
DBCC SHOWCONTIG(EventList)
|
||||
DBCC SHOWCONTIG(DiarioDiBordo)
|
||||
|
||||
EXEC USP_DisableEnableNonClusteredIndexes 'MoonPro',null, 1 --disabilito indici
|
||||
|
||||
|
||||
PRINT 'inizio UPDATE tabelle...'
|
||||
|
||||
DECLARE @lastData AS DATETIME
|
||||
DECLARE @diff_min as INT
|
||||
|
||||
-- calcolo l'ultima data degli eventi
|
||||
SET @lastData = (SELECT MAX(InizioStato) AS inizio FROM DiarioDiBordo )--WHERE IdxMacchina < 99)
|
||||
|
||||
-- elimino gli eventi della macchina test DOPO @lastData...
|
||||
DELETE FROM EventList WHERE IdxMacchina = 99 AND InizioStato > @lastData
|
||||
|
||||
-- elimino da diario di bordo della macchina test DOPO @lastData...
|
||||
DELETE FROM DiarioDiBordo WHERE IdxMacchina = 99 AND InizioStato > @lastData
|
||||
|
||||
-- elimino da tempi ciclo teorici della macchina test DOPO @lastData...
|
||||
DELETE FROM TempiCicloTeorici WHERE IdxMacchina = 99 AND DataOraFrom > @lastData
|
||||
|
||||
-- elimino da tempi ciclo rilevati della macchina test DOPO @lastData...
|
||||
DELETE FROM TempiCicloRilevati WHERE IdxMacchina = 99 AND DataOraRif > @lastData
|
||||
|
||||
-- ora calcolo la differenza tra quello e la data/ora odierna
|
||||
SET @diff_min = (SELECT DATEDIFF(n, @lastData, getdate()))
|
||||
|
||||
-- aggiorno tabelle di conseguenza modificando le date
|
||||
|
||||
-- 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)
|
||||
|
||||
|
||||
PRINT 'concluso UPDATE tabelle...'
|
||||
|
||||
|
||||
DBCC SHOWCONTIG(EventList)
|
||||
DBCC SHOWCONTIG(DiarioDiBordo)
|
||||
EXEC USP_DisableEnableNonClusteredIndexes 'MoonPro',null, 2 --riattivo indici
|
||||
|
||||
|
||||
--ricostruisco indici
|
||||
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)
|
||||
|
||||
--shrink del db
|
||||
PRINT 'compatto DB...'
|
||||
DBCC SHRINKDATABASE (MoonPro)
|
||||
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_DatiCOnf_getByMacchPeriodo
|
||||
*
|
||||
* recupera i dati confermati x una amcchina e periodo, ordinati in data DESC
|
||||
*
|
||||
* modif.: S.E.L.
|
||||
* il: 2008.08.07
|
||||
**************************************/
|
||||
create PROCEDURE dbo.stp_DatiConf_getByMacchPeriodo
|
||||
(
|
||||
@idxMacchina NVARCHAR(50),
|
||||
@dataFrom DATETIME,
|
||||
@dataTo DATETIME
|
||||
)
|
||||
AS
|
||||
|
||||
SELECT *
|
||||
FROM DatiConfermati
|
||||
WHERE IdxMacchina = @idxMacchina AND (DataRif >= @dataFrom AND DataRif <= @dataTo)
|
||||
ORDER BY DataRif DESC
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(240, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,538 @@
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
-- =============================================
|
||||
-- TRIGGER trg_kanban4articoloIns
|
||||
--
|
||||
-- Author: S.E.L.
|
||||
-- Create date: 2011.05.17
|
||||
-- Description: Controlla esistenza etichette kanban per l'articolo creato ed in caso sia necessario le crea
|
||||
-- =============================================
|
||||
create TRIGGER trg_kanban4articoloIns
|
||||
ON AnagArticoli
|
||||
AFTER INSERT
|
||||
AS
|
||||
BEGIN
|
||||
-- SET NOCOUNT ON added to prevent extra result sets from
|
||||
-- interfering with SELECT statements.
|
||||
SET NOCOUNT ON;
|
||||
|
||||
-- seleziono il nuovo articolo...
|
||||
DECLARE @kanbanTrovati INT
|
||||
DECLARE @CodArticolo NVARCHAR(50)
|
||||
|
||||
SET @CodArticolo = ( SELECT CodArticolo FROM inserted )
|
||||
-- ...e cerco se ci sia un kanban x tale articolo tabella
|
||||
SET @kanbanTrovati = ( SELECT ISNULL(COUNT(*),0) FROM Kanban WHERE CodArticolo = @CodArticolo )
|
||||
|
||||
-- se non ne ho trovati creo articolo!
|
||||
IF(@kanbanTrovati = 0)
|
||||
BEGIN
|
||||
-- inserisco nuovo articolo!
|
||||
INSERT INTO Kanban(MatricolaKanban, KanbanCode, TempoCicloBase, PzPallet, CodArticolo)
|
||||
VALUES ('KA'+@CodArticolo, @CodArticolo, 1, 1, @CodArticolo)
|
||||
END
|
||||
|
||||
END
|
||||
go
|
||||
|
||||
-- =============================================
|
||||
-- TRIGGER trg_kanban4articoloUpd
|
||||
--
|
||||
-- Author: S.E.L.
|
||||
-- Create date: 2011.05.17
|
||||
-- Description: Controlla esistenza etichette kanban per l'articolo modificato ed in caso sia necessario le modifica
|
||||
-- =============================================
|
||||
create TRIGGER trg_kanban4articoloUpd
|
||||
ON AnagArticoli
|
||||
AFTER UPDATE
|
||||
AS
|
||||
BEGIN
|
||||
-- SET NOCOUNT ON added to prevent extra result sets from
|
||||
-- interfering with SELECT statements.
|
||||
SET NOCOUNT ON;
|
||||
|
||||
-- solo se è stato aggiornato codice articolo...
|
||||
IF UPDATE(CodArticolo)
|
||||
BEGIN
|
||||
-- seleziono l'articolo...
|
||||
DECLARE @kanbanTrovati INT
|
||||
DECLARE @CodArticoloOld NVARCHAR(50)
|
||||
DECLARE @CodArticoloNew NVARCHAR(50)
|
||||
|
||||
SET @CodArticoloOld = ( SELECT CodArticolo FROM deleted )
|
||||
SET @CodArticoloNew = ( SELECT CodArticolo FROM inserted )
|
||||
-- ...e cerco se ci sia un kanban x tale articolo tabella
|
||||
SET @kanbanTrovati = ( SELECT ISNULL(COUNT(*),0) FROM Kanban WHERE CodArticolo = @CodArticoloOld )
|
||||
|
||||
-- se non ne ho trovati creo articolo!
|
||||
IF(@kanbanTrovati = 0)
|
||||
BEGIN
|
||||
-- inserisco nuovo articolo!
|
||||
INSERT INTO Kanban(MatricolaKanban, KanbanCode, TempoCicloBase, PzPallet, CodArticolo)
|
||||
VALUES ('KA'+@CodArticoloNew, @CodArticoloNew, 1, 1, @CodArticoloNew)
|
||||
END
|
||||
ELSE -- altrimenti aggiorno!
|
||||
BEGIN
|
||||
UPDATE Kanban
|
||||
SET MatricolaKanban = 'KA'+@CodArticoloNew,
|
||||
CodArticolo = @CodArticoloNew,
|
||||
KanbanCode = @CodArticoloNew
|
||||
WHERE CodArticolo = @CodArticoloOld
|
||||
END
|
||||
END
|
||||
END
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
create TRIGGER trg_updateKanban
|
||||
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... */
|
||||
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 ) )
|
||||
/* è in millisecondi, divido per 60'000.00 x avere minuti centesimali*/
|
||||
SET @TCMedio = ( SELECT (DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 ) )
|
||||
/* inserisco riga di tempo ciclo */
|
||||
INSERT INTO TempiCicloRilevati
|
||||
VALUES(@IdxMacchina, @CodArticolo, @DataOra, @TCMedio, @NumPz)
|
||||
END
|
||||
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 ) )
|
||||
/* è in millisecondi, divido per 60'000.00 x avere minuti centesimali*/
|
||||
SET @TCMedio = ( SELECT (DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 ) )
|
||||
/* inserisco riga di tempo ciclo */
|
||||
INSERT INTO TempiCicloRilevati
|
||||
VALUES(@IdxMacchina, @CodArticolo, @DataOra, @TCMedio, @NumPz)
|
||||
END
|
||||
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 ) )
|
||||
/* è in millisecondi, divido per 60'000.00 x avere minuti centesimali*/
|
||||
SET @TCMedio = ( SELECT (DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 ) )
|
||||
/* inserisco riga di tempo ciclo */
|
||||
INSERT INTO TempiCicloRilevati
|
||||
VALUES(@IdxMacchina, @CodArticolo, @DataOra, @TCMedio, @NumPz)
|
||||
END
|
||||
END
|
||||
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 ) )
|
||||
/* è in millisecondi, divido per 60'000.00 x avere minuti centesimali*/
|
||||
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
|
||||
/* 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 ) )
|
||||
/* è in millisecondi, divido per 60'000.00 x avere minuti centesimali*/
|
||||
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/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 ) )
|
||||
/* è in millisecondi, divido per 60'000.00 x avere minuti centesimali*/
|
||||
SET @TCMedio = ( SELECT (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')
|
||||
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
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* Function f_turnoByDate
|
||||
* calcola il turno in cui cade una data
|
||||
*
|
||||
* modif.: S.E.L.
|
||||
* il: 2011.03.30
|
||||
**************************************/
|
||||
create FUNCTION f_oreNdPeriodo
|
||||
(
|
||||
@dataFrom DATETIME,
|
||||
@dataTo DATETIME
|
||||
)
|
||||
RETURNS DECIMAL(18,8)
|
||||
AS
|
||||
BEGIN
|
||||
/*
|
||||
per farlo va reinserito codice come GIM in questo modo...
|
||||
- tempo totale iniziale c'è...
|
||||
A) va tolto tempo dell'apertura std
|
||||
B) vanno tolte le fermate tipo ferie, chiusure...x la loro durata std
|
||||
|
||||
|
||||
*/
|
||||
|
||||
RETURN 0.0
|
||||
END
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_DP_ricalcolaTempi
|
||||
*
|
||||
* calcola i tempi
|
||||
* - T_AutoRun (lavorazione in auto)
|
||||
* - T_Auto (in auto sia lavora che non lavora)
|
||||
* - T_fermo (tempo fermata)
|
||||
* - T_ND (tempo ND)
|
||||
*
|
||||
* dato una riga di dichairazione produzione (prendendo come riferimento i tempi from/to)
|
||||
*
|
||||
* modif.: S.E.L. - 2011.04.18
|
||||
**************************************/
|
||||
alter PROCEDURE stp_DP_ricalcolaTempi
|
||||
(
|
||||
@idxConferma INT
|
||||
)
|
||||
AS
|
||||
|
||||
BEGIN TRAN
|
||||
-- dichiaro variabili
|
||||
DECLARE @DataFrom AS DATETIME
|
||||
DECLARE @DataTo AS DATETIME
|
||||
DECLARE @IdxMacchina AS NVARCHAR(50)
|
||||
|
||||
-- variabili tempo
|
||||
DECLARE @TempoCron DECIMAL(18,8)
|
||||
DECLARE @TempoND DECIMAL(18,8)
|
||||
DECLARE @TempoApertura DECIMAL(18,8)
|
||||
DECLARE @TempoOFF DECIMAL(18,8)
|
||||
DECLARE @TempoON DECIMAL(18,8)
|
||||
DECLARE @TempoFermoON DECIMAL(18,8)
|
||||
DECLARE @TempoAuto DECIMAL(18,8)
|
||||
DECLARE @TempoFermoAuto DECIMAL(18,8)
|
||||
DECLARE @TempoRun DECIMAL(18,8)
|
||||
|
||||
-- setto date
|
||||
SET @DataFrom = ( SELECT DataOraFrom FROM DatiConfermati WHERE IdxConferma = @idxConferma )
|
||||
SET @DataTo = ( SELECT DataOraTo FROM DatiConfermati WHERE IdxConferma = @idxConferma )
|
||||
SET @IdxMacchina = ( SELECT IdxMacchina FROM DatiConfermati WHERE IdxConferma = @idxConferma )
|
||||
|
||||
-- calcolo i tempi
|
||||
SET @TempoCron = ( SELECT CAST(ISNULL(DATEDIFF (n, @DataFrom, @DataTo), 0) AS DECIMAL(18,8)) / 60)
|
||||
SET @TempoND = dbo.f_oreNdPeriodo(@DataFrom, @DataTo)-- 0 -- FARE!!! (SELECT DATEDIFF (n, DataOraFrom, DataOraTo) / 60 FROM DatiConfermati WHERE IdxConferma = @idxConferma )
|
||||
|
||||
|
||||
|
||||
SET @TempoApertura = @TempoCron - @TempoND
|
||||
SET @TempoOFF = ( SELECT CAST(ISNULL(SUM(ddb.DurataMinuti),0) AS DECIMAL(18,8)) / 60 AS ore FROM DiarioDiBordo ddb
|
||||
INNER JOIN AnagraficaStati a ON ddb.IdxStato = a.IdxStato
|
||||
WHERE (a.ClasseTempo = 'T_OFF')
|
||||
AND (ddb.IdxMacchina = @IdxMacchina)
|
||||
AND (ddb.InizioStato >= @DataFrom)
|
||||
AND (ddb.FineStato <= @DataTo) )-- sistemare eventuali eventi sui bordi inizio/fine
|
||||
SET @TempoON = @TempoApertura - @TempoOFF
|
||||
SET @TempoFermoON = ( SELECT CAST(ISNULL(SUM(ddb.DurataMinuti),0) AS DECIMAL(18,8)) / 60 AS ore FROM DiarioDiBordo ddb
|
||||
INNER JOIN AnagraficaStati a ON ddb.IdxStato = a.IdxStato
|
||||
WHERE (a.ClasseTempo = 'T_FermoOn')
|
||||
AND (ddb.IdxMacchina = @IdxMacchina)
|
||||
AND (ddb.InizioStato >= @DataFrom)
|
||||
AND (ddb.FineStato <= @DataTo) )-- sistemare eventuali eventi sui bordi inizio/fine
|
||||
SET @TempoAuto = @TempoON - @TempoFermoON
|
||||
/* -- lo derivo x riportare eventuali "resti" ed errori riclassifica
|
||||
SET @TempoFermoAuto = (SELECT SUM(ddb.DurataMinuti) / 60 AS ore FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati a ON ddb.IdxStato = a.IdxStato
|
||||
WHERE (a.ClasseTempo = 'T_FermoAuto')
|
||||
AND (ddb.IdxMacchina = @IdxMacchina)
|
||||
AND (ddb.InizioStato >= @DataFrom)
|
||||
AND (ddb.FineStato <= @DataTo) )-- sistemare eventuali eventi sui bordi inizio/fine
|
||||
*/
|
||||
SET @TempoRun = ( SELECT CAST(ISNULL(SUM(ddb.DurataMinuti),0) AS DECIMAL(18,8)) / 60 AS ore FROM DiarioDiBordo ddb
|
||||
INNER JOIN AnagraficaStati a ON ddb.IdxStato = a.IdxStato
|
||||
WHERE (a.ClasseTempo = 'T_Run')
|
||||
AND (ddb.IdxMacchina = @IdxMacchina)
|
||||
AND (ddb.InizioStato >= @DataFrom)
|
||||
AND (ddb.FineStato <= @DataTo) )-- sistemare eventuali eventi sui bordi inizio/fine
|
||||
SET @TempoFermoAuto = @TempoAuto - @TempoRun
|
||||
|
||||
-- aggiorno record
|
||||
UPDATE DatiConfermati
|
||||
SET TempoCron = @TempoCron,
|
||||
TempoND = @TempoND,
|
||||
TempoApertura = @TempoApertura,
|
||||
TempoOFF = @TempoOFF,
|
||||
TempoON = @TempoON,
|
||||
TempoFermoON = @TempoFermoON,
|
||||
TempoAuto = @TempoAuto,
|
||||
TempoFermoAuto = @TempoFermoAuto,
|
||||
TempoRun = @TempoRun
|
||||
WHERE idxConferma = @idxConferma
|
||||
|
||||
COMMIT TRAN
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
UPDATE dbo.AnagraficaEventi SET
|
||||
TabAzione=N'DatiMacchine', Azione=N'Inizio'
|
||||
WHERE IdxTipo=2
|
||||
UPDATE dbo.AnagraficaEventi SET
|
||||
TabAzione=N'DatiMacchine', Azione=N'Fine'
|
||||
WHERE IdxTipo=7
|
||||
go
|
||||
|
||||
commit transaction
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
INSERT INTO dbo.Kanban
|
||||
VALUES (N'KAND', N'ND', 1, 1, N'ND')
|
||||
go
|
||||
|
||||
commit transaction
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(245, GETDATE())
|
||||
GO
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,100 @@
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_repDonati_getDatiProdMacchina
|
||||
* restituisce i dati di produzione di una macchina
|
||||
*
|
||||
* modif.: S.E.L. - 2012.03.08
|
||||
**************************************/
|
||||
alter PROCEDURE stp_repDonati_getDatiProdMacchina
|
||||
(
|
||||
@idxMacchina NVARCHAR(50)
|
||||
)
|
||||
AS
|
||||
|
||||
-- calcolo codice articolo
|
||||
DECLARE @CodArticolo NVARCHAR (50)
|
||||
SET @CodArticolo = (
|
||||
SELECT CodArticolo FROM Kanban k
|
||||
INNER JOIN StatoMacchine sm ON k.MatricolaKanban=sm.MatricolaKanban
|
||||
WHERE sm.IdxMacchina = @idxMacchina
|
||||
)
|
||||
-- calcolo il codice operatore
|
||||
DECLARE @CodOperatore INT
|
||||
SET @CodOperatore = (
|
||||
SELECT MatrOpr FROM StatoMacchine
|
||||
WHERE IdxMacchina = @idxMacchina
|
||||
)
|
||||
-- calcolo il codice ODL
|
||||
DECLARE @idxODL INT
|
||||
SET @idxODL = (
|
||||
SELECT idxODL FROM ODL
|
||||
WHERE CodArticolo = @CodArticolo AND IdxMacchina = @idxMacchina AND (ISNULL(DataFine,DATEADD(hh,1,GETDATE())) > GETDATE())
|
||||
)
|
||||
|
||||
|
||||
DECLARE @PezziConf INT
|
||||
SET @PezziConf = (
|
||||
SELECT ISNULL(SUM(TotPzProd),0) FROM DatiConfermati
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @PezziLanciati INT
|
||||
SET @PezziLanciati =(
|
||||
SELECT ISNULL(SUM(NumPezzi),0) FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @TCAss DECIMAL(18,8)
|
||||
SET @TCAss = (
|
||||
SELECT ISNULL(SUM(TCAssegnato),0) FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- dato l'ODL calcolo il TC Medio ed i pezzi prodotti per l'ODL
|
||||
DECLARE @inizioOdl DATETIME
|
||||
SET @inizioOdl = (
|
||||
SELECT DataInizio FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @PezziProd INT
|
||||
SET @PezziProd = (
|
||||
SELECT COUNT(*) FROM TempiCicloRilevati
|
||||
WHERE DataOraRif >= @inizioOdl
|
||||
AND TCMedio < 3 * @TCAss
|
||||
)
|
||||
|
||||
DECLARE @TCMed DECIMAL(18,8)
|
||||
SET @TCMed = (
|
||||
SELECT SUM(TCMedio)/@PezziProd FROM TempiCicloRilevati
|
||||
WHERE DataOraRif >= @inizioOdl
|
||||
AND TCMedio < 3 * @TCAss
|
||||
)
|
||||
|
||||
|
||||
SELECT @CodArticolo as CodArticolo, @PezziLanciati as PezziLanciati, @PezziProd as PezziProd, @PezziConf as PezziConf, @TCAss AS TCAssegnato, @TCMed AS TCMedio, @CodOperatore AS CodOperatore
|
||||
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(305, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,328 @@
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_TC_getByMacchinaPeriodo
|
||||
* recupera tempi ciclo x machcian e periodo filtrando il MAX ammissibile
|
||||
*
|
||||
* modif.: S.E.L. - 2010.12.15
|
||||
**************************************/
|
||||
create PROCEDURE stp_TC_getByMacchinaPeriodoFiltMax
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@Inizio DATETIME,
|
||||
@Fine DATETIME,
|
||||
@MAX DECIMAL(18, 8)
|
||||
)
|
||||
AS
|
||||
|
||||
SELECT * FROM TempiCicloRilevati
|
||||
WHERE IdxMacchina = @IdxMacchina AND
|
||||
(DataOraRif >= @Inizio) AND (DataOraRif <= @Fine)
|
||||
AND TCMedio <= @MAX
|
||||
ORDER BY DataOraRif
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_DDB_getParetoDurate
|
||||
* ottiene il pareto delle durate eventi diario di bordo
|
||||
*
|
||||
* modif.: S.E.L. - 2010.07.13
|
||||
**************************************/
|
||||
alter PROCEDURE stp_DDB_getParetoDurateFilt
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@minDurata FLOAT,
|
||||
@fine DATETIME,
|
||||
@inizio DATETIME
|
||||
)
|
||||
AS
|
||||
|
||||
|
||||
WITH my_cte AS
|
||||
(
|
||||
SELECT *
|
||||
FROM DiarioDiBordo
|
||||
WHERE IdxMacchina=@IdxMacchina AND
|
||||
DurataMinuti >= @minDurata AND
|
||||
( (InizioStato BETWEEN @inizio AND @fine) OR (FineStato BETWEEN @inizio AND @fine) )
|
||||
)
|
||||
|
||||
|
||||
SELECT IdxMacchina,
|
||||
CASE WHEN MIN(InizioStato) < @inizio THEN @inizio ELSE MIN(InizioStato) END AS InizioStato,
|
||||
CASE WHEN MAX(FineStato) > @fine THEN @fine ELSE MAX(FineStato) END AS FineStato,
|
||||
IdxStato,
|
||||
SUM( DATEDIFF(n, CASE WHEN InizioStato < @inizio THEN @inizio ELSE InizioStato END, CASE WHEN ISNULL(FineStato, GETDATE()) > @fine THEN @fine ELSE FineStato END) ) AS DurataMinuti
|
||||
FROM my_cte
|
||||
GROUP BY IdxMacchina, IdxStato
|
||||
ORDER BY DurataMinuti DESC
|
||||
|
||||
/*
|
||||
SELECT IdxMacchina, MIN(InizioStato) AS InizioStato, MAX(FineStato) AS FineStato, IdxStato,
|
||||
SUM(ISNULL(DurataMinuti, DATEDIFF(n, InizioStato, GETDATE()))) AS DurataMinuti
|
||||
FROM DiarioDiBordo
|
||||
WHERE IdxMacchina=@IdxMacchina AND DurataMinuti >= @minDurata AND
|
||||
(((FineStato <= @fine) AND (InizioStato >= @inizio)) OR ((FineStato IS NULL) AND (InizioStato >= @inizio AND InizioStato <= @fine)))
|
||||
GROUP BY IdxMacchina, IdxStato
|
||||
ORDER BY DurataMinuti DESC
|
||||
*/
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_DDB_getParetoDurateHideSpentaFilt
|
||||
* ottiene il pareto delle durate eventi diario di bordo filtrato eventi spenta
|
||||
*
|
||||
* modif.: S.E.L. - 2010.07.14
|
||||
**************************************/
|
||||
alter PROCEDURE stp_DDB_getParetoDurateHideSpentaFilt
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@minDurata FLOAT,
|
||||
@fine DATETIME,
|
||||
@inizio DATETIME
|
||||
)
|
||||
AS
|
||||
|
||||
WITH my_cte AS
|
||||
(
|
||||
SELECT *
|
||||
FROM DiarioDiBordo
|
||||
WHERE IdxMacchina=@IdxMacchina AND
|
||||
DurataMinuti >= @minDurata AND
|
||||
IdxStato <>11 AND
|
||||
( (InizioStato BETWEEN @inizio AND @fine) OR (FineStato BETWEEN @inizio AND @fine) )
|
||||
)
|
||||
|
||||
|
||||
SELECT IdxMacchina,
|
||||
CASE WHEN MIN(InizioStato) < @inizio THEN @inizio ELSE MIN(InizioStato) END AS InizioStato,
|
||||
CASE WHEN MAX(FineStato) > @fine THEN @fine ELSE MAX(FineStato) END AS FineStato,
|
||||
IdxStato,
|
||||
SUM( DATEDIFF(n, CASE WHEN InizioStato < @inizio THEN @inizio ELSE InizioStato END, CASE WHEN ISNULL(FineStato, GETDATE()) > @fine THEN @fine ELSE FineStato END) ) AS DurataMinuti
|
||||
FROM my_cte
|
||||
GROUP BY IdxMacchina, IdxStato
|
||||
ORDER BY DurataMinuti DESC
|
||||
|
||||
|
||||
/*
|
||||
SELECT IdxMacchina, MIN(InizioStato) AS InizioStato, MAX(FineStato) AS FineStato, IdxStato,
|
||||
SUM(ISNULL(DurataMinuti, DATEDIFF(n, InizioStato, GETDATE()))) AS DurataMinuti
|
||||
FROM DiarioDiBordo
|
||||
WHERE IdxMacchina=@IdxMacchina AND
|
||||
DurataMinuti >= @minDurata AND
|
||||
IdxStato <>11 AND
|
||||
(((FineStato <= @fine) AND (InizioStato >= @inizio)) OR ((FineStato IS NULL) AND (InizioStato >= @inizio AND InizioStato <= @fine)))
|
||||
GROUP BY IdxMacchina, IdxStato
|
||||
ORDER BY DurataMinuti DESC
|
||||
|
||||
*/
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
|
||||
drop table AnagraficaStatiOld;
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_repDonati_getDatiProdMacchina
|
||||
* restituisce i dati di produzione di una macchina
|
||||
*
|
||||
* modif.: S.E.L. - 2012.03.08
|
||||
**************************************/
|
||||
alter PROCEDURE stp_repDonati_getDatiProdMacchina
|
||||
(
|
||||
@idxMacchina NVARCHAR(50)
|
||||
)
|
||||
AS
|
||||
|
||||
-- calcolo codice articolo
|
||||
DECLARE @CodArticolo NVARCHAR (50)
|
||||
SET @CodArticolo = (
|
||||
SELECT CodArticolo FROM Kanban k
|
||||
INNER JOIN StatoMacchine sm ON k.MatricolaKanban=sm.MatricolaKanban
|
||||
WHERE sm.IdxMacchina = @idxMacchina
|
||||
)
|
||||
-- calcolo il codice operatore
|
||||
DECLARE @CodOperatore INT
|
||||
SET @CodOperatore = (
|
||||
SELECT MatrOpr FROM StatoMacchine
|
||||
WHERE IdxMacchina = @idxMacchina
|
||||
)
|
||||
-- calcolo il codice ODL
|
||||
DECLARE @idxODL INT
|
||||
SET @idxODL = (
|
||||
SELECT idxODL FROM ODL
|
||||
WHERE CodArticolo = @CodArticolo AND IdxMacchina = @idxMacchina AND (ISNULL(DataFine,DATEADD(hh,1,GETDATE())) > GETDATE())
|
||||
)
|
||||
|
||||
|
||||
DECLARE @PezziConf INT
|
||||
SET @PezziConf = (
|
||||
SELECT ISNULL(SUM(TotPzProd),0) FROM DatiProduzione
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @PezziLanciati INT
|
||||
SET @PezziLanciati =(
|
||||
SELECT ISNULL(SUM(NumPezzi),0) FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @TCAss DECIMAL(18,8)
|
||||
SET @TCAss = (
|
||||
SELECT ISNULL(SUM(TCAssegnato),0) FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- dato l'ODL calcolo il TC Medio ed i pezzi prodotti per l'ODL
|
||||
DECLARE @inizioOdl DATETIME
|
||||
SET @inizioOdl = (
|
||||
SELECT DataInizio FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @PezziProd INT
|
||||
SET @PezziProd = (
|
||||
SELECT COUNT(*) FROM TempiCicloRilevati
|
||||
WHERE DataOraRif >= @inizioOdl
|
||||
)
|
||||
|
||||
/****************************************************
|
||||
* Calcolo tempi apertura confermati
|
||||
****************************************************/
|
||||
-- calcolo i tempi di apertura: TempoON (Verde + giallo + rosso)
|
||||
DECLARE @TempoOn DECIMAL(18,8)
|
||||
SET @TempoOn = (
|
||||
SELECT ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo NOT IN ('T_OFF', 'T_OFF_ND') AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoAuto (Verde + giallo) - precedente meno "T_FermoRosso"
|
||||
DECLARE @TempoAuto DECIMAL(18,8)
|
||||
SET @TempoAuto = (
|
||||
SELECT @TempoOn - ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo = 'T_FermoRosso' AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoRun (Verde)
|
||||
DECLARE @TempoRun DECIMAL(18,8)
|
||||
SET @TempoRun = (
|
||||
SELECT ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo = 'T_AutoRun' AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
/****************************************************
|
||||
* Calcolo tempi apertura realtime
|
||||
****************************************************/
|
||||
-- calcolo i tempi di apertura: TempoON (Verde + giallo + rosso)
|
||||
DECLARE @TempoOnRT DECIMAL(18,8)
|
||||
SET @TempoOnRT = (
|
||||
SELECT ISNULL(SUM(DurataMinuti),0)
|
||||
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato
|
||||
WHERE AnSt.ClasseTempo NOT IN ('T_OFF', 'T_OFF_ND') AND InizioStato >= @inizioOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoAuto (Verde + giallo) - precedente meno "T_FermoRosso"
|
||||
DECLARE @TempoAutoRT DECIMAL(18,8)
|
||||
SET @TempoAutoRT = (
|
||||
SELECT @TempoOnRT - ISNULL(SUM(DurataMinuti),0)
|
||||
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato
|
||||
WHERE AnSt.ClasseTempo = 'T_FermoRosso' AND InizioStato >= @inizioOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoRun (Verde)
|
||||
DECLARE @TempoRunRT DECIMAL(18,8)
|
||||
SET @TempoRunRT = (
|
||||
SELECT ISNULL(SUM(DurataMinuti),0)
|
||||
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato
|
||||
WHERE AnSt.ClasseTempo = 'T_AutoRun' AND InizioStato >= @inizioOdl
|
||||
)
|
||||
|
||||
/****************************************************
|
||||
* Calcolo i TEMPI CICLO confermati
|
||||
****************************************************/
|
||||
DECLARE @TCMed DECIMAL(18,8)
|
||||
SET @TCMed = (
|
||||
SELECT @TempoOn * 60 / @PezziConf -- tempo in ore
|
||||
)
|
||||
DECLARE @TCLav DECIMAL(18,8)
|
||||
SET @TCLav = (
|
||||
SELECT @TempoAuto * 60 / @PezziConf -- tempo in ore
|
||||
)
|
||||
DECLARE @TCEff DECIMAL(18,8)
|
||||
SET @TCEff = (
|
||||
SELECT @TempoRun * 60 / @PezziConf -- tempo in ore
|
||||
)
|
||||
|
||||
/****************************************************
|
||||
* Calcolo i TEMPI CICLO realtime (anche non confermati)
|
||||
****************************************************/
|
||||
DECLARE @TCMedRT DECIMAL(18,8)
|
||||
SET @TCMedRT = (
|
||||
SELECT @TempoOnRT / @PezziProd
|
||||
)
|
||||
DECLARE @TCLavRT DECIMAL(18,8)
|
||||
SET @TCLavRT = (
|
||||
SELECT @TempoAutoRT / @PezziProd
|
||||
)
|
||||
DECLARE @TCEffRT DECIMAL(18,8)
|
||||
SET @TCEffRT = (
|
||||
SELECT @TempoRunRT / @PezziProd
|
||||
)
|
||||
|
||||
|
||||
SELECT @CodArticolo as CodArticolo, @PezziLanciati as PezziLanciati, @PezziProd as PezziProd, @PezziConf as PezziConf, @TCAss AS TCAssegnato, @CodOperatore AS CodOperatore, @TempoOn AS TempoOn, @TempoAuto AS TempoAuto, @TempoRun AS TempoRun, @TCMed AS TCMedio, @TCLav AS TCLav, @TCEff AS TCEff, @TCMedRT AS TCMedioRT, @TCLavRT AS TCLavRT, @TCEffRT AS TCEffRT
|
||||
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(310, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,182 @@
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_repDonati_getDatiProdMacchina
|
||||
* restituisce i dati di produzione di una macchina
|
||||
*
|
||||
* modif.: S.E.L. - 2012.03.08
|
||||
**************************************/
|
||||
alter PROCEDURE stp_repDonati_getDatiProdMacchina
|
||||
(
|
||||
@idxMacchina NVARCHAR(50)
|
||||
)
|
||||
AS
|
||||
|
||||
-- calcolo codice articolo
|
||||
DECLARE @CodArticolo NVARCHAR (50)
|
||||
SET @CodArticolo = (
|
||||
SELECT CodArticolo FROM Kanban k
|
||||
INNER JOIN StatoMacchine sm ON k.MatricolaKanban=sm.MatricolaKanban
|
||||
WHERE sm.IdxMacchina = @idxMacchina
|
||||
)
|
||||
-- calcolo il codice operatore
|
||||
DECLARE @CodOperatore INT
|
||||
SET @CodOperatore = (
|
||||
SELECT MatrOpr FROM StatoMacchine
|
||||
WHERE IdxMacchina = @idxMacchina
|
||||
)
|
||||
-- calcolo il codice ODL
|
||||
DECLARE @idxODL INT
|
||||
SET @idxODL = (
|
||||
SELECT idxODL FROM ODL
|
||||
WHERE CodArticolo = @CodArticolo AND IdxMacchina = @idxMacchina AND (ISNULL(DataFine,DATEADD(hh,1,GETDATE())) > GETDATE())
|
||||
)
|
||||
|
||||
|
||||
DECLARE @PezziConf INT
|
||||
SET @PezziConf = (
|
||||
SELECT ISNULL(SUM(TotPzProd),0) FROM DatiProduzione
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @PezziLanciati INT
|
||||
SET @PezziLanciati =(
|
||||
SELECT ISNULL(SUM(NumPezzi),0) FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @TCAss DECIMAL(18,8)
|
||||
SET @TCAss = (
|
||||
SELECT ISNULL(SUM(TCAssegnato),0) FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- dato l'ODL calcolo il TC Medio ed i pezzi prodotti per l'ODL
|
||||
DECLARE @inizioOdl DATETIME
|
||||
SET @inizioOdl = (
|
||||
SELECT DataInizio FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @PezziProd INT
|
||||
SET @PezziProd = (
|
||||
SELECT COUNT(*) FROM TempiCicloRilevati
|
||||
WHERE DataOraRif >= @inizioOdl
|
||||
)
|
||||
|
||||
|
||||
/****************************************************
|
||||
* Calcolo tempi apertura confermati
|
||||
****************************************************/
|
||||
-- calcolo i tempi di apertura: TempoON (Verde + giallo + rosso)
|
||||
DECLARE @TempoOn DECIMAL(18,8)
|
||||
SET @TempoOn = (
|
||||
SELECT ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo NOT IN ('T_OFF', 'T_OFF_ND') AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoAuto (Verde + giallo) - precedente meno "T_FermoRosso"
|
||||
DECLARE @TempoAuto DECIMAL(18,8)
|
||||
SET @TempoAuto = (
|
||||
SELECT @TempoOn - ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo = 'T_FermoRosso' AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoRun (Verde)
|
||||
DECLARE @TempoRun DECIMAL(18,8)
|
||||
SET @TempoRun = (
|
||||
SELECT ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo = 'T_AutoRun' AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
/****************************************************
|
||||
* Calcolo tempi apertura realtime
|
||||
****************************************************/
|
||||
-- calcolo i tempi di apertura: TempoON (Verde + giallo + rosso)
|
||||
DECLARE @TempoOnRT DECIMAL(18,8)
|
||||
SET @TempoOnRT = (
|
||||
SELECT ISNULL(SUM(DurataMinuti),0)
|
||||
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato
|
||||
WHERE AnSt.ClasseTempo NOT IN ('T_OFF', 'T_OFF_ND') AND InizioStato >= @inizioOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoAuto (Verde + giallo) - precedente meno "T_FermoRosso"
|
||||
DECLARE @TempoAutoRT DECIMAL(18,8)
|
||||
SET @TempoAutoRT = (
|
||||
SELECT @TempoOnRT - ISNULL(SUM(DurataMinuti),0)
|
||||
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato
|
||||
WHERE AnSt.ClasseTempo = 'T_FermoRosso' AND InizioStato >= @inizioOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoRun (Verde)
|
||||
DECLARE @TempoRunRT DECIMAL(18,8)
|
||||
SET @TempoRunRT = (
|
||||
SELECT ISNULL(SUM(DurataMinuti),0)
|
||||
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato
|
||||
WHERE AnSt.ClasseTempo = 'T_AutoRun' AND InizioStato >= @inizioOdl
|
||||
)
|
||||
|
||||
/****************************************************
|
||||
* Calcolo i TEMPI CICLO confermati
|
||||
****************************************************/
|
||||
|
||||
-- DIVISIONE PER ZERO: controllo pezzi conf > 0...
|
||||
IF(@PezziConf = 0) SET @PezziConf = 1
|
||||
|
||||
DECLARE @TCMed DECIMAL(18,8)
|
||||
SET @TCMed = (
|
||||
SELECT @TempoOn * 60 / @PezziConf -- tempo in ore
|
||||
)
|
||||
DECLARE @TCLav DECIMAL(18,8)
|
||||
SET @TCLav = (
|
||||
SELECT @TempoAuto * 60 / @PezziConf -- tempo in ore
|
||||
)
|
||||
DECLARE @TCEff DECIMAL(18,8)
|
||||
SET @TCEff = (
|
||||
SELECT @TempoRun * 60 / @PezziConf -- tempo in ore
|
||||
)
|
||||
|
||||
/****************************************************
|
||||
* Calcolo i TEMPI CICLO realtime (anche non confermati)
|
||||
****************************************************/
|
||||
|
||||
-- DIVISIONE PER ZERO: controllo pezzi prod > 0...
|
||||
IF(@PezziProd = 0) SET @PezziProd = 1
|
||||
|
||||
DECLARE @TCMedRT DECIMAL(18,8)
|
||||
SET @TCMedRT = (
|
||||
SELECT @TempoOnRT / @PezziProd
|
||||
)
|
||||
DECLARE @TCLavRT DECIMAL(18,8)
|
||||
SET @TCLavRT = (
|
||||
SELECT @TempoAutoRT / @PezziProd
|
||||
)
|
||||
DECLARE @TCEffRT DECIMAL(18,8)
|
||||
SET @TCEffRT = (
|
||||
SELECT @TempoRunRT / @PezziProd
|
||||
)
|
||||
|
||||
|
||||
SELECT @CodArticolo as CodArticolo, @PezziLanciati as PezziLanciati, @PezziProd as PezziProd, @PezziConf as PezziConf, @TCAss AS TCAssegnato, @CodOperatore AS CodOperatore, @TempoOn AS TempoOn, @TempoAuto AS TempoAuto, @TempoRun AS TempoRun, @TCMed AS TCMedio, @TCLav AS TCLav, @TCEff AS TCEff, @TCMedRT AS TCMedioRT, @TCLavRT AS TCLavRT, @TCEffRT AS TCEffRT
|
||||
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(315, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,275 @@
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* Function f_lastTempoTecnico
|
||||
* calcola il tempo tecnico per un impianto dato idxMacchina e intervallo di tempo x filtraggio
|
||||
* utilizza migliori 10 tempi nell'intervallo e fa media
|
||||
*
|
||||
* modif.: S.E.L.
|
||||
* il: 2011.03.30
|
||||
**************************************/
|
||||
create FUNCTION f_lastTempoTecnico
|
||||
(
|
||||
@idxMacchina NVARCHAR(50),
|
||||
@finestraOre INT
|
||||
)
|
||||
RETURNS DECIMAL(18,8)
|
||||
AS
|
||||
|
||||
|
||||
BEGIN
|
||||
DECLARE @TcTecnico AS DECIMAL (18,8)
|
||||
;WITH LastTempi AS
|
||||
(
|
||||
SELECT TOP 10 *
|
||||
FROM TempiCicloRilevati
|
||||
WHERE IdxMacchina = @idxMacchina
|
||||
AND DataOraRif >= DATEADD(HH,-@finestraOre,getdate())
|
||||
ORDER BY TCMedio
|
||||
)
|
||||
|
||||
SELECT @TcTecnico = AVG(TcMedio) FROM LastTempi
|
||||
RETURN @TcTecnico
|
||||
END
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_repDonati_getDatiProdMacchina
|
||||
* restituisce i dati di produzione di una macchina
|
||||
*
|
||||
* modif.: S.E.L. - 2012.03.08
|
||||
**************************************/
|
||||
alter PROCEDURE stp_repDonati_getDatiProdMacchina
|
||||
(
|
||||
@idxMacchina NVARCHAR(50)
|
||||
)
|
||||
AS
|
||||
|
||||
|
||||
-- calcolo codice articolo
|
||||
DECLARE @CodArticolo NVARCHAR (50)
|
||||
SET @CodArticolo = (
|
||||
SELECT CodArticolo FROM Kanban k
|
||||
INNER JOIN StatoMacchine sm ON k.MatricolaKanban=sm.MatricolaKanban
|
||||
WHERE sm.IdxMacchina = @idxMacchina
|
||||
)
|
||||
-- calcolo il codice operatore
|
||||
DECLARE @CodOperatore INT
|
||||
SET @CodOperatore = (
|
||||
SELECT MatrOpr FROM StatoMacchine
|
||||
WHERE IdxMacchina = @idxMacchina
|
||||
)
|
||||
-- calcolo il codice ODL
|
||||
DECLARE @idxODL INT
|
||||
SET @idxODL = (
|
||||
SELECT idxODL FROM ODL
|
||||
WHERE CodArticolo = @CodArticolo AND IdxMacchina = @idxMacchina AND (ISNULL(DataFine,DATEADD(hh,1,GETDATE())) > GETDATE())
|
||||
)
|
||||
|
||||
|
||||
DECLARE @PezziConf INT
|
||||
SET @PezziConf = (
|
||||
SELECT ISNULL(SUM(TotPzProd),0) FROM DatiProduzione
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @PezziLanciati INT
|
||||
SET @PezziLanciati =(
|
||||
SELECT ISNULL(SUM(NumPezzi),0) FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @TCAss DECIMAL(18,8)
|
||||
SET @TCAss = (
|
||||
SELECT ISNULL(SUM(TCAssegnato),0) FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- dato l'ODL calcolo il TC Medio ed i pezzi prodotti per l'ODL
|
||||
DECLARE @inizioOdl DATETIME
|
||||
SET @inizioOdl = (
|
||||
SELECT DataInizio FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @PezziProd INT
|
||||
SET @PezziProd = (
|
||||
SELECT COUNT(*) FROM TempiCicloRilevati
|
||||
WHERE DataOraRif >= @inizioOdl
|
||||
)
|
||||
|
||||
|
||||
/****************************************************
|
||||
* Calcolo tempi apertura confermati
|
||||
****************************************************/
|
||||
-- calcolo i tempi di apertura: TempoON (Verde + giallo + rosso)
|
||||
DECLARE @TempoOn DECIMAL(18,8)
|
||||
SET @TempoOn = (
|
||||
SELECT ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo NOT IN ('T_OFF', 'T_OFF_ND') AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoAuto (Verde + giallo) - precedente meno "T_FermoRosso"
|
||||
DECLARE @TempoAuto DECIMAL(18,8)
|
||||
SET @TempoAuto = (
|
||||
SELECT @TempoOn - ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo = 'T_FermoRosso' AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoRun (Verde)
|
||||
DECLARE @TempoRun DECIMAL(18,8)
|
||||
SET @TempoRun = (
|
||||
SELECT ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo = 'T_AutoRun' AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
/****************************************************
|
||||
* Calcolo tempi apertura realtime
|
||||
****************************************************/
|
||||
-- calcolo i tempi di apertura: TempoON (Verde + giallo + rosso)
|
||||
DECLARE @TempoOnRT DECIMAL(18,8)
|
||||
SET @TempoOnRT = (
|
||||
SELECT ISNULL(SUM(DurataMinuti),0)
|
||||
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato
|
||||
WHERE AnSt.ClasseTempo NOT IN ('T_OFF', 'T_OFF_ND') AND InizioStato >= @inizioOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoAuto (Verde + giallo) - precedente meno "T_FermoRosso"
|
||||
DECLARE @TempoAutoRT DECIMAL(18,8)
|
||||
SET @TempoAutoRT = (
|
||||
SELECT @TempoOnRT - ISNULL(SUM(DurataMinuti),0)
|
||||
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato
|
||||
WHERE AnSt.ClasseTempo = 'T_FermoRosso' AND InizioStato >= @inizioOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoRun (Verde)
|
||||
DECLARE @TempoRunRT DECIMAL(18,8)
|
||||
SET @TempoRunRT = (
|
||||
SELECT ISNULL(SUM(DurataMinuti),0)
|
||||
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato
|
||||
WHERE AnSt.ClasseTempo = 'T_AutoRun' AND InizioStato >= @inizioOdl
|
||||
)
|
||||
|
||||
DECLARE @numPezzi INT
|
||||
|
||||
/****************************************************
|
||||
* Calcolo i TEMPI CICLO confermati
|
||||
****************************************************/
|
||||
|
||||
-- DIVISIONE PER ZERO: controllo pezzi conf > 0
|
||||
SET @numPezzi = @PezziConf
|
||||
IF(@numPezzi = 0) SET @numPezzi = 1
|
||||
|
||||
DECLARE @TCMed DECIMAL(18,8)
|
||||
SET @TCMed = (
|
||||
SELECT @TempoOn * 60 / @numPezzi -- tempo in ore
|
||||
)
|
||||
DECLARE @TCLav DECIMAL(18,8)
|
||||
SET @TCLav = (
|
||||
SELECT @TempoAuto * 60 / @numPezzi -- tempo in ore
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
DECLARE @TCEff DECIMAL(18,8) -- è la media degli ultimi 10 migliori tempi minimi nell'ultima giornata
|
||||
SET @TCEff = ISNULL(( SELECT dbo.f_lastTempoTecnico(@idxMacchina, 8) ), -1) -- provo a calcolare ultimi tempi tecnici
|
||||
IF (@TCEff =-1)
|
||||
BEGIN
|
||||
SET @TCEff = (
|
||||
SELECT @TempoRun * 60 / @numPezzi -- tempo in ore
|
||||
)
|
||||
END
|
||||
|
||||
/****************************************************
|
||||
* Calcolo i TEMPI CICLO realtime (anche non confermati)
|
||||
****************************************************/
|
||||
|
||||
-- DIVISIONE PER ZERO: controllo pezzi prod > 0...
|
||||
SET @numPezzi = @PezziProd
|
||||
IF(@numPezzi = 0) 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 = (
|
||||
SELECT @TempoRunRT / @numPezzi
|
||||
)
|
||||
|
||||
|
||||
SELECT @CodArticolo as CodArticolo, @PezziLanciati as PezziLanciati, @PezziProd as PezziProd, @PezziConf as PezziConf, @TCAss AS TCAssegnato, @CodOperatore AS CodOperatore, @TempoOn AS TempoOn, @TempoAuto AS TempoAuto, @TempoRun AS TempoRun, @TCMed AS TCMedio, @TCLav AS TCLav, @TCEff AS TCEff, @TCMedRT AS TCMedioRT, @TCLavRT AS TCLavRT, @TCEffRT AS TCEffRT
|
||||
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_repDonati_getLastStatoDurataMacchina
|
||||
* restituisce l'ultimo stato di una macchina e la durata
|
||||
* andando a filtrare gli eventi sotto una soglia indicata (default 6 sec)
|
||||
* e quindi sommando
|
||||
*
|
||||
* modif.: S.E.L. - 2012.03.08
|
||||
**************************************/
|
||||
create PROCEDURE stp_repDonati_getLastStatoDurataMacchina
|
||||
(
|
||||
@idxMacchina NVARCHAR(50),
|
||||
@minDurata FLOAT
|
||||
)
|
||||
AS
|
||||
|
||||
-- calcolo codice articolo
|
||||
DECLARE @idxStato INT
|
||||
SET @idxStato = (
|
||||
SELECT TOP 1 ISNULL(IdxStato,0)
|
||||
FROM DiarioDiBordo
|
||||
WHERE idxMacchina = @idxMacchina
|
||||
AND ISNULL(durataMinuti, 0) > @minDurata
|
||||
ORDER BY InizioStato DESC
|
||||
)
|
||||
-- calcolo durata filtrata... ovvero evento più recente NON dello stato indicato (changed)
|
||||
DECLARE @lastChTime DATETIME
|
||||
SET @lastChTime = (
|
||||
SELECT TOP 1 ISNULL(inizioStato, GetDate())
|
||||
FROM DiarioDiBordo
|
||||
WHERE idxMacchina = @idxMacchina
|
||||
AND idxStato <> @idxStato
|
||||
AND ISNULL(durataMinuti, 0) > @minDurata
|
||||
ORDER BY InizioStato DESC
|
||||
)
|
||||
|
||||
DECLARE @timeMinuti FLOAT
|
||||
SET @timeMinuti = ( SELECT DATEDIFF(n, @lastChTime, GetDate()) )
|
||||
|
||||
SELECT @idxStato AS idxStato, @timeMinuti AS Minuti
|
||||
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(316, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,291 @@
|
||||
drop table DiarioDiBordo_backup;
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_repDonati_getDatiProdMacchina
|
||||
* restituisce i dati di produzione di una macchina
|
||||
*
|
||||
* modif.: S.E.L. - 2012.03.08
|
||||
**************************************/
|
||||
alter PROCEDURE stp_repDonati_getDatiProdMacchina
|
||||
(
|
||||
@idxMacchina NVARCHAR(50)
|
||||
)
|
||||
AS
|
||||
|
||||
|
||||
-- calcolo codice articolo
|
||||
DECLARE @CodArticolo NVARCHAR (50)
|
||||
SET @CodArticolo = (
|
||||
SELECT CodArticolo FROM Kanban k
|
||||
INNER JOIN StatoMacchine sm ON k.MatricolaKanban=sm.MatricolaKanban
|
||||
WHERE sm.IdxMacchina = @idxMacchina
|
||||
)
|
||||
-- calcolo il codice operatore
|
||||
DECLARE @CodOperatore INT
|
||||
SET @CodOperatore = (
|
||||
SELECT MatrOpr FROM StatoMacchine
|
||||
WHERE IdxMacchina = @idxMacchina
|
||||
)
|
||||
-- calcolo il codice ODL
|
||||
DECLARE @idxODL INT
|
||||
SET @idxODL = (
|
||||
SELECT idxODL FROM ODL
|
||||
WHERE CodArticolo = @CodArticolo AND IdxMacchina = @idxMacchina AND (ISNULL(DataFine,DATEADD(hh,1,GETDATE())) > GETDATE())
|
||||
)
|
||||
|
||||
|
||||
DECLARE @PezziConf INT
|
||||
SET @PezziConf = (
|
||||
SELECT ISNULL(SUM(TotPzProd),0) FROM DatiProduzione
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @PezziLanciati INT
|
||||
SET @PezziLanciati =(
|
||||
SELECT ISNULL(SUM(NumPezzi),0) FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @TCAss DECIMAL(18,8)
|
||||
SET @TCAss = (
|
||||
SELECT ISNULL(SUM(TCAssegnato),0) FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- dato l'ODL calcolo il TC Medio ed i pezzi prodotti per l'ODL
|
||||
DECLARE @inizioOdl DATETIME
|
||||
SET @inizioOdl = (
|
||||
SELECT DataInizio FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @PezziProd INT
|
||||
SET @PezziProd = (
|
||||
SELECT COUNT(*) FROM TempiCicloRilevati
|
||||
WHERE DataOraRif >= @inizioOdl
|
||||
)
|
||||
|
||||
|
||||
/****************************************************
|
||||
* Calcolo tempi apertura confermati
|
||||
****************************************************/
|
||||
-- calcolo i tempi di apertura: TempoON (Verde + giallo + rosso)
|
||||
DECLARE @TempoOn DECIMAL(18,8)
|
||||
SET @TempoOn = (
|
||||
SELECT ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo NOT IN ('T_OFF', 'T_OFF_ND') AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoAuto (Verde + giallo) - precedente meno "T_FermoRosso"
|
||||
DECLARE @TempoAuto DECIMAL(18,8)
|
||||
SET @TempoAuto = (
|
||||
SELECT @TempoOn - ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo = 'T_FermoRosso' AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoRun (Verde)
|
||||
DECLARE @TempoRun DECIMAL(18,8)
|
||||
SET @TempoRun = (
|
||||
SELECT ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo = 'T_AutoRun' AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
/****************************************************
|
||||
* Calcolo tempi apertura realtime
|
||||
****************************************************/
|
||||
-- calcolo i tempi di apertura: TempoON (Verde + giallo + rosso)
|
||||
DECLARE @TempoOnRT DECIMAL(18,8)
|
||||
SET @TempoOnRT = (
|
||||
SELECT ISNULL(SUM(DurataMinuti),0)
|
||||
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato
|
||||
WHERE AnSt.ClasseTempo NOT IN ('T_OFF', 'T_OFF_ND') AND InizioStato >= @inizioOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoAuto (Verde + giallo) - precedente meno "T_FermoRosso"
|
||||
DECLARE @TempoAutoRT DECIMAL(18,8)
|
||||
SET @TempoAutoRT = (
|
||||
SELECT @TempoOnRT - ISNULL(SUM(DurataMinuti),0)
|
||||
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato
|
||||
WHERE AnSt.ClasseTempo = 'T_FermoRosso' AND InizioStato >= @inizioOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoRun (Verde)
|
||||
DECLARE @TempoRunRT DECIMAL(18,8)
|
||||
SET @TempoRunRT = (
|
||||
SELECT ISNULL(SUM(DurataMinuti),0)
|
||||
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato
|
||||
WHERE AnSt.ClasseTempo = 'T_AutoRun' AND InizioStato >= @inizioOdl
|
||||
)
|
||||
|
||||
DECLARE @numPezzi INT
|
||||
|
||||
/****************************************************
|
||||
* Calcolo i TEMPI CICLO confermati
|
||||
****************************************************/
|
||||
|
||||
-- DIVISIONE PER ZERO: controllo pezzi conf > 0
|
||||
SET @numPezzi = @PezziConf
|
||||
IF(@numPezzi = 0) SET @numPezzi = 1
|
||||
|
||||
DECLARE @TCMed DECIMAL(18,8)
|
||||
SET @TCMed = (
|
||||
SELECT @TempoOn * 60 / @numPezzi -- tempo in ore
|
||||
)
|
||||
DECLARE @TCLav DECIMAL(18,8)
|
||||
SET @TCLav = (
|
||||
SELECT @TempoAuto * 60 / @numPezzi -- tempo in ore
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
DECLARE @TCEff DECIMAL(18,8) -- è la media degli ultimi 10 migliori tempi minimi nell'ultima giornata
|
||||
SET @TCEff = (
|
||||
SELECT @TempoRun * 60 / @numPezzi -- tempo in ore
|
||||
)
|
||||
|
||||
/****************************************************
|
||||
* Calcolo i TEMPI CICLO realtime (anche non confermati)
|
||||
****************************************************/
|
||||
|
||||
-- DIVISIONE PER ZERO: controllo pezzi prod > 0...
|
||||
SET @numPezzi = @PezziProd
|
||||
IF(@numPezzi = 0) 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 @CodArticolo as CodArticolo, @PezziLanciati as PezziLanciati, @PezziProd as PezziProd, @PezziConf as PezziConf, @TCAss AS TCAssegnato, @CodOperatore AS CodOperatore, @TempoOn AS TempoOn, @TempoAuto AS TempoAuto, @TempoRun AS TempoRun, @TCMed AS TCMedio, @TCLav AS TCLav, @TCEff AS TCEff, @TCMedRT AS TCMedioRT, @TCLavRT AS TCLavRT, @TCEffRT AS TCEffRT
|
||||
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_repDonati_getLastStatoDurataMacchina
|
||||
* restituisce l'ultimo stato di una macchina e la durata
|
||||
* andando a filtrare gli eventi sotto una soglia indicata (default 6 sec)
|
||||
* e quindi sommando
|
||||
*
|
||||
* modif.: S.E.L. - 2012.03.08
|
||||
**************************************/
|
||||
alter PROCEDURE stp_repDonati_getLastStatoDurataMacchina
|
||||
(
|
||||
@idxMacchina NVARCHAR(50),
|
||||
@minDurata FLOAT
|
||||
)
|
||||
AS
|
||||
|
||||
-- calcolo codice articolo
|
||||
DECLARE @idxStato INT
|
||||
SET @idxStato = (
|
||||
SELECT TOP 1 ISNULL(IdxStato,0)
|
||||
FROM DiarioDiBordo
|
||||
WHERE idxMacchina = @idxMacchina
|
||||
--AND ISNULL(durataMinuti, 0) > @minDurata
|
||||
ORDER BY InizioStato DESC
|
||||
)
|
||||
-- calcolo durata filtrata... ovvero evento più recente NON dello stato indicato (changed)
|
||||
DECLARE @lastChTime DATETIME
|
||||
SET @lastChTime = (
|
||||
SELECT TOP 1 ISNULL(inizioStato, GetDate())
|
||||
FROM DiarioDiBordo
|
||||
WHERE idxMacchina = @idxMacchina
|
||||
AND idxStato <> @idxStato
|
||||
AND ISNULL(durataMinuti, 0) > @minDurata
|
||||
ORDER BY InizioStato DESC
|
||||
)
|
||||
|
||||
DECLARE @timeMinuti FLOAT
|
||||
SET @timeMinuti = ( SELECT DATEDIFF(n, @lastChTime, GetDate()) )
|
||||
|
||||
SELECT @idxStato AS idxStato, @timeMinuti AS Minuti
|
||||
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* Function f_lastTempoTecnico
|
||||
* calcola il tempo tecnico per un impianto dato idxMacchina e intervallo di tempo x filtraggio
|
||||
* utilizza migliori 10 tempi nell'intervallo e fa media
|
||||
*
|
||||
* modif.: S.E.L.
|
||||
* il: 2011.03.30
|
||||
**************************************/
|
||||
alter FUNCTION f_lastTempoTecnico
|
||||
(
|
||||
@idxMacchina NVARCHAR(50),
|
||||
@finestraOre INT
|
||||
)
|
||||
RETURNS DECIMAL(18,8)
|
||||
AS
|
||||
|
||||
|
||||
BEGIN
|
||||
DECLARE @TcTecnico AS DECIMAL (18,8)
|
||||
;WITH LastTempi AS
|
||||
(
|
||||
SELECT TOP 5 *
|
||||
FROM TempiCicloRilevati
|
||||
WHERE IdxMacchina = @idxMacchina
|
||||
AND DataOraRif >= DATEADD(HH,-@finestraOre,getdate())
|
||||
ORDER BY TCMedio
|
||||
)
|
||||
|
||||
SELECT @TcTecnico = AVG(TcMedio) FROM LastTempi
|
||||
RETURN @TcTecnico
|
||||
END
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(317, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,420 @@
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_repDonati_getDatiProdMacchina
|
||||
* restituisce i dati di produzione di una macchina per l'ULTIMO ODL
|
||||
*
|
||||
* modif.: S.E.L. - 2012.03.08
|
||||
**************************************/
|
||||
alter PROCEDURE stp_repDonati_getDatiProdMacchina
|
||||
(
|
||||
@idxMacchina NVARCHAR(50)
|
||||
)
|
||||
AS
|
||||
|
||||
|
||||
-- calcolo codice articolo
|
||||
DECLARE @CodArticolo NVARCHAR (50)
|
||||
SET @CodArticolo = (
|
||||
SELECT CodArticolo FROM Kanban k
|
||||
INNER JOIN StatoMacchine sm ON k.MatricolaKanban=sm.MatricolaKanban
|
||||
WHERE sm.IdxMacchina = @idxMacchina
|
||||
)
|
||||
-- calcolo il codice operatore
|
||||
DECLARE @CodOperatore INT
|
||||
SET @CodOperatore = (
|
||||
SELECT MatrOpr FROM StatoMacchine
|
||||
WHERE IdxMacchina = @idxMacchina
|
||||
)
|
||||
-- calcolo il codice ODL
|
||||
DECLARE @idxODL INT
|
||||
SET @idxODL = (
|
||||
SELECT idxODL FROM ODL
|
||||
WHERE CodArticolo = @CodArticolo AND IdxMacchina = @idxMacchina AND (ISNULL(DataFine,DATEADD(hh,1,GETDATE())) > GETDATE())
|
||||
)
|
||||
|
||||
|
||||
DECLARE @PezziConf INT
|
||||
SET @PezziConf = (
|
||||
SELECT ISNULL(SUM(TotPzProd),0) FROM DatiProduzione
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @PezziLanciati INT
|
||||
SET @PezziLanciati =(
|
||||
SELECT ISNULL(SUM(NumPezzi),0) FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @TCAss DECIMAL(18,8)
|
||||
SET @TCAss = (
|
||||
SELECT ISNULL(SUM(TCAssegnato),0) FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- dato l'ODL calcolo il TC Medio ed i pezzi prodotti per l'ODL
|
||||
DECLARE @inizioOdl DATETIME
|
||||
SET @inizioOdl = (
|
||||
SELECT DataInizio FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @PezziProd INT
|
||||
SET @PezziProd = (
|
||||
SELECT COUNT(*) FROM TempiCicloRilevati
|
||||
WHERE DataOraRif >= @inizioOdl
|
||||
AND idxMacchina = @idxMacchina
|
||||
)
|
||||
|
||||
|
||||
/****************************************************
|
||||
* Calcolo tempi apertura confermati
|
||||
****************************************************/
|
||||
-- calcolo i tempi di apertura: TempoON (Verde + giallo + rosso)
|
||||
DECLARE @TempoOn DECIMAL(18,8)
|
||||
SET @TempoOn = (
|
||||
SELECT ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo NOT IN ('T_OFF', 'T_OFF_ND') AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoAuto (Verde + giallo) - precedente meno "T_FermoRosso"
|
||||
DECLARE @TempoAuto DECIMAL(18,8)
|
||||
SET @TempoAuto = (
|
||||
SELECT @TempoOn - ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo = 'T_FermoRosso' AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoRun (Verde)
|
||||
DECLARE @TempoRun DECIMAL(18,8)
|
||||
SET @TempoRun = (
|
||||
SELECT ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo = 'T_AutoRun' AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
/****************************************************
|
||||
* Calcolo tempi apertura realtime
|
||||
****************************************************/
|
||||
-- calcolo i tempi di apertura: TempoON (Verde + giallo + rosso)
|
||||
DECLARE @TempoOnRT DECIMAL(18,8)
|
||||
SET @TempoOnRT = (
|
||||
SELECT ISNULL(SUM(DurataMinuti),0)
|
||||
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato
|
||||
WHERE AnSt.ClasseTempo NOT IN ('T_OFF', 'T_OFF_ND') AND InizioStato >= @inizioOdl
|
||||
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 >= @inizioOdl
|
||||
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 >= @inizioOdl
|
||||
AND IdxMacchina = @idxMacchina
|
||||
)
|
||||
|
||||
DECLARE @numPezzi INT
|
||||
|
||||
/****************************************************
|
||||
* Calcolo i TEMPI CICLO confermati
|
||||
****************************************************/
|
||||
|
||||
-- DIVISIONE PER ZERO: controllo pezzi conf > 0
|
||||
SET @numPezzi = @PezziConf
|
||||
IF(@numPezzi = 0) SET @numPezzi = 1
|
||||
|
||||
DECLARE @TCMed DECIMAL(18,8)
|
||||
SET @TCMed = (
|
||||
SELECT @TempoOn * 60 / @numPezzi -- tempo in ore
|
||||
)
|
||||
DECLARE @TCLav DECIMAL(18,8)
|
||||
SET @TCLav = (
|
||||
SELECT @TempoAuto * 60 / @numPezzi -- tempo in ore
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
DECLARE @TCEff DECIMAL(18,8) -- è la media degli ultimi 10 migliori tempi minimi nell'ultima giornata
|
||||
SET @TCEff = (
|
||||
SELECT @TempoRun * 60 / @numPezzi -- tempo in ore
|
||||
)
|
||||
|
||||
/****************************************************
|
||||
* Calcolo i TEMPI CICLO realtime (anche non confermati)
|
||||
****************************************************/
|
||||
|
||||
-- DIVISIONE PER ZERO: controllo pezzi prod > 0...
|
||||
SET @numPezzi = @PezziProd
|
||||
IF(@numPezzi = 0) 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 @CodArticolo as CodArticolo, @PezziLanciati as PezziLanciati, @PezziProd as PezziProd, @PezziConf as PezziConf, @TCAss AS TCAssegnato, @CodOperatore AS CodOperatore, @TempoOn AS TempoOn, @TempoAuto AS TempoAuto, @TempoRun AS TempoRun, @TCMed AS TCMedio, @TCLav AS TCLav, @TCEff AS TCEff, @TCMedRT AS TCMedioRT, @TCLavRT AS TCLavRT, @TCEffRT AS TCEffRT
|
||||
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_repDonati_getDatiProdMacchina
|
||||
* restituisce i dati di produzione di una macchina per PERIODO
|
||||
*
|
||||
* modif.: S.E.L. - 2012.03.21
|
||||
**************************************/
|
||||
create 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 o.DataFine
|
||||
AND tcr.DataOraRif BETWEEN @dataFrom AND @dataTo
|
||||
AND ((o.DataInizio <= @dataTo) AND (o.DataFine >= @dataFrom))
|
||||
GROUP BY o.TCAssegnato--, tcr.IdxMacchina, tcr.CodArticolo,
|
||||
)
|
||||
SELECT @TCAss = ISNULL(SUM(MinProd) / @PezziProd, 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
|
||||
IF(@numPezzi = 0) 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
|
||||
|
||||
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_repDonati_getDatiProdMacchina
|
||||
* restituisce i dati di produzione di una macchina 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) / @PezziProd, 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
|
||||
IF(@numPezzi = 0) 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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(318, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,444 @@
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* Function f_lastTempoTecnico
|
||||
* calcola il tempo tecnico per un impianto dato idxMacchina e intervallo di tempo x filtraggio
|
||||
* utilizza migliori 10 tempi nell'intervallo e fa media
|
||||
*
|
||||
* modif.: S.E.L.
|
||||
* il: 2011.03.30
|
||||
**************************************/
|
||||
alter FUNCTION f_lastTempoTecnico
|
||||
(
|
||||
@idxMacchina NVARCHAR(50),
|
||||
@finestraOre INT
|
||||
)
|
||||
RETURNS DECIMAL(18,8)
|
||||
AS
|
||||
|
||||
|
||||
BEGIN
|
||||
DECLARE @TcTecnico AS DECIMAL (18,8)
|
||||
;WITH LastTempi AS
|
||||
(
|
||||
SELECT TOP 5 *
|
||||
FROM TempiCicloRilevati
|
||||
WHERE IdxMacchina = @idxMacchina
|
||||
AND DataOraRif >= DATEADD(HH,-@finestraOre,getdate())
|
||||
ORDER BY TCMedio
|
||||
)
|
||||
|
||||
SELECT @TcTecnico = ISNULL(MIN(TcMedio),0) FROM LastTempi
|
||||
--SELECT @TcTecnico = AVG(TcMedio) FROM LastTempi
|
||||
RETURN @TcTecnico
|
||||
END
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_repDonati_getDatiProdMacchina
|
||||
* restituisce i dati di produzione di una macchina per l'ULTIMO ODL
|
||||
*
|
||||
* modif.: S.E.L. - 2012.03.08
|
||||
**************************************/
|
||||
alter PROCEDURE stp_repDonati_getDatiProdMacchina
|
||||
(
|
||||
@idxMacchina NVARCHAR(50)
|
||||
)
|
||||
AS
|
||||
|
||||
|
||||
-- calcolo codice articolo
|
||||
DECLARE @CodArticolo NVARCHAR (50)
|
||||
SET @CodArticolo = (
|
||||
SELECT CodArticolo FROM Kanban k
|
||||
INNER JOIN StatoMacchine sm ON k.MatricolaKanban=sm.MatricolaKanban
|
||||
WHERE sm.IdxMacchina = @idxMacchina
|
||||
)
|
||||
-- calcolo il codice operatore
|
||||
DECLARE @CodOperatore INT
|
||||
SET @CodOperatore = (
|
||||
SELECT MatrOpr FROM StatoMacchine
|
||||
WHERE IdxMacchina = @idxMacchina
|
||||
)
|
||||
-- calcolo il codice ODL
|
||||
DECLARE @idxODL INT
|
||||
SET @idxODL = (
|
||||
SELECT idxODL FROM ODL
|
||||
WHERE CodArticolo = @CodArticolo AND IdxMacchina = @idxMacchina AND (ISNULL(DataFine,DATEADD(hh,1,GETDATE())) > GETDATE())
|
||||
)
|
||||
|
||||
|
||||
DECLARE @PezziConf INT
|
||||
SET @PezziConf = (
|
||||
SELECT ISNULL(SUM(TotPzProd),0) FROM DatiProduzione
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @PezziLanciati INT
|
||||
SET @PezziLanciati =(
|
||||
SELECT ISNULL(SUM(NumPezzi),0) FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @TCAss DECIMAL(18,8)
|
||||
SET @TCAss = (
|
||||
SELECT ISNULL(SUM(TCAssegnato),0) FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- dato l'ODL calcolo il TC Medio ed i pezzi prodotti per l'ODL
|
||||
DECLARE @inizioOdl DATETIME
|
||||
SET @inizioOdl = (
|
||||
SELECT DataInizio FROM ODL
|
||||
WHERE idxODL = @idxOdl
|
||||
)
|
||||
|
||||
DECLARE @PezziProd INT
|
||||
SET @PezziProd = (
|
||||
SELECT COUNT(*) FROM TempiCicloRilevati
|
||||
WHERE DataOraRif >= @inizioOdl
|
||||
AND idxMacchina = @idxMacchina
|
||||
)
|
||||
|
||||
|
||||
/****************************************************
|
||||
* Calcolo tempi apertura confermati
|
||||
****************************************************/
|
||||
-- calcolo i tempi di apertura: TempoON (Verde + giallo + rosso)
|
||||
DECLARE @TempoOn DECIMAL(18,8)
|
||||
SET @TempoOn = (
|
||||
SELECT ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo NOT IN ('T_OFF', 'T_OFF_ND') AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoAuto (Verde + giallo) - precedente meno "T_FermoRosso"
|
||||
DECLARE @TempoAuto DECIMAL(18,8)
|
||||
SET @TempoAuto = (
|
||||
SELECT @TempoOn - ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo = 'T_FermoRosso' AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
-- calcolo i tempi di apertura: TempoRun (Verde)
|
||||
DECLARE @TempoRun DECIMAL(18,8)
|
||||
SET @TempoRun = (
|
||||
SELECT ISNULL(SUM(Tempo),0) FROM DatiProduzione
|
||||
WHERE ClasseTempo = 'T_AutoRun' AND idxODL = @idxOdl
|
||||
)
|
||||
|
||||
/****************************************************
|
||||
* Calcolo tempi apertura realtime
|
||||
****************************************************/
|
||||
-- calcolo i tempi di apertura: TempoON (Verde + giallo + rosso)
|
||||
DECLARE @TempoOnRT DECIMAL(18,8)
|
||||
SET @TempoOnRT = (
|
||||
SELECT ISNULL(SUM(DurataMinuti),0)
|
||||
FROM DiarioDiBordo ddb INNER JOIN AnagraficaStati AnSt ON ddb.IdxStato= AnSt.IdxStato
|
||||
WHERE AnSt.ClasseTempo NOT IN ('T_OFF', 'T_OFF_ND') AND InizioStato >= @inizioOdl
|
||||
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 >= @inizioOdl
|
||||
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 >= @inizioOdl
|
||||
AND IdxMacchina = @idxMacchina
|
||||
)
|
||||
|
||||
DECLARE @numPezzi INT
|
||||
|
||||
/****************************************************
|
||||
* Calcolo i TEMPI CICLO confermati
|
||||
****************************************************/
|
||||
|
||||
-- DIVISIONE PER ZERO: controllo pezzi conf > 0
|
||||
SET @numPezzi = @PezziConf - 1 -- divido per n-1 per avere numIntervalli = numPezzi
|
||||
IF(@numPezzi < 1) SET @numPezzi = 1
|
||||
|
||||
DECLARE @TCMed DECIMAL(18,8)
|
||||
SET @TCMed = (
|
||||
SELECT @TempoOn * 60 / @numPezzi -- tempo in ore
|
||||
)
|
||||
DECLARE @TCLav DECIMAL(18,8)
|
||||
SET @TCLav = (
|
||||
SELECT @TempoAuto * 60 / @numPezzi -- tempo in ore
|
||||
)
|
||||
DECLARE @TCEff DECIMAL(18,8) -- è la media degli ultimi 10 migliori tempi minimi nell'ultima giornata
|
||||
SET @TCEff = (
|
||||
SELECT @TempoRun * 60 / @numPezzi -- tempo in ore
|
||||
)
|
||||
|
||||
/****************************************************
|
||||
* Calcolo i TEMPI CICLO realtime (anche non confermati)
|
||||
****************************************************/
|
||||
|
||||
-- DIVISIONE PER ZERO: controllo pezzi prod > 0...
|
||||
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 @CodArticolo as CodArticolo, @PezziLanciati as PezziLanciati, @PezziProd as PezziProd, @PezziConf as PezziConf, @TCAss AS TCAssegnato, @CodOperatore AS CodOperatore, @TempoOn AS TempoOn, @TempoAuto AS TempoAuto, @TempoRun AS TempoRun, @TCMed AS TCMedio, @TCLav AS TCLav, @TCEff AS TCEff, @TCMedRT AS TCMedioRT, @TCLavRT AS TCLavRT, @TCEffRT AS TCEffRT
|
||||
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_repDonati_getLastStatoDurataMacchina
|
||||
* restituisce l'ultimo stato di una macchina e la durata
|
||||
* andando a filtrare gli eventi sotto una soglia indicata @minDurata (in minuti)
|
||||
* e quindi sommando
|
||||
*
|
||||
* modif.: S.E.L. - 2012.03.08
|
||||
**************************************/
|
||||
alter PROCEDURE stp_repDonati_getLastStatoDurataMacchina
|
||||
(
|
||||
@idxMacchina NVARCHAR(50),
|
||||
@minDurata FLOAT
|
||||
)
|
||||
AS
|
||||
|
||||
-- calcolo codice articolo
|
||||
DECLARE @idxStato INT
|
||||
SET @idxStato = (
|
||||
SELECT TOP 1 ISNULL(IdxStato,0)
|
||||
FROM DiarioDiBordo
|
||||
WHERE idxMacchina = @idxMacchina
|
||||
--AND ISNULL(durataMinuti, 0) > @minDurata
|
||||
ORDER BY InizioStato DESC
|
||||
)
|
||||
-- calcolo durata filtrata... ovvero evento più recente NON dello stato indicato (changed)
|
||||
DECLARE @lastChTime DATETIME
|
||||
SET @lastChTime = (
|
||||
SELECT TOP 1 ISNULL(inizioStato, GetDate())
|
||||
FROM DiarioDiBordo
|
||||
WHERE idxMacchina = @idxMacchina
|
||||
AND idxStato <> @idxStato
|
||||
AND ISNULL(durataMinuti, 0) > @minDurata
|
||||
ORDER BY InizioStato DESC
|
||||
)
|
||||
|
||||
DECLARE @timeMinuti FLOAT
|
||||
SET @timeMinuti = ( SELECT DATEDIFF(n, @lastChTime, GetDate()) )
|
||||
|
||||
SELECT @idxStato AS idxStato, @timeMinuti AS Minuti
|
||||
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_repDonati_getDatiProdMacchina
|
||||
* restituisce i dati di produzione di una macchina 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) / @PezziProd, 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
|
||||
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* Function f_TC_60-100
|
||||
* converte il tempo in min e sec (60)
|
||||
* in minuti centesimali (100)
|
||||
*
|
||||
* modif.: S.E.L.
|
||||
* il: 2012.03.22
|
||||
**************************************/
|
||||
create FUNCTION f_TC_60_100
|
||||
(
|
||||
@TC_60 DECIMAL(18,8)
|
||||
)
|
||||
RETURNS DECIMAL(18,8)
|
||||
AS
|
||||
|
||||
|
||||
BEGIN
|
||||
DECLARE @TC_100 AS DECIMAL (18,8)
|
||||
|
||||
SELECT @TC_100 = FLOOR(@TC_60) + (@TC_60 - FLOOR(@TC_60)) * 100 / 60
|
||||
|
||||
RETURN @TC_100
|
||||
END
|
||||
go
|
||||
|
||||
|
||||
|
||||
update ODL
|
||||
set TCAssegnato = dbo.f_TC_60_100(TCAssegnato)
|
||||
|
||||
update DatiProduzione
|
||||
set TCAssegnato = dbo.f_TC_60_100(TCAssegnato)
|
||||
|
||||
update TempiCicloTeorici
|
||||
set TCAssegnato = dbo.f_TC_60_100(TCAssegnato)
|
||||
|
||||
update DatiConfermati
|
||||
set TCAssegnato = dbo.f_TC_60_100(TCAssegnato)
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(319, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,304 @@
|
||||
/*******************************************************
|
||||
* GESTIONE NUOVO EVENTO per timeout contapezzo
|
||||
*******************************************************/
|
||||
|
||||
-- tab eventi, nuovo evento 27
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
INSERT INTO dbo.AnagraficaEventi
|
||||
VALUES (27, N'Timer - timeout tempo ciclo', N'', N'')
|
||||
go
|
||||
|
||||
commit transaction
|
||||
go
|
||||
|
||||
|
||||
-- tab transazioneEventi x andare da lavora a fermoGenerico
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 13, 27, 12)
|
||||
go
|
||||
|
||||
commit transaction
|
||||
go
|
||||
|
||||
|
||||
create table TurniMacchina(
|
||||
IdxMacchina nvarchar(50) not null constraint PK_TurniMacchina primary key,
|
||||
T1 bit,
|
||||
T2 bit,
|
||||
T3 bit
|
||||
);
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
INSERT INTO dbo.TurniMacchina
|
||||
VALUES (N'1005', 1, 1, 0)
|
||||
go
|
||||
|
||||
commit transaction
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_DatiProd_getByMacchPeriodo
|
||||
*
|
||||
* recupera i dati confermati x una macchina e periodo, ordinati in data DESC
|
||||
*
|
||||
* modif.: S.E.L.
|
||||
* il: 2011.07.04
|
||||
**************************************/
|
||||
alter PROCEDURE stp_DatiProd_getByMacchPeriodo
|
||||
(
|
||||
@idxMacchina NVARCHAR(50),
|
||||
@dataFrom DATETIME,
|
||||
@dataTo DATETIME
|
||||
)
|
||||
AS
|
||||
|
||||
SELECT *
|
||||
FROM DatiProduzione
|
||||
WHERE IdxMacchina = @idxMacchina AND (DataRif >= @dataFrom AND DataRif <= @dataTo)
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_turniMacchineByIdxMacc
|
||||
* elenco turni x macchina
|
||||
*
|
||||
* modif.: S.E.L. - 2012.03.26
|
||||
**************************************/
|
||||
create PROCEDURE stp_turniMacchineByIdxMacc
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50)
|
||||
)
|
||||
AS
|
||||
|
||||
SELECT *
|
||||
FROM TurniMacchina
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* Function f_lastTempoTecnico
|
||||
* calcola il tempo tecnico per un impianto dato idxMacchina e intervallo di tempo x filtraggio
|
||||
* utilizza migliori 10 tempi nell'intervallo e fa media
|
||||
*
|
||||
* modif.: S.E.L.
|
||||
* il: 2011.03.30
|
||||
**************************************/
|
||||
alter FUNCTION f_lastTempoTecnico
|
||||
(
|
||||
@idxMacchina NVARCHAR(50),
|
||||
@finestraOre INT
|
||||
)
|
||||
RETURNS DECIMAL(18,8)
|
||||
AS
|
||||
|
||||
|
||||
BEGIN
|
||||
DECLARE @TcTecnico AS DECIMAL (18,8)
|
||||
;WITH LastTempi AS
|
||||
(
|
||||
SELECT TOP 5 *
|
||||
FROM TempiCicloRilevati
|
||||
WHERE IdxMacchina = @idxMacchina
|
||||
AND DataOraRif >= DATEADD(HH,-@finestraOre,getdate())
|
||||
ORDER BY TCMedio
|
||||
)
|
||||
|
||||
SELECT @TcTecnico = ISNULL(AVG(TcMedio), 0) FROM LastTempi
|
||||
--SELECT @TcTecnico = ISNULL(MIN(TcMedio), 0) FROM LastTempi
|
||||
--SELECT @TcTecnico = AVG(TcMedio) FROM LastTempi
|
||||
RETURN @TcTecnico
|
||||
END
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_turniMacchineUpdateTurno
|
||||
* cambia il turno specificato per la macchina (toggle: attivo/disattivo)
|
||||
*
|
||||
* modif.: S.E.L. - 2012.03.26
|
||||
**************************************/
|
||||
create PROCEDURE stp_turniMacchineUpdateTurno
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@numTurno INT
|
||||
)
|
||||
AS
|
||||
|
||||
-- in base al turno indicato cambio solo uno
|
||||
UPDATE TurniMacchina
|
||||
SET T1 = CASE @numTurno WHEN 1 THEN 1-T1 ELSE T1 END,
|
||||
T2 = CASE @numTurno WHEN 2 THEN 1-T2 ELSE T2 END,
|
||||
T3 = CASE @numTurno WHEN 3 THEN 1-T3 ELSE T3 END
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
INSERT INTO dbo.AnagraficaEventi
|
||||
VALUES (28, N'Timer - timeout TURNO by tempo ciclo', N'', N'')
|
||||
go
|
||||
|
||||
commit transaction
|
||||
go
|
||||
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 1, 28, 26)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 2, 28, 26)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 3, 28, 26)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 4, 28, 26)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 5, 28, 26)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 6, 28, 26)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 7, 28, 26)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 8, 28, 26)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 9, 28, 26)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 10, 28, 26)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 12, 28, 26)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 13, 28, 26)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 14, 28, 26)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 15, 28, 26)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 23, 28, 26)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 24, 28, 26)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 25, 28, 26)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 26, 14, 11)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 26, 15, 12)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 26, 16, 13)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 26, 17, 14)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 26, 18, 15)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 26, 20, 14)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 26, 21, 13)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 26, 22, 14)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 26, 23, 23)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 26, 24, 24)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 26, 25, 25)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 26, 26, 27)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 27, 14, 11)
|
||||
INSERT INTO dbo.TransizioneStati
|
||||
VALUES (10, 27, 28, 26)
|
||||
DELETE FROM dbo.TransizioneStati WHERE IdxFamiglia=10 and IdxStato=11 and IdxTipo=14
|
||||
go
|
||||
|
||||
commit transaction
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(320, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,123 @@
|
||||
create table AnagraficaStatiOld(
|
||||
IdxStato int not null,
|
||||
Descrizione nvarchar(50),
|
||||
Semaforo nvarchar(50),
|
||||
Priorita int,
|
||||
ClasseTempo nvarchar(50)
|
||||
)
|
||||
go
|
||||
|
||||
|
||||
--
|
||||
|
||||
create table DatiConf_old(
|
||||
IdxConferma int not null identity,
|
||||
IdxODL int not null,
|
||||
DataOraApp datetime not null,
|
||||
DataRif datetime not null,
|
||||
TurnoRif int,
|
||||
CodArticolo nvarchar(50),
|
||||
IdxMacchina nvarchar(50) not null,
|
||||
TCAssegnato decimal(18,8),
|
||||
MatrOpr int,
|
||||
MatrApp int not null,
|
||||
DataOraFrom datetime,
|
||||
DataOraTo datetime,
|
||||
IdxStato int not null,
|
||||
TotPzProd int,
|
||||
TempoProdotto decimal(18,8),
|
||||
TempoCron decimal(18,8),
|
||||
TempoND decimal(18,8),
|
||||
TempoApertura decimal(18,8),
|
||||
TempoOFF decimal(18,8),
|
||||
TempoON decimal(18,8),
|
||||
TempoFermoOn decimal(18,8),
|
||||
TempoAuto decimal(18,8),
|
||||
TempoFermoAuto decimal(18,8),
|
||||
TempoRun decimal(18,8),
|
||||
TotPzFermo int
|
||||
)
|
||||
go
|
||||
|
||||
|
||||
--
|
||||
|
||||
create table DatiConf_older(
|
||||
IdxConferma int not null identity,
|
||||
IdxODL int not null,
|
||||
DataOraApp datetime not null,
|
||||
DataRif datetime not null,
|
||||
TurnoRif int,
|
||||
CodArticolo nvarchar(50),
|
||||
IdxMacchina nvarchar(50) not null,
|
||||
TCAssegnato decimal(18,8),
|
||||
MatrOpr int,
|
||||
MatrApp int not null,
|
||||
DataOraFrom datetime,
|
||||
DataOraTo datetime,
|
||||
IdxStato int not null,
|
||||
TotPzProd int,
|
||||
TempoProdotto decimal(18,8),
|
||||
TempoCron decimal(18,8),
|
||||
TempoND decimal(18,8),
|
||||
TempoApertura decimal(18,8),
|
||||
TempoOFF decimal(18,8),
|
||||
TempoON decimal(18,8),
|
||||
TempoFermoOn decimal(18,8),
|
||||
TempoAuto decimal(18,8),
|
||||
TempoFermoAuto decimal(18,8),
|
||||
TempoRun decimal(18,8),
|
||||
TotPzFermo int
|
||||
)
|
||||
go
|
||||
|
||||
|
||||
--
|
||||
|
||||
create table DatiProd_old(
|
||||
IdxConferma int not null identity,
|
||||
IdxODL int not null,
|
||||
DataOraApp datetime not null,
|
||||
DataRif datetime not null,
|
||||
TurnoRif int,
|
||||
CodArticolo nvarchar(50),
|
||||
IdxMacchina nvarchar(50) not null,
|
||||
TCAssegnato decimal(18,8),
|
||||
MatrOpr int,
|
||||
MatrApp int not null,
|
||||
DataOraFrom datetime,
|
||||
DataOraTo datetime,
|
||||
TotPzProd int,
|
||||
Tempo decimal(18,8),
|
||||
ClasseTempo nvarchar(50)
|
||||
)
|
||||
go
|
||||
|
||||
|
||||
--
|
||||
|
||||
create table DatiProd_older(
|
||||
IdxConferma int not null identity,
|
||||
IdxODL int not null,
|
||||
DataOraApp datetime not null,
|
||||
DataRif datetime not null,
|
||||
TurnoRif int,
|
||||
CodArticolo nvarchar(50),
|
||||
IdxMacchina nvarchar(50) not null,
|
||||
TCAssegnato decimal(18,8),
|
||||
MatrOpr int,
|
||||
MatrApp int not null,
|
||||
DataOraFrom datetime,
|
||||
DataOraTo datetime,
|
||||
TotPzProd int,
|
||||
Tempo decimal(18,8),
|
||||
ClasseTempo nvarchar(50)
|
||||
)
|
||||
go
|
||||
|
||||
|
||||
--
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(301, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,17 @@
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
UPDATE dbo.AnagraficaStati SET
|
||||
ShowArticolo=1
|
||||
WHERE IdxStato=1
|
||||
go
|
||||
|
||||
commit transaction
|
||||
go
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(302, GETDATE())
|
||||
GO
|
||||
@@ -0,0 +1,356 @@
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
alter table DatiMacchine add
|
||||
insEnabled bit constraint DF_DatiMacchine_insEnabled default ((1));
|
||||
go
|
||||
|
||||
exec sp_addextendedproperty 'MS_Description', 'definisce se l''INSERT sia abilitato per la macchina (disabilitato in fase di ricostruzione batch...)', 'SCHEMA', 'dbo', 'TABLE', 'DatiMacchine', 'COLUMN', 'insEnabled';
|
||||
go
|
||||
|
||||
update DatiMacchine set insEnabled=((1));
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE InsStatoBatch
|
||||
* inserimento di uno stato nel db (tab DiarioDiBordo)
|
||||
* inerimento in anagrafica a "nd" dell'operatore se matricola mancasse
|
||||
*
|
||||
* modif.: S.E.L.
|
||||
* il: 2008.08.07
|
||||
**************************************/
|
||||
alter PROCEDURE stp_DDB_InsStatoBatch
|
||||
(
|
||||
@IdxMacchina varchar(50),
|
||||
@InizioStato datetime,
|
||||
@IdxStato int,
|
||||
@MatricolaKanban varchar(50),
|
||||
@Value varchar(50),
|
||||
@MatrOpr int,
|
||||
@pallet varchar(20)
|
||||
)
|
||||
AS
|
||||
/*************************************
|
||||
* verifico se esista operatore
|
||||
**************************************/
|
||||
DECLARE @matrOut INT = @MatrOpr + 1
|
||||
SELECT @matrOut = ISNULL (
|
||||
(
|
||||
SELECT MatrOpr FROM AnagraficaOperatori
|
||||
WHERE (MatrOpr = @MatrOpr)
|
||||
),-999999
|
||||
)
|
||||
IF (@matrOut <> @MatrOpr ) -- significa che la matricola NON C'E'...
|
||||
BEGIN
|
||||
/* inserisco nuovo record */
|
||||
INSERT INTO AnagraficaOperatori(MatrOpr, Cognome, Nome)
|
||||
VALUES (@MatrOpr,'nd (cognome)','nd (nome)')
|
||||
END
|
||||
|
||||
-- controllo se input abilitato
|
||||
DECLARE @insEnabled BIT
|
||||
SET @insEnabled = ( SELECT insEnabled FROM DatiMacchine WHERE IdxMacchina = @IdxMacchina )
|
||||
|
||||
-- inserisco SOLO SE è abilitato input x quella macchina
|
||||
IF(@insEnabled = 1)
|
||||
BEGIN
|
||||
/* inserisco valori */
|
||||
INSERT INTO DiarioDiBordo
|
||||
(IdxMacchina, InizioStato, FineStato, IdxStato, MatricolaKanban, Value, MatrOpr, pallet)
|
||||
VALUES (@IdxMacchina, @InizioStato, NULL, @IdxStato, @MatricolaKanban, @Value, @MatrOpr, @pallet)
|
||||
END
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE InsStato
|
||||
* inserimento di uno stato nel db (tab DiarioDiBordo)
|
||||
* inerimento in anagrafica a "nd" dell'operatore se matricola mancasse
|
||||
*
|
||||
* modif.: S.E.L.
|
||||
* il: 2008.08.07
|
||||
**************************************/
|
||||
alter PROCEDURE stp_DDB_InsStato
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@IdxStato INT,
|
||||
@MatricolaKanban NVARCHAR(50),
|
||||
@Value NVARCHAR(50),
|
||||
@MatrOpr INT,
|
||||
@pallet NVARCHAR(20)
|
||||
)
|
||||
AS
|
||||
/*************************************
|
||||
* verifico se esista operatore
|
||||
**************************************/
|
||||
DECLARE @matrOut INT = @MatrOpr + 1
|
||||
SELECT @matrOut = ISNULL (
|
||||
(
|
||||
SELECT MatrOpr FROM AnagraficaOperatori
|
||||
WHERE (MatrOpr = @MatrOpr)
|
||||
),-999999
|
||||
)
|
||||
IF (@matrOut <> @MatrOpr ) -- significa che la matricola NON C'E'...
|
||||
BEGIN
|
||||
/* inserisco nuovo record */
|
||||
INSERT INTO AnagraficaOperatori(MatrOpr, Cognome, Nome)
|
||||
VALUES (@MatrOpr,'nd (cognome)','nd (nome)')
|
||||
END
|
||||
|
||||
-- controllo se input abilitato
|
||||
DECLARE @insEnabled BIT
|
||||
SET @insEnabled = ( SELECT insEnabled FROM DatiMacchine WHERE IdxMacchina = @IdxMacchina )
|
||||
|
||||
-- inserisco SOLO SE è abilitato input x quella macchina
|
||||
IF(@insEnabled = 1)
|
||||
BEGIN
|
||||
/* inserisco valori */
|
||||
INSERT INTO DiarioDiBordo
|
||||
(IdxMacchina, InizioStato, FineStato, IdxStato, MatricolaKanban, Value, MatrOpr, pallet)
|
||||
VALUES (@IdxMacchina, GETDATE(), NULL, @IdxStato, @MatricolaKanban, @Value, @MatrOpr, @pallet)
|
||||
END
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
-- ================================================
|
||||
-- Author: Samuele E. Locatelli
|
||||
-- Create date: 2012.11.23
|
||||
--
|
||||
-- Description: rigenerazioen del diario di bordo
|
||||
-- a partire da macchina eventi/stati + EventList
|
||||
-- ================================================
|
||||
create PROCEDURE stp_ZZZ_rigeneraDDB
|
||||
(
|
||||
@idxStatoStart INT = 1,
|
||||
@idxMacchina NVARCHAR(50),
|
||||
@inizio DATETIME,
|
||||
@fine DATETIME
|
||||
)
|
||||
AS
|
||||
|
||||
DBCC SHOWCONTIG(EventList)
|
||||
DBCC SHOWCONTIG(DiarioDiBordo)
|
||||
|
||||
EXEC USP_DisableEnableNonClusteredIndexes 'MoonPro',null, 1 --disabilito indici
|
||||
|
||||
-- svuoto dati che vado a sostituire
|
||||
PRINT 'svuoto DiarioDiBordo per periodo indicato...'
|
||||
EXEC stp_DDB_deleteMacchinaPeriodo @idxMacchina, @inizio, @fine
|
||||
PRINT 'svuoto TempiCicloRilevati per periodo indicato...'
|
||||
DELETE FROM TempiCicloRilevati WHERE idxMacchina = @idxMacchina AND DataOraRif BETWEEN @inizio AND @fine
|
||||
|
||||
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
|
||||
|
||||
-- calcolo famiglia macchina!
|
||||
SET @IdxFamiglia = ( SELECT IdxFamiglia FROM Macchine2FamiglieMacchine WHERE idxMacchina = @idxMacchina )
|
||||
|
||||
-- ipotizzo macchina inizialmente in stato richiesto (default: 1 = pronta) e quindi imposto stato current a quello iniziale richiesto...
|
||||
SET @currIdxStato = @idxStatoStart
|
||||
|
||||
-- DISATTIVO inserimento in DiarioDiBordo per la macchina indicata
|
||||
UPDATE DatiMacchine
|
||||
SET insEnabled = 0
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
|
||||
-- leggo la tabella degli eventi con cursore x percorrere i dati...
|
||||
DECLARE event2proc CURSOR FOR
|
||||
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;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
-- calcolo l'eventuale NUOVO idxStato
|
||||
SET @nextIdxStato = ( SELECT 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
|
||||
END
|
||||
|
||||
-- Get the next values
|
||||
FETCH NEXT FROM event2proc
|
||||
INTO @InizioStato, @IdxTipo, @MatricolaKanban, @Value, @MatrOpr, @pallet;
|
||||
END
|
||||
CLOSE event2proc;
|
||||
DEALLOCATE event2proc;
|
||||
|
||||
-- RI-ATTIVO inserimento in DiarioDiBordo per la macchina indicata
|
||||
UPDATE DatiMacchine
|
||||
SET insEnabled = 1
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
|
||||
PRINT 'concluso UPDATE tabelle...'
|
||||
|
||||
|
||||
DBCC SHOWCONTIG(EventList)
|
||||
DBCC SHOWCONTIG(DiarioDiBordo)
|
||||
EXEC USP_DisableEnableNonClusteredIndexes 'MoonPro',null, 2 --riattivo indici
|
||||
|
||||
|
||||
--ricostruisco indici
|
||||
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)
|
||||
|
||||
/*
|
||||
--shrink del db
|
||||
PRINT 'compatto DB...'
|
||||
DBCC SHRINKDATABASE (MoonPro)
|
||||
*/
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_TS_getByIdxMacchIdxTipoEv
|
||||
* restituisce una riga transizione stati/eventi data macchina ed evento (confrontando lo stato attuale della macchina)
|
||||
*
|
||||
* modif.: S.E.L. - 2012.11.23
|
||||
**************************************/
|
||||
create PROCEDURE stp_TS_getByIdxMacchIdxTipoEv
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@IdxTipo INT
|
||||
)
|
||||
AS
|
||||
|
||||
|
||||
SELECT TransizioneStati.IdxFamiglia, TransizioneStati.IdxStato, TransizioneStati.IdxTipo, TransizioneStati.next_IdxStato
|
||||
FROM TransizioneStati INNER JOIN
|
||||
Macchine2FamiglieMacchine ON TransizioneStati.IdxFamiglia = Macchine2FamiglieMacchine.IdxFamiglia INNER JOIN
|
||||
Macchine ON Macchine2FamiglieMacchine.IdxMacchina = Macchine.IdxMacchina INNER JOIN
|
||||
StatoMacchine ON Macchine.IdxMacchina = StatoMacchine.IdxMacchina AND TransizioneStati.IdxStato = StatoMacchine.IdxStato
|
||||
WHERE (Macchine.IdxMacchina = @IdxMacchina) AND (TransizioneStati.IdxTipo = @IdxTipo) AND (TransizioneStati.IdxFamiglia <> 1)
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/***************************************************
|
||||
* Trigger trg_EV_filtroIns
|
||||
*
|
||||
* filtro operazioni scrittura su tab EventList:
|
||||
* - scrive un NUOVO recordo SOLO SE la chiave differisce per almeno 2 valori
|
||||
*
|
||||
* modificato: S.E.L.
|
||||
* 2012.11.26
|
||||
*
|
||||
***************************************************/
|
||||
create TRIGGER trg_EV_filtroIns
|
||||
ON EventList
|
||||
INSTEAD OF INSERT
|
||||
AS
|
||||
|
||||
IF (@@ROWCOUNT = 1)
|
||||
BEGIN
|
||||
DECLARE @IdxMacchina AS NVARCHAR(50)
|
||||
DECLARE @InizioStato AS DATETIME
|
||||
DECLARE @IdxTipo AS INT
|
||||
DECLARE @numMin AS INT=4
|
||||
DECLARE @trovati AS INT=0
|
||||
|
||||
SELECT @IdxMacchina=IdxMacchina, @InizioStato=InizioStato, @IdxTipo=IdxTipo FROM INSERTED
|
||||
|
||||
;WITH myCTE AS
|
||||
(
|
||||
SELECT TOP(@numMin) ev.*
|
||||
FROM EventList ev
|
||||
INNER JOIN INSERTED i ON ev.IdxMacchina=i.IdxMacchina
|
||||
ORDER BY InizioStato DESC
|
||||
)
|
||||
SELECT @trovati=COUNT(IdxTipo) FROM myCTE WHERE idxTipo = @IdxTipo
|
||||
|
||||
-- se tutte le righe sono con stesso tipo...
|
||||
|
||||
IF(@trovati < @numMin)
|
||||
BEGIN
|
||||
INSERT INTO EventList
|
||||
SELECT * FROM INSERTED
|
||||
END
|
||||
END
|
||||
|
||||
go
|
||||
|
||||
alter table EventList disable trigger trg_doActions;
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(353, GETDATE())
|
||||
GO
|
||||
|
||||
SELECT TOP 10 * FROM LogUpdateDb ORDER BY Versione DESC
|
||||
GO
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,605 @@
|
||||
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
|
||||
@@ -0,0 +1,616 @@
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_ODL_updateChild
|
||||
* aggiorna le tabelle che dipendono dai dati dell'ODL
|
||||
*
|
||||
* modif.: S.E.L.
|
||||
* il: 2013.03.15
|
||||
**************************************/
|
||||
create PROCEDURE stp_ODL_updateChild
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@IdxODL INT,
|
||||
@CodArticoloOld NVARCHAR(50),
|
||||
@DataInizioOld DATETIME,
|
||||
@DataFineOld DATETIME,
|
||||
@CodArticoloNew NVARCHAR(50),
|
||||
@DataInizioNew DATETIME,
|
||||
@DataFineNew DATETIME
|
||||
)
|
||||
AS
|
||||
|
||||
BEGIN TRAN
|
||||
|
||||
/*****************************************************************************************************
|
||||
* AGGIORNO TUTTO!
|
||||
* - DatiConfermati
|
||||
* - DatiMacchine
|
||||
* - DatiProduzione
|
||||
* - DiarioDiBordo
|
||||
* - EventList
|
||||
* - StatoMacchine
|
||||
* - TempiCicloRilevati
|
||||
*****************************************************************************************************/
|
||||
|
||||
-- DatiConfermati
|
||||
UPDATE DatiConfermati
|
||||
SET CodArticolo = @CodArticoloNew
|
||||
WHERE CodArticolo = @CodArticoloOld
|
||||
AND ( DataRif >= @DataInizioNew AND DataRif <= ISNULL(@DataFineNew, GETDATE()) )
|
||||
|
||||
-- DatiMacchine
|
||||
UPDATE DatiMacchine
|
||||
SET kanban_A = CASE WHEN kanban_A = 'KA'+ @CodArticoloOLD THEN 'KA'+ @CodArticoloNew ELSE kanban_A END
|
||||
,kanban_B = CASE WHEN kanban_B = 'KA'+ @CodArticoloOLD THEN 'KA'+ @CodArticoloNew ELSE kanban_B END
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
|
||||
-- DatiProduzione
|
||||
UPDATE DatiProduzione
|
||||
SET CodArticolo = @CodArticoloNew
|
||||
,IdxODL = @IdxODL
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
AND ( DataRif >= @DataInizioNew AND DataRif <= ISNULL(@DataFineNew, GETDATE()) )
|
||||
|
||||
-- DiarioDiBordo
|
||||
UPDATE DiarioDiBordo
|
||||
SET KanbanCode = @CodArticoloNew
|
||||
,MatricolaKanban = 'KA'+@CodArticoloNew
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
AND ( InizioStato >= @DataInizioNew AND InizioStato <= ISNULL(@DataFineNew, GETDATE()) )
|
||||
AND KanbanCode = @CodArticoloOld
|
||||
|
||||
-- EventList
|
||||
UPDATE EventList
|
||||
SET MatricolaKanban = 'KA'+@CodArticoloNew
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
AND ( InizioStato >= @DataInizioNew AND InizioStato <= ISNULL(@DataFineNew, GETDATE()) )
|
||||
AND MatricolaKanban = 'KA'+@CodArticoloOld
|
||||
|
||||
-- StatoMacchine
|
||||
UPDATE StatoMacchine
|
||||
SET KanbanCode = @CodArticoloNew
|
||||
,MatricolaKanban = 'KA'+@CodArticoloNew
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
AND ( InizioStato >= @DataInizioNew AND InizioStato <= ISNULL(@DataFineNew, GETDATE()) )
|
||||
AND KanbanCode = @CodArticoloOld
|
||||
|
||||
-- TempiCicloRilevati
|
||||
UPDATE TempiCicloRilevati
|
||||
SET CodArticolo = @CodArticoloNew
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
AND ( DataOraRif >= @DataInizioNew AND DataOraRif <= ISNULL(@DataFineNew, GETDATE()) )
|
||||
AND CodArticolo = @CodArticoloOld
|
||||
|
||||
COMMIT TRAN
|
||||
|
||||
|
||||
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_updateAllChild
|
||||
ON ODL
|
||||
FOR UPDATE
|
||||
AS
|
||||
|
||||
-- dichiarazione variabili
|
||||
DECLARE @IdxMacchina NVARCHAR(50)
|
||||
DECLARE @IdxODL INT
|
||||
DECLARE @CodArtOld NVARCHAR(50)
|
||||
DECLARE @CodArtNew NVARCHAR(50)
|
||||
DECLARE @DataInizioOld DATETIME
|
||||
DECLARE @DataInizioNew DATETIME
|
||||
DECLARE @DataFineOld DATETIME
|
||||
DECLARE @DataFineNew DATETIME
|
||||
|
||||
-- calcolo valori articolo, date validità...
|
||||
SELECT @CodArtOld=CodArticolo, @DataInizioOld=DataInizio, @DataFineOld=DataFine FROM deleted
|
||||
SELECT @IdxODL=IdxODL, @IdxMacchina=IdxMacchina, @CodArtNew=CodArticolo, @DataInizioNew=DataInizio, @DataFineNew=DataFine FROM inserted
|
||||
|
||||
-- PRIMA REGOLA: proseguo SOLO SE la data inizio è NOT NULL
|
||||
IF(NOT (@DataInizioNew IS NULL))
|
||||
BEGIN
|
||||
|
||||
/***************************************************************
|
||||
* Eseguo SOLO SE:
|
||||
* - faccio un update del kanban e se il mio ODL ha un periodo di validità (inizio non nullo)
|
||||
* - cambia inizio periodo validità
|
||||
* - cambia fine validità (MA NON ERA NULL!!!)
|
||||
***************************************************************/
|
||||
IF( ( UPDATE(CodArticolo) AND @CodArtOld<>@CodArtNew ) OR ( UPDATE(DataInizio) AND @DataInizioOld<>@DataInizioNew ) OR ( UPDATE(DataFine) AND @DataFineOld<>@DataFineNew AND NOT (@DataFineOld IS NULL) ) )
|
||||
BEGIN
|
||||
exec stp_ODL_updateChild @IdxMacchina, @IdxODL, @CodArtOld, @DataInizioOld, @DataFineOld, @CodArtNew, @DataInizioNew, @DataFineNew
|
||||
END
|
||||
|
||||
END
|
||||
-- eseguo RICALCOLO tabella stato expl
|
||||
EXEC stp_MSE_getData 0
|
||||
go
|
||||
|
||||
/***************************************************
|
||||
* Trigger trg_ODL_updateMSE
|
||||
*
|
||||
* fa un refresh completo della MSE ad ogni insert di ODL
|
||||
*
|
||||
* modificato: S.E.L.
|
||||
* 2013.03.14
|
||||
*
|
||||
***************************************************/
|
||||
alter TRIGGER trg_ODL_updateMSE
|
||||
ON ODL
|
||||
FOR INSERT
|
||||
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
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_ODL_updateChild
|
||||
* aggiorna le tabelle che dipendono dai dati dell'ODL
|
||||
*
|
||||
* modif.: S.E.L.
|
||||
* il: 2013.03.15
|
||||
**************************************/
|
||||
alter PROCEDURE stp_ODL_updateChild
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@IdxODL INT,
|
||||
@CodArticoloOld NVARCHAR(50),
|
||||
@DataInizioOld DATETIME,
|
||||
@DataFineOld DATETIME,
|
||||
@CodArticoloNew NVARCHAR(50),
|
||||
@DataInizioNew DATETIME,
|
||||
@DataFineNew DATETIME
|
||||
)
|
||||
AS
|
||||
|
||||
BEGIN TRAN
|
||||
|
||||
/*****************************************************************************************************
|
||||
* AGGIORNO TUTTO!
|
||||
* - DatiConfermati
|
||||
* - DatiMacchine
|
||||
* - DatiProduzione
|
||||
* - DiarioDiBordo
|
||||
* - EventList
|
||||
* - StatoMacchine
|
||||
* - TempiCicloRilevati
|
||||
*****************************************************************************************************/
|
||||
|
||||
-- DatiConfermati
|
||||
UPDATE DatiConfermati
|
||||
SET CodArticolo = @CodArticoloNew
|
||||
WHERE CodArticolo = @CodArticoloOld
|
||||
AND ( DataRif >= @DataInizioNew AND DataRif <= ISNULL(@DataFineNew, GETDATE()) )
|
||||
|
||||
-- DatiMacchine, SOLO SE è ODL corrente
|
||||
IF(@DataFineNew IS NULL)
|
||||
BEGIN
|
||||
UPDATE DatiMacchine
|
||||
SET kanban_A = CASE WHEN kanban_A = 'KA'+ @CodArticoloOLD THEN 'KA'+ @CodArticoloNew ELSE kanban_A END
|
||||
,kanban_B = CASE WHEN kanban_B = 'KA'+ @CodArticoloOLD THEN 'KA'+ @CodArticoloNew ELSE kanban_B END
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
END
|
||||
|
||||
-- DatiProduzione
|
||||
UPDATE DatiProduzione
|
||||
SET CodArticolo = @CodArticoloNew
|
||||
,IdxODL = @IdxODL
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
AND ( DataRif >= @DataInizioNew AND DataRif <= ISNULL(@DataFineNew, GETDATE()) )
|
||||
|
||||
-- DiarioDiBordo
|
||||
UPDATE DiarioDiBordo
|
||||
SET KanbanCode = @CodArticoloNew
|
||||
,MatricolaKanban = 'KA'+@CodArticoloNew
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
AND ( InizioStato >= @DataInizioNew AND InizioStato <= ISNULL(@DataFineNew, GETDATE()) )
|
||||
AND KanbanCode = @CodArticoloOld
|
||||
|
||||
-- EventList
|
||||
UPDATE EventList
|
||||
SET MatricolaKanban = 'KA'+@CodArticoloNew
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
AND ( InizioStato >= @DataInizioNew AND InizioStato <= ISNULL(@DataFineNew, GETDATE()) )
|
||||
AND MatricolaKanban = 'KA'+@CodArticoloOld
|
||||
|
||||
-- StatoMacchine
|
||||
UPDATE StatoMacchine
|
||||
SET KanbanCode = @CodArticoloNew
|
||||
,MatricolaKanban = 'KA'+@CodArticoloNew
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
AND ( InizioStato >= @DataInizioNew AND InizioStato <= ISNULL(@DataFineNew, GETDATE()) )
|
||||
AND KanbanCode = @CodArticoloOld
|
||||
|
||||
-- TempiCicloRilevati
|
||||
UPDATE TempiCicloRilevati
|
||||
SET CodArticolo = @CodArticoloNew
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
AND ( DataOraRif >= @DataInizioNew AND DataOraRif <= ISNULL(@DataFineNew, GETDATE()) )
|
||||
AND CodArticolo = @CodArticoloOld
|
||||
|
||||
COMMIT TRAN
|
||||
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
drop trigger trg_ODL_updateMSE;
|
||||
go
|
||||
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
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 TOP 1 * 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
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_MSE_refresh
|
||||
* AGGIORNA tabella stato attuale macchine x macchina indicata
|
||||
*
|
||||
* modif.: S.E.L. - 2013.02.28
|
||||
**************************************/
|
||||
alter 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 top 1 * 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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(380, GETDATE())
|
||||
GO
|
||||
|
||||
SELECT TOP 10 * FROM LogUpdateDb ORDER BY Versione DESC
|
||||
GO
|
||||
@@ -0,0 +1,194 @@
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_MSE_getByIdxMacchina
|
||||
* ottiene riga stato x macchina indicata
|
||||
*
|
||||
* modif.: S.E.L. - 2013.03.15
|
||||
**************************************/
|
||||
create PROCEDURE stp_MSE_getByIdxMacchina
|
||||
(
|
||||
@IdxMacchina nvarchar(50)
|
||||
)
|
||||
AS
|
||||
SET NOCOUNT ON;
|
||||
SELECT RowNum, lastUpdate, IdxMacchina, CodMacchina, Nome, url, idxODL, CodArticolo, NumPezzi, TCAssegnato, DataInizioODL, Semaforo, idxStato, DescrizioneStato, durata, PezziProd, PezziConf, TempoOn, TempoAuto, TempoRun, TCMedio, TCLav, TCEff, TCMedioRT, TCLavRT, TCEffRT
|
||||
FROM dbo.MappaStatoExpl
|
||||
WHERE IdxMacchina=@IdxMacchina
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
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
|
||||
**************************************/
|
||||
alter 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 top 1 * 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.IdxODL = ISNULL(tvo.IdxODL,0)
|
||||
,mse.CodArticolo = ISNULL(tvo.CodArticolo,0)
|
||||
,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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(385, GETDATE())
|
||||
GO
|
||||
|
||||
SELECT TOP 10 * FROM LogUpdateDb ORDER BY Versione DESC
|
||||
GO
|
||||
@@ -0,0 +1,78 @@
|
||||
create table RemoteRebootLog(
|
||||
idxReboot int not null identity constraint PK_RemoteRebootLog primary key,
|
||||
IdxMacchina nvarchar(50) not null,
|
||||
IPv4 nvarchar(50),
|
||||
Agent nvarchar(250),
|
||||
DataOraBoot datetime
|
||||
);
|
||||
go
|
||||
|
||||
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_TC_getByMacchinaPeriodo
|
||||
* recupera tempi ciclo x macchina e periodo
|
||||
*
|
||||
* modif.: S.E.L. - 2010.12.15
|
||||
**************************************/
|
||||
alter PROCEDURE stp_TC_getByMacchinaPeriodo
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50),
|
||||
@Inizio DATETIME,
|
||||
@Fine DATETIME
|
||||
)
|
||||
AS
|
||||
|
||||
SELECT * FROM TempiCicloRilevati
|
||||
WHERE IdxMacchina = @IdxMacchina AND
|
||||
(DataOraRif >= @Inizio) AND (DataOraRif <= @Fine)
|
||||
ORDER BY DataOraRif
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_TRI_getByIdxMacchina
|
||||
* recupera dati transizione ingressi da idx Macchina
|
||||
*
|
||||
* modif.: S.E.L.
|
||||
* il: 2011.03.23
|
||||
**************************************/
|
||||
alter PROCEDURE stp_TRI_getByIdxMacchina
|
||||
(
|
||||
@IdxMacchina NVARCHAR(50)
|
||||
)
|
||||
AS
|
||||
|
||||
SELECT *
|
||||
FROM TransizioneIngressi
|
||||
WHERE IdxFamigliaIngresso = (SELECT IdxFamigliaIngresso FROM Macchine2FamigliaIngressi WHERE IdxMacchina=@IdxMacchina)
|
||||
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit;
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(390, GETDATE())
|
||||
GO
|
||||
|
||||
SELECT TOP 10 * FROM LogUpdateDb ORDER BY Versione DESC
|
||||
GO
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,839 @@
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
-- ================================================
|
||||
-- Author: Samuele E. Locatelli
|
||||
-- Create date: 2012.11.23
|
||||
--
|
||||
-- Description: rigenerazione del diario di bordo
|
||||
-- a partire da macchina eventi/stati + EventList
|
||||
-- ================================================
|
||||
alter 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) = '';
|
||||
DECLARE @FlgAggTempiC CHAR(1) = 'N'; -- Y/N = elabora o meno i tempi ciclo
|
||||
|
||||
-- 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
|
||||
-- controllo se devo aggiornare i Tempi ciclo in base allo stato macchina ( se null resta precedente )
|
||||
SELECT @FlgAggTempiC = ( CASE Semaforo WHEN 'V' THEN 'Y' ELSE 'N' END ) FROM dbo.AnagraficaStati
|
||||
WHERE IdxStato = @currIdxStato
|
||||
EXEC dbo.stp_EL_processaEvento @IdxTipo, @idxMacchina, @MatricolaKanban, @InizioStato, @NumPz, 'N', @FlgAggTempiC
|
||||
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
|
||||
|
||||
|
||||
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.:
|
||||
**************************************/
|
||||
alter 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
|
||||
@FlgAggTempiC CHAR(1) = 'N' -- Y/N = elabora o meno i tempi ciclo
|
||||
)
|
||||
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
|
||||
|
||||
---- SOLO se lo stato della macchina è VERDE ( lavora ) devo aggiornare i tempi ciclo
|
||||
---- NON VA BENE QUANDO FA RICALCOLO NON C'é NULL
|
||||
--IF EXISTS ( SELECT D.IdxStato FROM dbo.DiarioDiBordo AS D
|
||||
-- INNER JOIN dbo.AnagraficaStati AS S ON d.idxStato = S.IdxStato
|
||||
-- WHERE d.IdxMacchina = @IdxMacchina AND d.FineStato IS NULL AND s.Semaforo = 'V' )
|
||||
-- SET @FlgAggTempiC = 'Y'
|
||||
|
||||
IF (@TabAzione <> '' AND @Azione <> '')
|
||||
BEGIN
|
||||
/* azioni richieste: seconda dei casi eseguo... */
|
||||
|
||||
/******************************************
|
||||
*
|
||||
* Calcolo tempo ciclo per INIZIO
|
||||
*
|
||||
******************************************/
|
||||
IF(@TabAzione = 'TempiCicloRilevati' AND @Azione = 'Insert' AND @FlgAggTempiC = 'Y' )
|
||||
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' AND @FlgAggTempiC = 'Y' )
|
||||
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' AND @FlgAggTempiC = 'Y' )
|
||||
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
|
||||
|
||||
|
||||
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
|
||||
DECLARE @FlgAggTempiC CHAR(1) = 'N' -- Y/N = elabora o meno i tempi ciclo
|
||||
|
||||
|
||||
/* 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 )
|
||||
|
||||
-- SOLO SE lo stato della macchina è VERDE ( lavora ) devo aggiornare i tempi ciclo
|
||||
IF EXISTS ( SELECT M.IdxStato FROM dbo.StatoMacchine AS M
|
||||
INNER JOIN dbo.AnagraficaStati AS S ON M.idxStato = S.IdxStato
|
||||
WHERE M.IdxMacchina = @IdxMacchina AND s.Semaforo = 'V' )
|
||||
SET @FlgAggTempiC = 'Y'
|
||||
|
||||
EXECUTE dbo.stp_EL_processaEvento @IdxTipo, @IdxMacchina, @MatricolaKanban, @DataOra, @NumPz, 'Y', @FlgAggTempiC
|
||||
|
||||
/* 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
|
||||
|
||||
set xact_abort on;
|
||||
go
|
||||
|
||||
begin transaction;
|
||||
go
|
||||
|
||||
set ANSI_NULLS on;
|
||||
go
|
||||
|
||||
-- ================================================
|
||||
-- Author: Samuele E. Locatelli
|
||||
-- Create date: 2012.11.23
|
||||
--
|
||||
-- Description: rigenerazione del diario di bordo
|
||||
-- a partire da macchina eventi/stati + EventList
|
||||
-- ================================================
|
||||
alter 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 o a ultimo evento in diario di bordo
|
||||
SET @fine = ( SELECT MAX(InizioStato) FROM DiarioDiBordo
|
||||
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) = '';
|
||||
DECLARE @FlgAggTempiC CHAR(1) = 'N'; -- Y/N = elabora o meno i tempi ciclo
|
||||
|
||||
-- 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
|
||||
-- controllo se devo aggiornare i Tempi ciclo in base allo stato macchina ( se null resta precedente )
|
||||
SELECT @FlgAggTempiC = ( CASE Semaforo WHEN 'V' THEN 'Y' ELSE 'N' END ) FROM dbo.AnagraficaStati
|
||||
WHERE IdxStato = @currIdxStato
|
||||
EXEC dbo.stp_EL_processaEvento @IdxTipo, @idxMacchina, @MatricolaKanban, @InizioStato, @NumPz, 'N', @FlgAggTempiC
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(409, GETDATE())
|
||||
GO
|
||||
|
||||
SELECT TOP 10 * FROM LogUpdateDb ORDER BY Versione DESC
|
||||
GO
|
||||
@@ -0,0 +1,44 @@
|
||||
set xact_abort on
|
||||
go
|
||||
|
||||
begin transaction
|
||||
go
|
||||
|
||||
set ANSI_NULLS on
|
||||
go
|
||||
|
||||
/*************************************
|
||||
* STORED PROCEDURE stp_STM_setInsEnabled
|
||||
* imposta stato amcchian x permettere o meno caricamento
|
||||
*
|
||||
* modif.: S.E.L.
|
||||
* il: 2014.01.10
|
||||
**************************************/
|
||||
create PROCEDURE stp_STM_setInsEnabled
|
||||
(
|
||||
@idxMacchina NVARCHAR(50),
|
||||
@insEnabled BIT
|
||||
)
|
||||
AS
|
||||
|
||||
-- ATTIVO/DISATTIVO il caricamento degli eventi
|
||||
UPDATE DatiMacchine
|
||||
SET insEnabled = @insEnabled
|
||||
WHERE IdxMacchina = @IdxMacchina
|
||||
|
||||
RETURN
|
||||
go
|
||||
|
||||
commit
|
||||
go
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- registro versione...
|
||||
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(414, GETDATE())
|
||||
GO
|
||||
|
||||
SELECT TOP 10 * FROM LogUpdateDb ORDER BY Versione DESC
|
||||
GO
|
||||
Reference in New Issue
Block a user