---- GetTopParent ----
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetTopParent]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[GetTopParent]
GO
CREATE   function GetTopParent (@ObjID int)
returns int
as
begin
  declare @Result int
  declare @ParentID int
  select @ParentID = IsNull(Код_объекта_владельца,0) from Объект where Код_объекта = @ObjID
  while @ParentID<>0
  begin
    set @Result = @ParentID
    select @ParentID = IsNull(Код_объекта_владельца,0) from Объект where Код_объекта = @Result
  end
  return @Result
end
GO
PRINT 'functions: GetTopParent'
GO

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

CREATE function GetPlacement (@ObjID int)
returns nvarchar(2000)
as
begin
  declare @R int
  declare @Result nvarchar(2000)
  declare @Placement nvarchar(200)
  set @Result = '';
  declare @ParentID int
  select @ParentID = IsNull(Код_объекта_владельца,0) from Объект where Код_объекта = @ObjID
  while @ParentID<>0
  begin
    set @R = @ParentID
    select @ParentID = IsNull(Код_объекта_владельца,0) from Объект where Код_объекта = @R
    select @Placement = Наименование from Объект where Код_объекта = @R
    if (@Placement <> '')and(@Result <> '') select @Result = @Placement + '|' + @Result
    if (@Placement <> '')and(@Result = '') select @Result = @Placement
  end
  return @Result
end
GO
PRINT 'functions: GetPlacement'
GO
