---- GetLinesPieces ----
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetLinesPieces]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[GetLinesPieces]
GO

CREATE FUNCTION GetLinesPieces()
RETURNS @retObjs TABLE (LineID int, LineGUID nvarchar(64), LineObjTypeID int, PieceID int, PieceName nvarchar(100), ObjType int, ParentID int, model nvarchar(50), length float)
-- возвращает таблицу с кодами, именами, марками, длинами отрезков всех линий
AS
BEGIN
  insert into @retobjs 
    select 
      case
       when о2.Код_типа_объекта <= 10 or о2.Код_типа_объекта = 15 or о2.Код_типа_объекта = 16 then о2.Код_объекта
       when о3.Код_типа_объекта <= 10 or о3.Код_типа_объекта = 15 or о3.Код_типа_объекта = 16 then о3.Код_объекта
       when о4.Код_типа_объекта <= 10 or о4.Код_типа_объекта = 15 or о4.Код_типа_объекта = 16 then о4.Код_объекта
       when о5.Код_типа_объекта <= 10 or о5.Код_типа_объекта = 15 or о5.Код_типа_объекта = 16 then о5.Код_объекта
       else NULL
     end as LineID
     ,case
       when о2.Код_типа_объекта <= 10 or о2.Код_типа_объекта = 15 or о2.Код_типа_объекта = 16 then о2.GUID
       when о3.Код_типа_объекта <= 10 or о3.Код_типа_объекта = 15 or о3.Код_типа_объекта = 16 then о3.GUID
       when о4.Код_типа_объекта <= 10 or о4.Код_типа_объекта = 15 or о4.Код_типа_объекта = 16 then о4.GUID
       when о5.Код_типа_объекта <= 10 or о5.Код_типа_объекта = 15 or о5.Код_типа_объекта = 16 then о5.GUID
       else NULL
     end as LineGUID
     ,case
       when о2.Код_типа_объекта <= 10 or о2.Код_типа_объекта = 15 or о2.Код_типа_объекта = 16 then о2.Код_типа_объекта
       when о3.Код_типа_объекта <= 10 or о3.Код_типа_объекта = 15 or о3.Код_типа_объекта = 16 then о3.Код_типа_объекта
       when о4.Код_типа_объекта <= 10 or о4.Код_типа_объекта = 15 or о4.Код_типа_объекта = 16 then о4.Код_типа_объекта
       when о5.Код_типа_объекта <= 10 or о5.Код_типа_объекта = 15 or о5.Код_типа_объекта = 16 then о5.Код_типа_объекта
       else NULL
     end as LineObjTypeID
     ,о1.Код_объекта as PieceID
     ,о1.Наименование as PieceName
     ,о1.Код_типа_объекта as ObjType
     ,о1.Код_объекта_владельца as ParentID
     ,case 
        when о1.Код_типа_объекта = 43 then ск.Описание
        when о1.Код_типа_объекта = 45 then св.Описание
        else null
      end as Model
     ,case
        when о1.Код_типа_объекта = 43 then к.Длина
        when о1.Код_типа_объекта = 45 then в.Длина
        else null
      end as Length

    from Объект о1
    inner join Объект о2 on о2.Код_объекта = о1.Код_объекта_владельца
    left  join Объект о3 on о3.Код_объекта = о2.Код_объекта_владельца
    left  join Объект о4 on о4.Код_объекта = о3.Код_объекта_владельца
    left  join Объект о5 on о5.Код_объекта = о4.Код_объекта_владельца
    left  join Кабель к on к.Код_кабеля = о1.Код_объекта
    left  join Справочник_кабелей ск ON ск.Код_типа_кабеля = к.Код_типа_кабеля
    left join Отрезок_ВЛЭП в ON в.Код_отрезка = о1.Код_объекта
    left join Справочник_проводов св ON св.Код_типа_провода = в.Код_типа_провода
    where (о1.Код_типа_объекта = 43 or о1.Код_типа_объекта = 45)
  
  RETURN
END
GO
PRINT 'Procedures/GetLinesPieces.sql'
GO
