К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как получить название группы в 1С

Как получить название группы справочника в 1С: через запрос, встроенный язык, СКД и динамический список. Примеры кода, проверка результата и типичные ошибки.

Группа в иерархическом справочнике 1С — это элемент с признаком ЭтоГруппа = Истина, у которого, как и у обычного элемента, есть наименование. Задача «получить название группы» встречается в нескольких вариантах: узнать имя родительской группы конкретного элемента, вывести группу в отчёте, отобрать элементы по названию группы или показать её в динамическом списке. Способ решения зависит от того, где именно нужно название — в коде, в запросе или в интерфейсе.

Ключевой момент: у элемента справочника группа хранится в стандартном реквизите Родитель. Чтобы получить её название, достаточно обратиться к полю Наименование родителя — либо через точку в запросе, либо через объект встроенного языка. Ниже разобраны все рабочие сценарии с примерами кода и способами проверки результата.

Как устроены группы в иерархическом справочнике

Иерархический справочник в 1С имеет вид иерархии «Список» или «Дерево групп и элементов». В первом случае группы и элементы могут быть родителями наравне друг с другом, во втором родителем выступает только группа. Определить, является ли запись группой, можно по свойству ЭтоГруппа — оно доступно и в запросе, и во встроенном языке.

У каждого элемента есть стандартный реквизит Родитель типа «СправочникСсылка». Если элемент находится в корне, родитель пустой — это важно учитывать, иначе при обращении к наименованию родителя получите пустую строку или ошибку в зависимости от контекста. Проверка на пустого родителя выполняется через Родитель.Пустая() в коде или Родитель = ЗНАЧЕНИЕ(Справочник.Имя.ПустаяСсылка) в запросе.

Ещё одна особенность: наименование группы не обязано быть уникальным. В разных ветках дерева могут существовать группы с одинаковыми названиями, поэтому искать группу только по наименованию без учёта родителя — ненадёжно.

Получение названия группы в запросе

Самый частый сценарий — вывести в отчёте или выборке наименование группы, к которой относится элемент. Для этого в тексте запроса используют разыменование через точку:

ВЫБРАТЬ

Номенклатура.Ссылка КАК Элемент,

Номенклатура.Родитель КАК Группа,

Номенклатура.Родитель.Наименование КАК НазваниеГруппы

ИЗ

Справочник.Номенклатура КАК Номенклатура

ГДЕ

НЕ Номенклатура.ЭтоГруппа

Условие НЕ Номенклатура.ЭтоГруппа отсекает сами группы из выборки, чтобы в результат попали только элементы. Если нужно получить элементы конкретной группы вместе со всеми подгруппами, используют оператор В ИЕРАРХИИ:

ВЫБРАТЬ

Номенклатура.Ссылка,

Номенклатура.Родитель.Наименование КАК НазваниеГруппы

ИЗ

Справочник.Номенклатура КАК Номенклатура

ГДЕ

Номенклатура.Ссылка В ИЕРАРХИИ(&Группа)

И НЕ Номенклатура.ЭтоГруппа

Обратите внимание: разыменование Родитель.Наименование для элемента без родителя вернёт пустую строку, а не NULL, поэтому дополнительная обработка ЕСТЬNULL обычно не требуется, но проверка на пустое значение в отчётах всё равно полезна.

bsl
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка, Родитель.Наименование КАК Группа ИЗ Справочник.Номенклатура ГДЕ НЕ ЭтоГруппа";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
	Сообщить(Выборка.Ссылка.Наименование + " — группа: " + Выборка.Группа);
КонецЦикла;

Получение названия группы во встроенном языке

В модуле формы или объекта название группы текущего элемента получают прямым обращением через ссылку:

НазваниеГруппы = ЭлементСправочника.Родитель.Наименование;

Этот вариант работает, только если родитель заполнен. Безопасная конструкция с проверкой выглядит так:

Если Не ЭлементСправочника.Родитель.Пустая() Тогда

НазваниеГруппы = ЭлементСправочника.Родитель.Наименование;

Иначе

НазваниеГруппы = "Корень справочника";

КонецЕсли;

Обратная задача — найти саму группу по её названию — решается методом НайтиПоНаименованию. У него есть важный третий параметр, который определяет, искать среди групп или среди элементов:

ГруппаСсылка = Справочники.Номенклатура.НайтиПоНаименованию("Материалы", Истина, , Истина);

Здесь второй параметр Истина означает точное соответствие наименования, а четвёртый — поиск именно среди групп. Если группа не найдена, метод вернёт пустую ссылку, и это нужно проверять перед дальнейшим использованием.

Название группы в СКД и динамическом списке

В схеме компоновки данных название группы выводится тем же разыменованием Родитель.Наименование в наборе данных. Чтобы в отчёте можно было группировать строки по названию группы, добавьте это поле в ресурсы или группировки настроек. Если нужна группировка по самой группе (а не по её названию), используйте поле Родитель — тогда при одинаковых названиях разных групп строки не склеятся.

В динамическом списке формы справочника группа отображается автоматически при иерархическом режиме просмотра. Если нужен дополнительный столбец «Группа» в плоском списке, добавьте в текст запроса динамического списка поле Родитель.Наименование и выведите его в таблицу формы.

