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

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

Как добавить подчиненный справочник в 1С

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

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

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

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

Что такое подчиненный справочник и когда он нужен

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

Типичные ситуации, где подчиненность оправдана: договоры контрагентов, банковские счета организаций, ответственные лица подразделений, единицы измерения номенклатуры, спецификации изделий. Общий признак — объект не имеет самостоятельного смысла вне родителя и почти всегда используется вместе с ним.

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

Подготовка: что проверить перед изменением конфигурации

Перед любыми изменениями структуры метаданных сделайте резервную копию информационной базы. Для файловой базы достаточно скопировать файл 1Cv8.1CD, для клиент-серверной — выполнить выгрузку в dt через конфигуратор (Администрирование → Выгрузить информационную базу) или средствами СУБД.

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

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

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

Основной и самый безопасный сценарий — создание нового объекта. Порядок действий одинаков для большинства конфигураций на платформе 1С:Предприятие 8.3.

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

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

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

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

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

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

Полезно настроить автоматическое заполнение владельца при создании элемента из формы родителя. Для этого в обработчике создания формы элемента подчиненного справочника проверяйте переданные параметры и подставляйте владельца:

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если Параметры.Свойство("Владелец") Тогда

Объект.Владелец = Параметры.Владелец;

КонецЕсли;

КонецПроцедуры

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

Подчинение уже существующего справочника

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

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

Поэтому процедура выполняется в три этапа: сначала готовится обработка, которая определит владельца каждому элементу (например, из существующего реквизита ссылки на контрагента), затем выполняется реструктуризация, после чего обработка запускается и заполняет владельцев пакетно. Только после проверки заполнения можно открывать работу пользователям.

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

Проверка результата после настройки

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

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

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

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

Запись элемента без владельца
Норма

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

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

Элемент записывается с пустым владельцем

Выбор подчиненного элемента в документе
Норма

Список отфильтрован по выбранному владельцу

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

Показываются элементы всех владельцев

Форма элемента владельца
Норма

Виден список подчиненных элементов, кнопка создания подставляет владельца

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

Список пуст или создается элемент без привязки

Запрос к справочнику
Норма

Реквизит «Владелец» доступен и содержит ссылки

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

Реквизит недоступен или пуст у всех элементов

Альтернативы подчиненности: когда выбрать другой вариант

Подчиненность — не единственный способ связать данные. Если элемент должен существовать независимо и использоваться в разных контекстах, лучше подойдет обычный реквизит типа «СправочникСсылка» без подчинения. Например, склад в номенклатуре чаще делают независимым справочником, потому что один склад используется для множества товаров и документов.

Если нужна многоуровневая структура однородных данных (категории, папки), правильнее использовать иерархический справочник с видом иерархии «Список и группы» или «Элементы». А для хранения периодических или табличных данных по элементу справочника подойдут регистры сведений с измерением-ссылкой.

Сравнение вариантов связи данных

Подчиненный справочник

Элемент не существует без владельца. Подходит для договоров, счетов, контактных лиц. Ограничение — жесткая привязка, перенос между владельцами затруднен

Реквизит-ссылка

Мягкая связь, элемент независим. Подходит для необязательных или меняющихся связей. Отборы настраиваются вручную

Регистр сведений

Для хранения произвольного числа записей по элементу, в том числе с периодичностью. Не является справочником, нет кода и наименования

Иерархический справочник

Дерево внутри одного объекта для однородных данных. Не связывает разные сущности

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

Часто задаваемые вопросы

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

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

Почему в форме списка не видно колонку «Владелец»?

Колонка «Владелец» в динамическом списке не выводится автоматически. Откройте настройку формы списка и добавьте поле «Владелец» в состав колонок, либо пользователь может сделать это сам через «Еще → Изменить форму» в режиме предприятия, если форма это позволяет.

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

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

Что будет с подчиненными элементами при удалении владельца?

По умолчанию платформа не удаляет подчиненные элементы автоматически. Если требуется каскадное удаление, его реализуют программно в обработчике «ПередУдалением» владельца или используют пометку удаления с последующей обработкой «Удаление помеченных объектов», которая контролирует ссылочную целостность.

Можно ли сделать подчиненный справочник без конфигуратора, в режиме предприятия?

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

Почему после обновления конфигурации старые элементы не записываются?

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

Итог

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

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