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

Разработка и Конфигурация · 11 мин

Связь по владельцу в 1С: что это и как настроить

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

Связь по владельцу — один из базовых механизмов платформы 1С, который делает ввод данных быстрее и защищает учёт от логических ошибок. Суть проста: один справочник объявляется подчинённым другому (владельцу), и в полях ввода пользователь видит не весь список подчинённых элементов, а только те, что относятся к выбранному владельцу.

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

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

Что такое владелец и подчинённый справочник

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

Типичные пары «владелец — подчинённый» в стандартных конфигурациях:

  • Контрагенты → Договоры контрагентов;
  • Контрагенты → Контактные лица;
  • Номенклатура → Характеристики номенклатуры;
  • Номенклатура → Единицы измерения;
  • Организации → Банковские счета организаций.

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

Как настроить подчинение справочника в конфигураторе

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

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

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

Настройка связи по владельцу на форме

Само по себе подчинение справочника не фильтрует список выбора в документах. Чтобы фильтрация работала, откройте форму документа в конфигураторе, выделите поле ввода подчинённого справочника (например, «Договор») и в палитре свойств найдите свойство «Связь по владельцу». Установите его в значение, указывающее на реквизит-владелец формы — «Контрагент».

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

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

Порядок настройки
  1. 1
    В конфигураторе откройте свойства подчинённого справочника и на закладке «Владельцы» отметьте справочник-владелец
  2. 2
    Обновите конфигурацию базы данных (F7) и убедитесь, что реструктуризация прошла без ошибок
  3. 3
    Откройте форму документа, выделите поле подчинённого справочника и установите «Связь по владельцу» на поле-владелец
  4. 4
    Проверьте в разделе «Связи параметров выбора», что добавлен отбор по владельцу
  5. 5
    Запустите режим предприятия, выберите контрагента и убедитесь, что список договоров отфильтрован

Как связь по владельцу работает в запросах и коде

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

bsl
ВЫБРАТЬ
	Договоры.Ссылка,
	Договоры.Наименование
ИЗ
	Справочник.ДоговорыКонтрагентов КАК Договоры
ГДЕ
	Договоры.Владелец = &Контрагент
	И НЕ Договоры.ПометкаУдаления

При программном создании элемента подчинённого справочника владельца нужно заполнять явно, иначе запись завершится ошибкой или создаст «сироту» без владельца:

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

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

Типичные ошибки и ограничения

Типичные ошибки
01
Подчинение настроено, но на форме не добавлена связь по владельцу — пользователь видит все элементы всех владельцев и выбирает чужой договор
02
При смене владельца в документе не очищается подчинённое поле — в базе остаются связки «контрагент А + договор контрагента Б»
03
Программное создание элемента без заполнения реквизита «Владелец» — ошибка записи или мусорные элементы
04
Обращение к владельцу через точку внутри цикла — резкое падение производительности на больших объёмах
05
Добавление владельца к справочнику с историческими данными без обработки заполнения — элементы с пустым владельцем ломают отчёты и проведение

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

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

Как проверить, что связь работает правильно

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

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

Список выбора в поле договора
Норма

Показываются только договоры выбранного контрагента

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

Видны договоры всех контрагентов базы

Смена контрагента в документе
Норма

Поле договора очищается или предлагает выбрать заново

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

Остаётся договор прежнего контрагента

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

Владелец подставляется автоматически и запись проходит

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

Ошибка «поле Владелец не заполнено»

Отчёт по договорам
Норма

Каждый договор привязан к своему контрагенту, нет пустых владельцев

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

Есть элементы с пустым или неверным владельцем

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

Когда связь по владельцу не нужна

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

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

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

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

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

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

Связь по владельцу связывает подчинённый справочник с владельцем и фильтрует список выбора на формах. Настраивается в два шага: подчинение в метаданных плюс связь по владельцу (связи параметров выбора) на форме. В коде владелец доступен как стандартный реквизит «Владелец». Главные риски — изменение структуры на базе с данными и неочищенные поля при смене владельца.

Частые вопросы

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

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

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

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

Почему список выбора не фильтруется, хотя подчинение настроено?

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

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

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

Как программно получить все элементы, подчинённые конкретному владельцу?

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

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

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