Для отбора элементов по названию группы в настройках динамического списка удобнее использовать отбор по полю Родитель.Наименование с видом сравнения «Содержит» — это позволяет пользователю фильтровать список без точного ввода названия.

Как проверить результат и обработать особые случаи

После реализации любого из способов проверьте три ситуации: элемент в корне справочника, элемент в группе второго уровня вложенности и группа с неуникальным названием. Именно на этих случаях чаще всего всплывают ошибки.

Для элемента в корне родитель пуст — название группы будет пустой строкой, и это нормально, если вы явно обработали случай. Для многоуровневой иерархии помните: Родитель возвращает только ближайшую группу. Если нужна группа верхнего уровня, потребуется цикл подъёма по родителям или итоговый запрос с соединением.

Контрольные точки

Как проверить результат

Элемент в корне справочника
Норма

Возвращается пустая строка или заглушка «Корень»

Тревожный признак

Ошибка обращения к Наименование или падение кода

Элемент во вложенной группе
Норма

Возвращается название ближайшей группы

Тревожный признак

Возвращается название верхнего уровня или NULL

Поиск группы по названию
Норма

Найденная ссылка не пустая, ЭтоГруппа = Истина

Тревожный признак

Пустая ссылка или найден элемент, а не группа

Типичные ошибки при работе с названиями групп

Наиболее распространённая ошибка — обращение Родитель.Наименование без проверки пустого родителя в коде толстого клиента или в цикле обработки, где часть элементов лежит в корне. Вторая частая проблема — поиск группы по наименованию без четвёртого параметра НайтиПоНаименованию: тогда метод может вернуть обычный элемент с таким же названием, и логика отбора сломается.

Третья ошибка — попытка получить название группы у несохранённого объекта через ссылку: для нового элемента родитель может быть заполнен в данных объекта, но обращение к Ссылка.Родитель даст пустое значение. Работайте с объектом, а не со ссылкой, пока запись не выполнена.

Типичные ошибки
01
Обращение к Родитель.Наименование без проверки пустого родителя — пустая строка или ошибка в отчёте
02
Поиск группы по наименованию без флага «искать среди групп» — находится элемент с тем же названием
03
Группировка отчёта по наименованию вместо ссылки — склейка одноимённых групп из разных веток
04
Чтение Родителя через Ссылку у нового незаписанного объекта — получение пустого значения

Выбор подходящего способа

Если название группы нужно в отчёте или выборке большого объёма данных — используйте запрос с разыменованием: это быстрее и не требует обхода объектов. Для разовой проверки в коде достаточно прямого обращения Родитель.Наименование с проверкой на пустоту. Для поиска конкретной группы по известному названию — НайтиПоНаименованию с параметром поиска по группам и обязательной проверкой результата.

Маршрут решения

Как выбрать действие

Нужно вывести группу в отчёте или спискеДобавьте поле Родитель.Наименование в запрос или СКД
Нужно узнать группу одного элемента в кодеИспользуйте Элемент.Родитель.Наименование с проверкой Пустая()
Нужно найти группу по известному названиюПримените НайтиПоНаименованию с четвёртым параметром Истина
Нужны элементы группы со всеми подгруппамиИспользуйте условие В ИЕРАРХИИ(&Группа) в запросе

Часто задаваемые вопросы

Как получить название группы верхнего уровня, а не ближайшей?

Реквизит Родитель возвращает только непосредственную группу. Чтобы дойти до верхнего уровня, организуйте цикл: пока родитель текущей ссылки не пуст, присваивайте ссылке значение родителя. Последняя непустая ссылка в цепочке — группа верхнего уровня, её наименование и есть искомое.

Почему НайтиПоНаименованию не находит существующую группу?

Проверьте параметры вызова: второй параметр отвечает за точное соответствие — если он Истина, а в названии есть лишние пробелы, поиск не сработает. Также убедитесь, что четвёртый параметр задан как Истина для поиска среди групп, и что поиск не ограничен третьим параметром (родителем).

Что вернёт Родитель.Наименование, если элемент в корне справочника?

В запросе — пустую строку, во встроенном языке при обращении через ссылку — также пустую строку, но безопаснее явно проверять Родитель.Пустая() и подставлять осмысленное значение-заглушку, чтобы пользователь видел понятное обозначение вместо пустой ячейки.

Можно ли получить название группы в управляемой форме списка без запроса?

Да, если список отображается в иерархическом режиме, группа видна как строка дерева. Для плоского списка добавьте в запрос динамического списка поле Родитель.Наименование и выведите его колонкой — отдельный программный запрос не понадобится.

Как отобрать элементы, у которых название группы содержит заданный текст?

В запросе используйте условие Номенклатура.Родитель.Наименование ПОДОБНО "%Текст%", а в динамическом списке — отбор по полю Родитель.Наименование с видом сравнения «Содержит». Учтите, что такой отбор не использует индексы эффективно и на больших справочниках может работать медленно.

Итог

Что важно запомнить

Название группы элемента всегда доступно через Родитель.Наименование — в запросе, СКД и коде. Всегда проверяйте пустого родителя, а при поиске группы по названию используйте параметр поиска среди групп и проверяйте найденную ссылку перед использованием.