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

Справочники и Данные · 11 мин

Как подчинить один справочник другому в 1С

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

Подчинение справочников в 1С — это механизм, который связывает элементы одного справочника с конкретными элементами другого. Классический пример — справочник «Договоры контрагентов», подчинённый справочнику «Контрагенты»: каждый договор существует только внутри конкретного контрагента, и список договоров всегда показывается в разрезе выбранного контрагента.

Механизм реализуется через понятие «владелец»: у подчинённого справочника указывается один или несколько справочников-владельцев, а у каждого элемента подчинённого справочника заполняется реквизит «Владелец». Без заполненного владельца элемент подчинённого справочника, по сути, теряет смысл — он не привязан ни к одному объекту учёта.

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

Когда подчинение справочника оправдано, а когда — нет

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

Не стоит подчинять справочники, если между ними связь «многие-ко-многим» или если подчинённый объект может существовать самостоятельно. Например, склады и номенклатура подчинять друг другу нельзя: один товар хранится на разных складах, на одном складе лежат разные товары. Для таких связей используются регистры сведений или табличные части.

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

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

Элемент не имеет смысла без родительского объекта (договор, счёт, контактное лицо)Используйте подчинение справочника справочнику-владельцу
Связь «многие-ко-многим» (товары и склады, сотрудники и проекты)Используйте регистр сведений или табличную часть, подчинение не подходит
Нужна просто ссылка на другой объект без жёсткой привязки (производитель у товара)Добавьте обычный реквизит со ссылкой на справочник, подчинение не требуется
Нужна древовидная структура внутри одного справочникаВключите иерархию в свойствах справочника, а не подчинение

Пошаговая настройка подчинения в конфигураторе

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

Последовательность действий одинакова как для самописных конфигураций, так и для доработки типовых (в типовых учитывайте, что изменения объектов на поддержке потребуют снятия с поддержки или включения режима «с сохранением поддержки»).

Порядок действий
  1. 1
    Откройте конфигуратор и найдите в дереве метаданных справочник, который должен стать подчинённым (например, «ДоговорыКонтрагентов»).
  2. 2
    Откройте палитру свойств справочника (правый клик — «Свойства»).
  3. 3
    Найдите свойство «Владельцы» и нажмите кнопку выбора — откроется список справочников конфигурации.
  4. 4
    Отметьте галочкой справочник-владелец (например, «Контрагенты»). Владельцев можно указать несколько.
  5. 5
    Установите свойство «Использование подчинения»: «Элементам» — если владелец назначается каждому элементу, «Группам и элементам» — если подчиняются и группы.
  6. 6
    Сохраните конфигурацию и выполните обновление конфигурации базы данных (F7), подтвердив реструктуризацию.
  7. 7
    Откройте 1С в режиме предприятия и проверьте: в форме подчинённого справочника появился реквизит «Владелец», а список фильтруется по выбранному владельцу.

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

Настройка свойств: использование подчинения и несколько владельцев

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

Один справочник может иметь несколько владельцев. Например, справочник «Банковские счета» может быть подчинён одновременно «Организациям» и «Контрагентам». В этом случае у элемента будет один реквизит «Владелец» составного типа, и пользователь при создании элемента выберет, к чему именно привязать счёт. Это удобно, но усложняет программную работу: в запросах и коде нужно учитывать составной тип владельца.

Как выглядит подчинение в режиме предприятия

В пользовательском режиме механизм проявляется в двух местах. Во-первых, форма списка подчинённого справочника обычно открывается с отбором по владельцу: из карточки контрагента по кнопке «Перейти» или через команду «Договоры» пользователь видит только договоры этого контрагента. Во-вторых, при создании нового элемента из такой формы владелец подставляется автоматически.

Стандартные формы подчинённых справочников генерируются платформой автоматически и уже содержат поле «Владелец» и панель навигации по владельцу. Если вы разрабатываете собственные формы, убедитесь, что реквизит «Владелец» доступен пользователю и установлен отбор в списке — иначе пользователи будут видеть элементы всех владельцев вперемешку, что сводит на нет смысл подчинения.

Работа с подчинёнными справочниками в коде и запросах

