Если у справочника в свойствах задано Иерархический справочник, то может возникнуть необходимость найти родителя элемента справочника. Количество уровней иерархии в справочнике может быть как ограниченным, так и без ограничений.
Если количество уровней фиксированное, то через точку можно получить родительский элемент любого уровня.
РодительСсылка = СправочникСсылка.Родитель.Родитель.Родитель; Если количество уровней не ограничено, то можно на встроенном языке 1С написать универсальную функцию, которая определит самую верхнюю группу.
Определить самого верхнего родителя Универсальную функцию для определения самого верхнего родителя элемента можно реализовать с помощью встроенного языка программирования. Функции на вход подаётся ссылка на элемент иерархического справочника, а возвращается ссылка на самую верхнюю группу.
Функция ПолучитьРодителя(СправочникСсылка) Пока НЕ СправочникСсылка.Родитель.Пустая() Цикл СправочникСсылка = СправочникСсылка.Родитель; КонецЦикла; Возврат СправочникСсылка;
КонецФункции
Определить самого верхнего родителя с использованием запроса В запросе можно найти родителей элемента обратившись к свойствам через точку или с помощью левого соединения. Данные методы не универсальны, так как уровень вложенности фиксирован в запросе. Такой метод подходит, когда заранее известно количество уровней иерархического справочника. Функция на вход принимает ссылку на элемент иерархического справочника, а возвращает ссылку на группу N-уровня.
Функция ПолучитьРодителейЗапросе(СправочникСсылка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Справочник1.Родитель.Родитель.Родитель КАК Родитель |ИЗ | Справочник.Справочник1 КАК Справочник1 |ГДЕ | Справочник1.Ссылка = &Справочник1Ссылка"; Запрос.УстановитьПараметр("Справочник1Ссылка", СправочникСсылка); Результат = Запрос.Выполнить(); Если НЕ Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); Возврат Выборка.Родитель; КонецЕсли; Возврат Справочники.Справочник1.ПустаяСсылка(); КонецФункции
|