Список элементов справочника в системе 1С:Предприятие может быть многоуровневым. В этом случае все строки справочника будут разделяться на 2 вида: «просто» элементы справочника и группы справочника. Группы позволяют переходить на нижележащие уровни многоуровневого справочника. Возможное количество уровней вложенности справочника задается в Конфигураторе.
Использование многоуровневых справочников позволяет организовать ввод информации в справочник с нужной степенью детализации. Элементы и группы элементов в многоуровневом справочнике можно переносить из одной группы в другую.
Внимание!Иерархический справочник - это также многоуровневый справочник, или справочник с группами. Группа справочника в 1С часто называется "родитель".
Внимание! В Конфигураторе можно задать для реквизита то, что он действителен только для элемента, только для группы или для обоих. Например, поле ДатаПриема не имеет смысла для группы Работающие. Поэтому не стоит обращаться к реквизитам элементов, если вы работаете с группой и наоборот.
Установка текущей группы
СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); СпрСотр.ИспользоватьРодителя(грпРаботающие); //теперь мы внутри группы Работающие СпрСотр.ВыбратьЭлементы(); //открыть выборку элементов группы Работающие
СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); СпрСотр.ИспользоватьРодителя(грпРаботающие); СпрСотр.Новый(); //создание нового элемента в группе Работающие
Если справочник многоуровневый, то будет полезным применение следующих методов и атрибутов, которые позволяют получить информацию о текущем элементе справочника:
Метод / атрибут
Описание
Уровень()
Этот метод возвращает уровень текущего элемента. Например, для сотрудника, который находится в группе Работающие, мы получим число 2.
Пример, вывод иерархического справочника в виде дерева:
СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); СпрСотр.ВыбратьЭлементы(); Пока СпрСотр.ПолучитьЭлементы()=1 Цикл
//вывести отступ в соответствии с глубиной вложенности элемента Для Ном=1 По СпрСотр.Уровень() Цикл .....Сообщить("....."); КонецЦикла; Сообщить(СпрСотр.Наименование);
КонецЦикла;
ЭтоГруппа()
Этот метод возвращает 1, если текущий элемент справочника является группой, или 0 если группой не является.
Пример, вывод сотрудников (группы не выводятся):
СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); СпрСотр.ВыбратьЭлементы(); Пока СпрСотр.ПолучитьЭлементы()=1 Цикл
Если СпрСотр.ЭтоГруппа()=1 Тогда ......Продолжить; //группы пропускаем, перейти в начало цикла КонецЕсли; Сообщить(СпрСотр.Наименование);
КонецЦикла;
ПринадлежитГруппе(...)
Метод проверяет, принадлежит ли указанной группе текущий элемент справочника (независимо от того, на каком нижележащем уровне он находится). Возвращает: 1 - если элемент принадлежит указанной группе , 0 - если нет.
Пример, вывод товаров, принадлежащих к группе Спиртное, независимо от того входят ли они в подгруппы Шампанское, Пиво, Водка, Вино и т.д.:
СпрТовары = СоздатьОбъект("Справочник.Товары"); СпрТовары.ВыбратьЭлементы(); Пока СпрТовары.ПолучитьЭлементы()=1 Цикл
Если СпрТовары.ПринадлежитГруппе(грпСпиртное)=1 Тогда .....Сообщить(СпрТовары.Наименование); КонецЕсли;
КонецЦикла;
атрибут Родитель
Этот атрибут содержит родителя текущего элемента справочника, т.е. группу, в которой находится текущий элемент. Доступен для чтения и записи.
Пример, перенос всех товаров из группы Спиртное в группу Распродажа:
СпрТовары = СоздатьОбъект("Справочник.Товары"); СпрТовары.ВыбратьЭлементы(); Пока СпрТовары.ПолучитьЭлементы()=1 Цикл
Если СпрТовары.ПринадлежитГруппе(грпСпиртное)=1 Тогда .....СпрСотр.Родитель = грпРаспродажа; .....СпрСотр.Записать(); КонецЕсли;
КонецЦикла;
А можно сделать красивее и перенести всю группу Спиртное в группу Распродажа, тогда все подгруппы и элементы также перенесутся в группу Распродажа.
СпрТовары = СоздатьОбъект("Справочник.Товары"); СпрТовары.НайтиЭлемент(грпСпиртное); СпрТовары.Родитель = грпРаспродажа; СпрТовары.Записать();
ПолныйКод()
Возвращает строку, содержащую полный код выбранного элемента справочника со всеми вышестоящими уровнями, разделенными символом "/".
Например, "2/7/123"
ПолноеНаименование()
Возвращает строку, содержащую полное наименование выбранного элемента справочника со всеми вышестоящими уровнями, разделенными символом "/".
Например, "Спиртное/Шампанское/Советское"