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