Справочники и Данные · 11 мин
Как подчинить один справочник другому в 1С
Как подчинить справочник в 1С: настройка в конфигураторе, владелец справочника, примеры с номенклатурой и контрагентами, типичные ошибки и проверка результата.
Подчинение справочников в 1С — это механизм, который связывает элементы одного справочника с конкретными элементами другого. Классический пример — справочник «Договоры контрагентов», подчинённый справочнику «Контрагенты»: каждый договор существует только внутри конкретного контрагента, и список договоров всегда показывается в разрезе выбранного контрагента.
Механизм реализуется через понятие «владелец»: у подчинённого справочника указывается один или несколько справочников-владельцев, а у каждого элемента подчинённого справочника заполняется реквизит «Владелец». Без заполненного владельца элемент подчинённого справочника, по сути, теряет смысл — он не привязан ни к одному объекту учёта.
Важно понимать разницу между подчинением и иерархией. Иерархия — это структура внутри одного справочника (группы и элементы, как папки в файловой системе). Подчинение — это связь между двумя разными справочниками. Эти механизмы независимы и могут комбинироваться: подчинённый справочник может быть одновременно иерархическим.
Когда подчинение справочника оправдано, а когда — нет
Подчинение стоит применять, когда элементы одного справочника не имеют самостоятельного смысла без элементов другого. Договор без контрагента, банковский счёт без организации, контактное лицо без контрагента — типичные случаи, где подчинение является правильным архитектурным решением. Такая связь упрощает интерфейс: пользователь сначала выбирает владельца, а затем видит только относящиеся к нему подчинённые элементы.
Не стоит подчинять справочники, если между ними связь «многие-ко-многим» или если подчинённый объект может существовать самостоятельно. Например, склады и номенклатура подчинять друг другу нельзя: один товар хранится на разных складах, на одном складе лежат разные товары. Для таких связей используются регистры сведений или табличные части.
Как выбрать действие
Пошаговая настройка подчинения в конфигураторе
Вся настройка выполняется в конфигураторе и требует прав на изменение конфигурации. Перед началом работ убедитесь, что у вас есть актуальная резервная копия базы данных — изменение структуры метаданных при обновлении выполняет реструктуризацию таблиц, и на больших базах это может занять значительное время.
Последовательность действий одинакова как для самописных конфигураций, так и для доработки типовых (в типовых учитывайте, что изменения объектов на поддержке потребуют снятия с поддержки или включения режима «с сохранением поддержки»).
- 1Откройте конфигуратор и найдите в дереве метаданных справочник, который должен стать подчинённым (например, «ДоговорыКонтрагентов»).
- 2Откройте палитру свойств справочника (правый клик — «Свойства»).
- 3Найдите свойство «Владельцы» и нажмите кнопку выбора — откроется список справочников конфигурации.
- 4Отметьте галочкой справочник-владелец (например, «Контрагенты»). Владельцев можно указать несколько.
- 5Установите свойство «Использование подчинения»: «Элементам» — если владелец назначается каждому элементу, «Группам и элементам» — если подчиняются и группы.
- 6Сохраните конфигурацию и выполните обновление конфигурации базы данных (F7), подтвердив реструктуризацию.
- 7Откройте 1С в режиме предприятия и проверьте: в форме подчинённого справочника появился реквизит «Владелец», а список фильтруется по выбранному владельцу.
После обновления конфигурации у каждого элемента подчинённого справочника появляется системный реквизит «Владелец». Если в базе уже были данные, у существующих элементов владелец окажется пустым — такие элементы нужно заполнить вручную или обработкой, иначе они будут «висеть» без привязки и могут не отображаться в отфильтрованных списках.
Настройка свойств: использование подчинения и несколько владельцев
Свойство «Использование подчинения» определяет, какие объекты справочника обязаны иметь владельца. Вариант «Элементам» — самый распространённый: владелец назначается каждому элементу, а группы служат только для визуальной группировки внутри владельца. Вариант «Группам и элементам» нужен редко — например, когда структура групп тоже должна различаться для разных владельцев.
Один справочник может иметь несколько владельцев. Например, справочник «Банковские счета» может быть подчинён одновременно «Организациям» и «Контрагентам». В этом случае у элемента будет один реквизит «Владелец» составного типа, и пользователь при создании элемента выберет, к чему именно привязать счёт. Это удобно, но усложняет программную работу: в запросах и коде нужно учитывать составной тип владельца.
Как выглядит подчинение в режиме предприятия
В пользовательском режиме механизм проявляется в двух местах. Во-первых, форма списка подчинённого справочника обычно открывается с отбором по владельцу: из карточки контрагента по кнопке «Перейти» или через команду «Договоры» пользователь видит только договоры этого контрагента. Во-вторых, при создании нового элемента из такой формы владелец подставляется автоматически.
Стандартные формы подчинённых справочников генерируются платформой автоматически и уже содержат поле «Владелец» и панель навигации по владельцу. Если вы разрабатываете собственные формы, убедитесь, что реквизит «Владелец» доступен пользователю и установлен отбор в списке — иначе пользователи будут видеть элементы всех владельцев вперемешку, что сводит на нет смысл подчинения.
Работа с подчинёнными справочниками в коде и запросах
При программной разработке владелец доступен как обычное свойство объекта: НовыйДоговор.Владелец = КонтрагентСсылка;. Записать элемент подчинённого справочника без владельца платформа позволит (если не настроена проверка заполнения), поэтому в коде проверку заполнения владельца стоит выполнять явно — через ПроверитьЗаполнение() или собственную логику в обработчике «ПередЗаписью».
В запросах отбор по владельцу выполняется стандартным условием: ГДЕ Договоры.Владелец = &Контрагент. Для получения всех подчинённых элементов владельца также удобно использовать виртуальные механизмы, но простой запрос по реквизиту «Владелец» — самый прозрачный и быстрый способ. При больших объёмах данных убедитесь, что по реквизиту «Владелец» построен индекс — платформа обычно создаёт его автоматически для системных реквизитов.
НовыйЭлемент = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
НовыйЭлемент.Владелец = КонтрагентСсылка;
НовыйЭлемент.Наименование = "Договор поставки № 15";
НовыйЭлемент.Записать();Типичные ошибки при подчинении справочников
На практике одни и те же ошибки встречаются регулярно и приводят либо к потере данных, либо к неработающему интерфейсу. Большинство из них связано с недооценкой последствий реструктуризации и с неправильным выбором механизма связи.
Проверка результата и контрольные точки
После настройки подчинения проверьте механизм на тестовых данных, прежде чем отдавать изменения пользователям. Проверка занимает несколько минут и позволяет отловить ошибки конфигурирования до того, как они затронут реальные данные.
Как проверить результат
Поле «Владелец» видно, обязательно для заполнения, выбор ограничен справочником-владельцем
Поля «Владелец» нет или оно доступно только в «Ещё» без контроля заполнения
Показываются только элементы текущего владельца, при создании владелец подставляется автоматически
Видны элементы всех владельцев, при создании владелец пустой
У всех элементов владелец заполнен (проверить запросом с условием Владелец = НЕОПРЕДЕЛЕНО или пустая ссылка)
Есть элементы с пустым владельцем — они не отображаются в отфильтрованных списках
При попытке удалить владельца с подчинёнными элементами платформа выдаёт предупреждение о ссылках
Владелец удаляется, а подчинённые элементы остаются с битой ссылкой
FAQ
Можно ли сделать один справочник подчинённым сразу нескольким владельцам?
Да. В свойстве «Владельцы» можно отметить несколько справочников. Реквизит «Владелец» станет составного типа, и при создании элемента пользователь выберет, к какому именно владельцу он относится. Учтите, что один элемент всё равно привязывается только к одному владельцу — составной тип лишь расширяет перечень возможных типов владельца.
Что произойдёт с данными, если убрать подчинение у заполненного справочника?
При обновлении конфигурации платформа выполнит реструктуризацию и удалит реквизит «Владелец» вместе со всеми хранящимися в нём ссылками. Восстановить связь после этого будет невозможно, если нет резервной копии. Поэтому перед отказом от подчинения при необходимости сохраните данные о связях — например, перенесите их в обычный реквизит или регистр сведений.
Чем подчинение отличается от иерархии справочника?
Иерархия — это вложенность внутри одного справочника: элементы и группы образуют дерево, как папки на диске. Подчинение — это связь между двумя разными справочниками через реквизит «Владелец». Справочник может быть одновременно иерархическим и подчинённым: например, договоры контрагентов могут дополнительно раскладываться по группам внутри каждого контрагента.
Удалятся ли подчинённые элементы при удалении владельца?
Нет, автоматического каскадного удаления платформа не выполняет. При удалении владельца механизм контроля ссылочной целостности покажет, что на объект есть ссылки из подчинённого справочника, и не даст удалить его сразу (в режиме пометки на удаление с контролем ссылок). Подчинённые элементы нужно удалять или перепривязывать отдельно — вручную или обработкой.
Можно ли открыть список подчинённого справочника без отбора по владельцу?
Да, отбор по владельцу — это настройка формы списка, а не жёсткое ограничение платформы. Если открыть общую форму списка подчинённого справочника без параметров отбора, будут видны элементы всех владельцев. Чтобы пользователи не путались, в типовых решениях доступ к подчинённым справочникам обычно ведут именно через карточку владельца.
Как массово заполнить владельца у существующих элементов после включения подчинения?
Проще всего написать небольшую обработку: запросом выбрать элементы с пустым владельцем и в цикле присвоить нужное значение с последующей записью. Если связь раньше хранилась в каком-либо реквизите (например, в обычной ссылке на контрагента), источником данных для заполнения послужит именно этот реквизит. Перед массовой записью обязательно протестируйте обработку на копии базы.
Что важно запомнить
Подчинение справочника настраивается в конфигураторе через свойство «Владельцы» и создаёт у элементов обязательный реквизит «Владелец». Применяйте его только для объектов, которые не существуют без родителя; для связей «многие-ко-многим» используйте регистры сведений. Любое изменение состава владельцев на базе с данными выполняйте после резервного копирования и с миграцией существующих записей.