Разработка и Конфигурация · 10 мин
Как получить название группы в 1С
Как получить название группы справочника в 1С: через запрос, встроенный язык, СКД и динамический список. Примеры кода, проверка результата и типичные ошибки.
Группа в иерархическом справочнике 1С — это элемент с признаком ЭтоГруппа = Истина, у которого, как и у обычного элемента, есть наименование. Задача «получить название группы» встречается в нескольких вариантах: узнать имя родительской группы конкретного элемента, вывести группу в отчёте, отобрать элементы по названию группы или показать её в динамическом списке. Способ решения зависит от того, где именно нужно название — в коде, в запросе или в интерфейсе.
Ключевой момент: у элемента справочника группа хранится в стандартном реквизите Родитель. Чтобы получить её название, достаточно обратиться к полю Наименование родителя — либо через точку в запросе, либо через объект встроенного языка. Ниже разобраны все рабочие сценарии с примерами кода и способами проверки результата.
Как устроены группы в иерархическом справочнике
Иерархический справочник в 1С имеет вид иерархии «Список» или «Дерево групп и элементов». В первом случае группы и элементы могут быть родителями наравне друг с другом, во втором родителем выступает только группа. Определить, является ли запись группой, можно по свойству ЭтоГруппа — оно доступно и в запросе, и во встроенном языке.
У каждого элемента есть стандартный реквизит Родитель типа «СправочникСсылка». Если элемент находится в корне, родитель пустой — это важно учитывать, иначе при обращении к наименованию родителя получите пустую строку или ошибку в зависимости от контекста. Проверка на пустого родителя выполняется через Родитель.Пустая() в коде или Родитель = ЗНАЧЕНИЕ(Справочник.Имя.ПустаяСсылка) в запросе.
Ещё одна особенность: наименование группы не обязано быть уникальным. В разных ветках дерева могут существовать группы с одинаковыми названиями, поэтому искать группу только по наименованию без учёта родителя — ненадёжно.
Получение названия группы в запросе
Самый частый сценарий — вывести в отчёте или выборке наименование группы, к которой относится элемент. Для этого в тексте запроса используют разыменование через точку:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Элемент,
Номенклатура.Родитель КАК Группа,
Номенклатура.Родитель.Наименование КАК НазваниеГруппы
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
НЕ Номенклатура.ЭтоГруппа
Условие НЕ Номенклатура.ЭтоГруппа отсекает сами группы из выборки, чтобы в результат попали только элементы. Если нужно получить элементы конкретной группы вместе со всеми подгруппами, используют оператор В ИЕРАРХИИ:
ВЫБРАТЬ
Номенклатура.Ссылка,
Номенклатура.Родитель.Наименование КАК НазваниеГруппы
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Ссылка В ИЕРАРХИИ(&Группа)
И НЕ Номенклатура.ЭтоГруппа
Обратите внимание: разыменование Родитель.Наименование для элемента без родителя вернёт пустую строку, а не NULL, поэтому дополнительная обработка ЕСТЬNULL обычно не требуется, но проверка на пустое значение в отчётах всё равно полезна.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка, Родитель.Наименование КАК Группа ИЗ Справочник.Номенклатура ГДЕ НЕ ЭтоГруппа";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Ссылка.Наименование + " — группа: " + Выборка.Группа);
КонецЦикла;Получение названия группы во встроенном языке
В модуле формы или объекта название группы текущего элемента получают прямым обращением через ссылку:
НазваниеГруппы = ЭлементСправочника.Родитель.Наименование;
Этот вариант работает, только если родитель заполнен. Безопасная конструкция с проверкой выглядит так:
Если Не ЭлементСправочника.Родитель.Пустая() Тогда
НазваниеГруппы = ЭлементСправочника.Родитель.Наименование;
Иначе
НазваниеГруппы = "Корень справочника";
КонецЕсли;
Обратная задача — найти саму группу по её названию — решается методом НайтиПоНаименованию. У него есть важный третий параметр, который определяет, искать среди групп или среди элементов:
ГруппаСсылка = Справочники.Номенклатура.НайтиПоНаименованию("Материалы", Истина, , Истина);
Здесь второй параметр Истина означает точное соответствие наименования, а четвёртый — поиск именно среди групп. Если группа не найдена, метод вернёт пустую ссылку, и это нужно проверять перед дальнейшим использованием.
Название группы в СКД и динамическом списке
В схеме компоновки данных название группы выводится тем же разыменованием Родитель.Наименование в наборе данных. Чтобы в отчёте можно было группировать строки по названию группы, добавьте это поле в ресурсы или группировки настроек. Если нужна группировка по самой группе (а не по её названию), используйте поле Родитель — тогда при одинаковых названиях разных групп строки не склеятся.
В динамическом списке формы справочника группа отображается автоматически при иерархическом режиме просмотра. Если нужен дополнительный столбец «Группа» в плоском списке, добавьте в текст запроса динамического списка поле Родитель.Наименование и выведите его в таблицу формы.
Для отбора элементов по названию группы в настройках динамического списка удобнее использовать отбор по полю Родитель.Наименование с видом сравнения «Содержит» — это позволяет пользователю фильтровать список без точного ввода названия.
Как проверить результат и обработать особые случаи
После реализации любого из способов проверьте три ситуации: элемент в корне справочника, элемент в группе второго уровня вложенности и группа с неуникальным названием. Именно на этих случаях чаще всего всплывают ошибки.
Для элемента в корне родитель пуст — название группы будет пустой строкой, и это нормально, если вы явно обработали случай. Для многоуровневой иерархии помните: Родитель возвращает только ближайшую группу. Если нужна группа верхнего уровня, потребуется цикл подъёма по родителям или итоговый запрос с соединением.
Как проверить результат
Возвращается пустая строка или заглушка «Корень»
Ошибка обращения к Наименование или падение кода
Возвращается название ближайшей группы
Возвращается название верхнего уровня или NULL
Найденная ссылка не пустая, ЭтоГруппа = Истина
Пустая ссылка или найден элемент, а не группа
Типичные ошибки при работе с названиями групп
Наиболее распространённая ошибка — обращение Родитель.Наименование без проверки пустого родителя в коде толстого клиента или в цикле обработки, где часть элементов лежит в корне. Вторая частая проблема — поиск группы по наименованию без четвёртого параметра НайтиПоНаименованию: тогда метод может вернуть обычный элемент с таким же названием, и логика отбора сломается.
Третья ошибка — попытка получить название группы у несохранённого объекта через ссылку: для нового элемента родитель может быть заполнен в данных объекта, но обращение к Ссылка.Родитель даст пустое значение. Работайте с объектом, а не со ссылкой, пока запись не выполнена.
Выбор подходящего способа
Если название группы нужно в отчёте или выборке большого объёма данных — используйте запрос с разыменованием: это быстрее и не требует обхода объектов. Для разовой проверки в коде достаточно прямого обращения Родитель.Наименование с проверкой на пустоту. Для поиска конкретной группы по известному названию — НайтиПоНаименованию с параметром поиска по группам и обязательной проверкой результата.
Как выбрать действие
Часто задаваемые вопросы
Как получить название группы верхнего уровня, а не ближайшей?
Реквизит Родитель возвращает только непосредственную группу. Чтобы дойти до верхнего уровня, организуйте цикл: пока родитель текущей ссылки не пуст, присваивайте ссылке значение родителя. Последняя непустая ссылка в цепочке — группа верхнего уровня, её наименование и есть искомое.
Почему НайтиПоНаименованию не находит существующую группу?
Проверьте параметры вызова: второй параметр отвечает за точное соответствие — если он Истина, а в названии есть лишние пробелы, поиск не сработает. Также убедитесь, что четвёртый параметр задан как Истина для поиска среди групп, и что поиск не ограничен третьим параметром (родителем).
Что вернёт Родитель.Наименование, если элемент в корне справочника?
В запросе — пустую строку, во встроенном языке при обращении через ссылку — также пустую строку, но безопаснее явно проверять Родитель.Пустая() и подставлять осмысленное значение-заглушку, чтобы пользователь видел понятное обозначение вместо пустой ячейки.
Можно ли получить название группы в управляемой форме списка без запроса?
Да, если список отображается в иерархическом режиме, группа видна как строка дерева. Для плоского списка добавьте в запрос динамического списка поле Родитель.Наименование и выведите его колонкой — отдельный программный запрос не понадобится.
Как отобрать элементы, у которых название группы содержит заданный текст?
В запросе используйте условие Номенклатура.Родитель.Наименование ПОДОБНО "%Текст%", а в динамическом списке — отбор по полю Родитель.Наименование с видом сравнения «Содержит». Учтите, что такой отбор не использует индексы эффективно и на больших справочниках может работать медленно.
Что важно запомнить
Название группы элемента всегда доступно через Родитель.Наименование — в запросе, СКД и коде. Всегда проверяйте пустого родителя, а при поиске группы по названию используйте параметр поиска среди групп и проверяйте найденную ссылку перед использованием.