---- GetAirLinePieceLength ----
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetAirLinePieceLength]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[GetAirLinePieceLength]
GO
create function GetAirLinePieceLength(@ObjID integer)
returns float
as
begin
  declare @PieceLength float
  declare @SpanLength float

  select @PieceLength = Длина FROM Отрезок_ВЛЭП WHERE Код_отрезка = @ObjID
  if @PieceLength > 0
    return @PieceLength

  select @SpanLength = sum(Пролет.Длина) 
  FROM Пролет
  INNER JOIN Объект ON Пролет.Код_пролета = Объект.Код_объекта
  WHERE Объект.Код_объекта_владельца = @ObjID 
    
  if @SpanLength > 0
    return @SpanLength
  return 0
end
GO
-- получить список марок проводов Участка либо ЛЭП
-- марки проводов берутся из Пролетов, которые заведены в Участке либо в ЛЭП
-- описание марок проводов достаются из Справочника проводов
-- марки проводов в списке разделяются символом ';'
-- если в Участке/ЛЭП отсутствуют пролеты - возвращается пустая строка
-- если во всех пролетах Участка/ЛЭП не указаны марки проводов - возвращается пустая строка
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[CablesDescriptionsAsString]') AND xtype IN (N'FN', N'IF', N'TF'))
DROP FUNCTION [dbo].[CablesDescriptionsAsString]
GO
CREATE FUNCTION [dbo].[CablesDescriptionsAsString](@LineID integer)
RETURNS nvarchar(4000)
AS
BEGIN
	DECLARE @res nvarchar(4000)

	SET @res = ''
	SELECT @res = @res + 
		Справочник_проводов.Описание + ';'
	FROM Пролет
	INNER JOIN Объект ON Пролет.Код_пролета = Объект.Код_объекта
	INNER JOIN Справочник_проводов ON Пролет.Код_типа_провода = Справочник_проводов.Код_типа_провода
	WHERE 
	Объект.Код_объекта_владельца = @LineID
	AND
	Справочник_проводов.Код_типа_провода IS NOT NULL
	
	-- удаляем финальный символ ';'
	IF LEN(@res) > 0
		SET @res = LEFT(@res, LEN(@res) - 1)
	RETURN @res
END

