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