-- 3.5.93 Power
---- GetCreationDateEx ----
-- получить дату создания объекта
-- дата создания ищется у текущего объекта, если она не задана, то ищется
-- у всех родителей текущего объекта (вверх по дереву до корня)
-- дата создания объекта вычисляется как дата Работы, имеющей тип "Ввод в эксплуатацию", с наименьшей датой
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[GetCreationDateEx]') AND xtype IN (N'FN', N'IF', N'TF'))
DROP FUNCTION [dbo].GetCreationDateEx
GO
CREATE FUNCTION GetCreationDateEx(@ID integer)
-- ID - идентификатор объекта, с которого начинаем поиск даты создания объекта
-- ParentID - идентификатор объекта, в котором найдена дата создания объекта
-- CreationDate - дата создания объекта
RETURNS @retParams TABLE (ObjIdWithCreationDate int, CreationDate datetime)
AS
BEGIN
  IF @ID is NULL or @ID = 0 RETURN

  DECLARE @CreationDate datetime
  SET @CreationDate = 0
  DECLARE @CurParentID int
  SET @CurParentID = 0
  DECLARE @CurChildID int
  SET @CurChildID = @ID

  WHILE ((@CreationDate = 0) OR (@CreationDate is NULL)) AND (@CurChildID <> 0)
  BEGIN
	SELECT @CreationDate = Min(Дата_окончания_по_факту)
	FROM dbo.Работа
		inner join dbo.Справочник_видов_работ Спр
		ON Спр.Код_вида_работы = Работа.Код_вида_работы
	WHERE Код_объекта = @CurChildID
		And Является_принятой = 1
		And Класс_работы = 2
	IF (@CreationDate is NOT NULL) AND (@CreationDate <> 0)
		INSERT INTO @retParams VALUES (@CurChildID, @CreationDate)		
    SELECT @CurParentID = IsNull(Код_объекта_владельца, 0) FROM Объект WHERE Код_объекта = @CurChildID
    SET @CurChildID = @CurParentID    
  END
  RETURN
END

GO

--
-- Добавить тип Работы 'Ввод в эксплуатацию' для некоторых типов объектов в Справочник видов работ
--

-- ЛЭП 27.5 кВ
IF NOT EXISTS (SELECT null FROM Справочник_видов_работ WHERE (Класс_работы = 2) AND (Код_типа_объекта = 14)) INSERT INTO Справочник_видов_работ (Описание,Класс_работы,Код_типа_объекта) VALUES ('Ввод в эксплуатацию',2,14)
-- ЛЭП 3 кВ
IF NOT EXISTS (SELECT null FROM Справочник_видов_работ WHERE (Класс_работы = 2) AND (Код_типа_объекта = 15)) INSERT INTO Справочник_видов_работ (Описание,Класс_работы,Код_типа_объекта) VALUES ('Ввод в эксплуатацию',2,15)
-- ЛЭП 150 кВ
IF NOT EXISTS (SELECT null FROM Справочник_видов_работ WHERE (Класс_работы = 2) AND (Код_типа_объекта = 16)) INSERT INTO Справочник_видов_работ (Описание,Класс_работы,Код_типа_объекта) VALUES ('Ввод в эксплуатацию',2,16)
-- ЛЭП 0.7 кВ
IF NOT EXISTS (SELECT null FROM Справочник_видов_работ WHERE (Класс_работы = 2) AND (Код_типа_объекта = 17)) INSERT INTO Справочник_видов_работ (Описание,Класс_работы,Код_типа_объекта) VALUES ('Ввод в эксплуатацию',2,17)
-- ЛЭП 1.2 кВ
IF NOT EXISTS (SELECT null FROM Справочник_видов_работ WHERE (Класс_работы = 2) AND (Код_типа_объекта = 18)) INSERT INTO Справочник_видов_работ (Описание,Класс_работы,Код_типа_объекта) VALUES ('Ввод в эксплуатацию',2,18)
-- Отрезок кабеля
IF NOT EXISTS (SELECT null FROM Справочник_видов_работ WHERE (Класс_работы = 2) AND (Код_типа_объекта = 43)) INSERT INTO Справочник_видов_работ (Описание,Класс_работы,Код_типа_объекта) VALUES ('Ввод в эксплуатацию',2,43)
-- Кабель
IF NOT EXISTS (SELECT null FROM Справочник_видов_работ WHERE (Класс_работы = 2) AND (Код_типа_объекта = 91)) INSERT INTO Справочник_видов_работ (Описание,Класс_работы,Код_типа_объекта) VALUES ('Ввод в эксплуатацию',2,91)
-- Кабельная линия
IF NOT EXISTS (SELECT null FROM Справочник_видов_работ WHERE (Класс_работы = 2) AND (Код_типа_объекта = 92)) INSERT INTO Справочник_видов_работ (Описание,Класс_работы,Код_типа_объекта) VALUES ('Ввод в эксплуатацию',2,92)
