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