Реквизит «Родитель» в 1С 8.3: как группы держат иерархию данных
Содержание
Родитель в 1С — это стандартный реквизит иерархического справочника (во встроенном языке Родитель), в котором хранится ссылка на вышестоящую группу или элемент. У элементов верхнего уровня родитель пустой. Именно через этот реквизит платформа строит дерево: папка «Материалы» — родитель для «Краски», а «Краски» — для конкретной банки эмали.
Механизм общий для платформы 1С:Предприятие 8.3, поэтому работает одинаково в Бухгалтерии, ЗУП, Управлении торговлей и любой другой конфигурации. Ниже — как родителем управлять в обычном режиме, как он описан в Конфигураторе, как читается в коде и запросах и почему перенос одной группы может «перекроить» отчёт за прошлый год.
Как устроена иерархия справочника и где в ней родитель
Иерархию включают в свойствах справочника. Пока флажок Иерархический справочник снят, реквизита Родитель у объекта просто нет: все элементы лежат одним плоским списком.
Когда иерархия включена, выбирают её вид:
- 📁 Иерархия групп и элементов. Есть два типа записей: группы (папки) и элементы. Родителем может быть только группа. Так устроены номенклатура, контрагенты, статьи затрат.
- 🌳 Иерархия элементов. Групп нет. Родителем выступает обычный элемент, у которого есть все реквизиты. Так удобно описывать подразделения: отдел продаж подчинён коммерческой дирекции, и обе записи — полноценные подразделения.
У каждой записи в иерархии групп и элементов есть признак ЭтоГруппа. Его задают при создании, потом поменять нельзя: группа не превращается в элемент и наоборот.
Ещё два свойства в той же вкладке:
Ограничение количества уровней иерархиииКоличество уровней— сколько этажей допустимо в дереве. Если ограничение включено, создать группу глубже не получится.Размещать группы сверху— группы показываются в списке над элементами.
Родитель не путайте с владельцем. Владелец — это подчинение другому справочнику (договоры подчинены контрагенту, единицы измерения — номенклатуре). Родитель — подчинение внутри одного справочника. У записи могут быть оба реквизита одновременно.
Работа с группами и родителем в пользовательском режиме
В интерфейсе «Такси» поле родителя в карточке элемента обычно подписано «Группа», «Входит в группу» или «Родитель» — подпись задаёт разработчик формы. Выбор в этом поле и есть смена родителя.
Создать группу
- Откройте список справочника, например
Справочники → Номенклатурав Бухгалтерии 3.0. - Встаньте на ту группу, внутри которой нужна новая папка, или на корень списка.
- Нажмите
Создать группу(кнопка с изображением папки в командной панели или в менюЕще). - Введите наименование и запишите.
Новая группа получит родителем ту, в которой стоял курсор. Если нужно положить её на верхний уровень — очистите поле родителя в форме группы.
Перенести элемент в другую группу
Три рабочих способа:
| Способ | Когда удобно | На что смотреть |
|---|---|---|
| Открыть карточку и выбрать другую группу в поле родителя | Один-два элемента | Поле может быть скрыто в форме — тогда остальные способы |
| Перетащить строку мышью на нужную папку в списке | Несколько элементов в одном окне | Список должен быть в режиме иерархии, иначе папок не видно |
Команда Переместить в группу в меню Еще | Выделено сразу много строк | Выделите строки с Ctrl или Shift, затем выберите группу |
Перенос группы тянет за собой всё содержимое: подчинённые группы и элементы остаются внутри неё, меняется только родитель самой группы.
Режимы просмотра списка
В меню Еще → Режим просмотра три варианта: Иерархический список, Список и Дерево. Иерархический показывает содержимое одной папки, «Дерево» — всю структуру сразу, «Список» — все элементы без папок. Когда «пропал» элемент, первым делом переключите на «Список»: часто он просто лежит в другой группе.
Пометка на удаление
Пометка на удаление группы помечает и всё её содержимое. Окончательно группа удаляется обработкой удаления помеченных объектов, и только если на неё и на вложенные элементы нет ссылок в документах и других справочниках.
Перед пометкой большой группы проверьте, что в ней нет используемых элементов: снимать пометку с сотни позиций вручную долго.
Родитель в Конфигураторе и во встроенном языке
Реквизит Родитель — стандартный: его не добавляют вручную, он появляется вместе с иерархией. Его видно в списке Стандартные реквизиты объекта.
Свойства, которые связаны с родителем
Использованиеу обычных реквизитов: «Для элемента», «Для группы», «Для группы и элемента». У группы бессмысленно хранить цену или артикул — их ставят «Для элемента».Выбор групп и элементову реквизитов других объектов, ссылающихся на справочник: можно разрешить выбор только элементов, только групп или и того и другого. В документах обычно оставляют только элементы, чтобы в табличную часть не попала папка.Серии кодов: «Во всем справочнике» или «В пределах подчинения». Во втором случае код уникален только внутри одного родителя, и для однозначного поиска нужен полный код.
Включение иерархии или смена количества уровней меняет структуру хранения. Применяется это через обновление конфигурации базы данных, которому нужен монопольный доступ.
Чтение и смена родителя в коде
Базовые операции над объектом справочника:
// Создать группу верхнего уровня
Группа = Справочники.Номенклатура.СоздатьГруппу();
Группа.Наименование = "Лакокрасочные материалы";
Группа.Записать();
// Перенести элемент в эту группу
Объект = СсылкаНаЭлемент.ПолучитьОбъект();
Объект.Родитель = Группа.Ссылка;
Объект.Записать();
Полезные методы ссылки и объекта:
Уровень()— номер уровня, у верхнего 0;ПолноеНаименование()— путь через «/», например «Материалы/Краски/Эмаль ПФ-115»;ПолныйКод()— коды всех родителей подряд;ПринадлежитЭлементу(Группа)— истина, если запись лежит внутри группы на любом уровне вложенности.
Поиск с учётом родителя есть в стандартных методах менеджера: в НайтиПоНаименованию и НайтиПоКоду третьим параметром передаётся родитель. Без него метод ищет по всему справочнику и вернёт первое попавшееся совпадение — а одинаковые наименования в разных папках бывают часто.
ГруппаКраски = Справочники.Номенклатура.НайтиПоНаименованию("Краски", Истина);
Элемент = Справочники.Номенклатура.НайтиПоНаименованию("Эмаль белая", Истина, ГруппаКраски);
Платформа не даёт сделать группу подчинённой её собственному потомку — запись завершится ошибкой. Обходить это не нужно: такая операция порвала бы дерево.
Как родитель влияет на отчёты и аналитику
Отчёты на системе компоновки данных (СКД) умеют группировать по иерархии справочника. В настройках группировки выбирают тип:
Элементы— только конечные записи, без папок;Иерархия— папки с итогами и элементы внутри них;Только иерархия— одни папки с итогами, без элементов.
В отборе для иерархических полей есть виды сравнения В группе и В группе из списка. Отбор «Номенклатура в группе Краски» захватит все вложенные подгруппы, а не только первый уровень. Обычное «Равно» по группе вернёт пустоту, потому что в движениях документов групп нет — там только элементы.
Главная ловушка: иерархия не хранит историю
Родитель — обычный реквизит, не периодический. Отчёт всегда раскладывает данные по текущей структуре дерева. Перенесли «Эмаль белая» из группы «Краски» в «Эмали» в октябре — и оборотка за январь тоже покажет её в «Эмалях».
Если управленческой отчётности нужна раскладка «как было на дату», дерево для этого не годится. Варианты:
- 📌 хранить группу аналитики в периодическом регистре сведений и строить отчёт по нему;
- 📌 перед реорганизацией сохранять старые итоги отчётов в файл;
- 📌 менять структуру на стыке периодов, а не в середине квартала.
Поиск элементов по родителю и скорость запросов
В запросах родитель используется двумя способами, и разница между ними принципиальная.
// Только прямые потомки группы — один уровень
ВЫБРАТЬ Ссылка, Наименование
ИЗ Справочник.Номенклатура
ГДЕ Родитель = &Группа
// Группа и всё, что лежит внутри неё на любой глубине
ВЫБРАТЬ Ссылка, Наименование
ИЗ Справочник.Номенклатура
ГДЕ Ссылка В ИЕРАРХИИ (&Группа)
Элементы верхнего уровня выбирают условием Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка).
Оператор В ИЕРАРХИИ включает в результат и саму группу. Если нужны только элементы, добавьте И НЕ ЭтоГруппа. Тот же оператор работает и в условиях к полям регистров: ГДЕ Номенклатура В ИЕРАРХИИ (&Группа).
Что ускоряет работу с иерархией
- Не обходите дерево рекурсией с запросом в цикле. На справочнике в 50 000 позиций и пяти уровнях это тысячи обращений к базе. Одного запроса с
В ИЕРАРХИИдостаточно. - Для вывода всего дерева используйте
Справочники.Номенклатура.ВыбратьИерархически()или запрос сИТОГИ ПО Ссылка ИЕРАРХИЯи обходом результатаОбходРезультатаЗапроса.ПоГруппировкамСИерархией. - Для одного уровня хватает
Справочники.Номенклатура.Выбрать(Группа)— первый параметр метода и есть родитель. - Не делайте дерево глубже, чем нужно. Пять уровней читать и пользователям, и запросам заметно проще, чем двенадцать.
- Не заменяйте иерархией отбор по признаку. Если элемент логически входит в две категории сразу, папки этого не выразят — нужен отдельный реквизит или регистр.
Отбор по родителю в форме списка
Когда в форме нужно показать содержимое одной группы, не пишите отдельный запрос. У таблицы формы, связанной с иерархическим списком, есть свойство ТекущийРодитель — это открытая сейчас папка. Его можно выставить из кода при открытии формы, и список сразу откроется внутри нужной группы. Для отбора «всё внутри группы на любой глубине» добавьте в отбор списка поле Ссылка с видом сравнения В группе.
Такой отбор пользователь видит и может снять сам. Если снимать его нельзя, задайте условие в тексте запроса динамического списка через параметр — тогда в настройках формы его не будет.
Ошибки при управлении иерархией
Ошибки, которые встречаются в рабочих базах чаще всего:
- ❌ Элемент «исчез» из списка. Обычно его перенесли в другую группу. Переключите режим просмотра на «Список» и найдите по наименованию, затем посмотрите поле группы в карточке.
- ❌ Группа попала в документ. Реквизиту документа разрешили выбор групп. Проверьте свойство
Выбор групп и элементову реквизита или у поля формы и оставьте только элементы. - ❌ Загрузка из Excel создала дубли. Обработка искала элемент по наименованию без родителя и не нашла его в нужной папке. Ищите с параметром родителя или по коду, артикулу.
- ❌ Не создаётся вложенная группа. В справочнике включено ограничение уровней, и лимит достигнут. Решение — пересмотреть структуру или изменить ограничение в Конфигураторе.
- ❌ Код повторяется в разных папках. Серии кодов настроены «В пределах подчинения». Это не сбой, а настройка: для поиска используйте полный код.
- ❌ Массовый перенос сломал отчёты. Структуру поменяли в середине периода. Смотрите раздел про историю выше: прошлые отчёты пересчитаются по новому дереву.
Перед массовой реорганизацией большого справочника сделайте резервную копию базы. Возвращать сотни элементов по старым папкам вручную — день работы, а по копии структуру можно хотя бы сверить.
Частые вопросы
Можно ли превратить группу в элемент?
Почему у справочника нет поля «Родитель»?
Есть ли родитель у плана счетов?
Родитель: у 60.01 родитель — счёт 60.