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