При программной разработке владелец доступен как обычное свойство объекта: НовыйДоговор.Владелец = КонтрагентСсылка;. Записать элемент подчинённого справочника без владельца платформа позволит (если не настроена проверка заполнения), поэтому в коде проверку заполнения владельца стоит выполнять явно — через ПроверитьЗаполнение() или собственную логику в обработчике «ПередЗаписью».

В запросах отбор по владельцу выполняется стандартным условием: ГДЕ Договоры.Владелец = &Контрагент. Для получения всех подчинённых элементов владельца также удобно использовать виртуальные механизмы, но простой запрос по реквизиту «Владелец» — самый прозрачный и быстрый способ. При больших объёмах данных убедитесь, что по реквизиту «Владелец» построен индекс — платформа обычно создаёт его автоматически для системных реквизитов.

bsl
НовыйЭлемент = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
НовыйЭлемент.Владелец = КонтрагентСсылка;
НовыйЭлемент.Наименование = "Договор поставки № 15";
НовыйЭлемент.Записать();

Типичные ошибки при подчинении справочников

На практике одни и те же ошибки встречаются регулярно и приводят либо к потере данных, либо к неработающему интерфейсу. Большинство из них связано с недооценкой последствий реструктуризации и с неправильным выбором механизма связи.

Типичные ошибки
01
Подчинение вместо простой ссылки: если нужна лишь ссылка на другой справочник (например, «Основной контрагент» у товара), подчинение излишне ограничивает структуру и усложняет доработки.
02
Изменение владельцев на заполненной базе без миграции данных: существующие элементы остаются с пустым владельцем и «исчезают» из отфильтрованных списков.
03
Удаление владельца из свойств справочника: при реструктуризации данные о связи теряются безвозвратно.
04
Ожидание автоматического каскадного удаления: удаление элемента-владельца не удаляет подчинённые элементы автоматически — платформа лишь контролирует ссылочную целостность.
05
Использование подчинения для связи «многие-ко-многим»: один элемент не может принадлежать двум владельцам одновременно, для таких задач нужен регистр сведений.

Проверка результата и контрольные точки

После настройки подчинения проверьте механизм на тестовых данных, прежде чем отдавать изменения пользователям. Проверка занимает несколько минут и позволяет отловить ошибки конфигурирования до того, как они затронут реальные данные.

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

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

Форма элемента подчинённого справочника
Норма

Поле «Владелец» видно, обязательно для заполнения, выбор ограничен справочником-владельцем

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

Поля «Владелец» нет или оно доступно только в «Ещё» без контроля заполнения

Список подчинённого справочника из карточки владельца
Норма

Показываются только элементы текущего владельца, при создании владелец подставляется автоматически

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

Видны элементы всех владельцев, при создании владелец пустой

Существующие данные после реструктуризации
Норма

У всех элементов владелец заполнен (проверить запросом с условием Владелец = НЕОПРЕДЕЛЕНО или пустая ссылка)

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

Есть элементы с пустым владельцем — они не отображаются в отфильтрованных списках

Ссылочная целостность
Норма

При попытке удалить владельца с подчинёнными элементами платформа выдаёт предупреждение о ссылках

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

Владелец удаляется, а подчинённые элементы остаются с битой ссылкой

FAQ

Можно ли сделать один справочник подчинённым сразу нескольким владельцам?

Да. В свойстве «Владельцы» можно отметить несколько справочников. Реквизит «Владелец» станет составного типа, и при создании элемента пользователь выберет, к какому именно владельцу он относится. Учтите, что один элемент всё равно привязывается только к одному владельцу — составной тип лишь расширяет перечень возможных типов владельца.

Что произойдёт с данными, если убрать подчинение у заполненного справочника?

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

Чем подчинение отличается от иерархии справочника?

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

Удалятся ли подчинённые элементы при удалении владельца?

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

Можно ли открыть список подчинённого справочника без отбора по владельцу?

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

Как массово заполнить владельца у существующих элементов после включения подчинения?

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

Итог

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

Подчинение справочника настраивается в конфигураторе через свойство «Владельцы» и создаёт у элементов обязательный реквизит «Владелец». Применяйте его только для объектов, которые не существуют без родителя; для связей «многие-ко-многим» используйте регистры сведений. Любое изменение состава владельцев на базе с данными выполняйте после резервного копирования и с миграцией существующих записей.