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

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

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

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

  • 📌 Группировать данные по иерархии (например, "Организации" → "Подразделения" → "Сотрудники")
  • 🔄 Автоматически ограничивать выбор при вводе данных (пользователь увидит только те элементы, которые относятся к выбранному владельцу)
  • 📊 Упрощать аналитику за счет предопределенной структуры (отчеты строятся с учетом подчинения)
  • 🔒 Контролировать права доступа на уровне владельца (можно запретить доступ к подчиненным элементам без прав на родительский)

Классический пример — справочник "Контрагенты" с подчиненным справочником "Договоры". При создании нового договора система автоматически предложит выбрать контрагента-владельца, а в форме списка договоров будет отображаться фильтр по контрагентам. Это избавляет от необходимости вводить одного и того же контрагента многократно для разных договоров.

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

📊 Как часто вы используете подчиненные справочники в 1С?
Постоянно, это основа моей конфигурации
Иногда, для специфических задач
Раньше не использовал, но планирую
Не знаю, что это такое

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

Есть два основных способа создать подчиненный справочник в 1С 8.3:

  1. Через дерево объектов конфигурации — классический метод для опытных разработчиков.
  2. С помощью мастера создания объектов — упрощенный вариант для новичков.

Рассмотрим оба варианта подробно.

Метод 1: Ручное создание через дерево объектов

Откройте конфигуратор и выполните следующие шаги:

  1. В дереве объектов найдите ветку Справочники.
  2. Щелкните правой кнопкой и выберите Добавить.
  3. В поле Имя введите название справочника (например, "ДоговорыКонтрагентов").
  4. На вкладке Подчинение установите флажок Подчиненный справочник и выберите владельца из выпадающего списка (например, "Контрагенты").
  5. Настройте остальные параметры: синоним, комментарий, представление списка.

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

Метод 2: Использование мастера создания

Мастер упрощает процесс для новичков:

  1. В конфигураторе выберите Файл → Новый объект или нажмите Ctrl+N.
  2. В списке типов объектов выберите Справочник.
  3. На втором шаге мастера отметьте Создать подчиненный справочник и укажите владельца.
  4. Заполните основные свойства (имя, синоним) и завершите создание.

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

Определить владельца (главный справочник)

Проверить, не существует ли уже аналогичный подчиненный справочник

Согласовать имя и синоним с командой

Продумать структуру реквизитов

Настроить права доступа (если требуется)-->

Настройка реквизитов и табличных частей

Подчиненный справочник наследует некоторые свойства владельца, но требует индивидуальной настройки реквизитов. Рассмотрим ключевые моменты:

Добавление реквизитов

Реквизиты подчиненного справочника настраиваются так же, как и у обычного, но с учетом связи с владельцем. Например, для справочника "ДоговорыКонтрагентов" логично добавить:

  • 📅 ДатаДоговора (тип Дата)
  • 💰 СуммаДоговора (тип Число с точностью 2)
  • 📄 НомерДоговора (тип Строка)
  • 🔄 ТипДоговора (тип Перечисление со значениями "Поставка", "Оказание услуг" и т.д.)

Для добавления реквизита:

  1. Откройте свойства справочника в конфигураторе.
  2. Перейдите на вкладку Реквизиты.
  3. Нажмите Добавить и заполните свойства нового реквизита.

Табличные части

Если подчиненному справочнику требуется хранить массивы данных (например, список товаров по договору), используйте табличные части. Для их добавления:

  1. В свойствах справочника перейдите на вкладку Табличные части.
  2. Создайте новую табличную часть (например, "ТоварыПоДоговору").
  3. Добавьте колонки: Номенклатура, Количество, Цена.

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

💡

Если подчиненный справочник содержит более 10 табличных частей, рассмотрите возможность вынесения части данных в отдельные регистры сведений для оптимизации производительности.

Работа с подчиненными справочниками в пользовательском режиме

После создания справочника важно правильно настроить интерфейс для пользователей. Рассмотрим ключевые аспекты:

Формы списка и элемента

По умолчанию генерирует стандартные формы, но их часто требуется доработать:

  • 📋 В форме списка добавьте колонку Владелец, чтобы пользователи видели привязку.
  • 🔍 Настройте отбор по владельцу — это ускорит поиск.
  • 📎 В форму элемента добавьте поле Владелец (оно скрыто по умолчанию, но его можно сделать видимым).

Для редактирования формы:

  1. В конфигураторе откройте свойства справочника.
  2. Перейдите на вкладку Формы.
  3. Откройте форму списка или элемента и внесите изменения в дизайнере.

Фильтрация и отборы

Настройте предопределенные отборы для удобства пользователей:

  1. В форме списка справочника добавьте элемент управления Отбор.
  2. Свяжите его с полем Владелец.
  3. Настройте вариант отбора по умолчанию (например, текущий контрагент).

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

Права доступа

Подчиненные справочники наследуют права доступа владельца, но их можно настроить отдельно:

  1. В конфигураторе откройте Администрирование → Пользователи.
  2. Выберите роль и настройте права на чтение/изменение подчиненного справочника.
  3. При необходимости ограничьте доступ к отдельным реквизитам.

Типичная ошибка — забыть настроить права на подчиненный справочник, из-за чего пользователи не видят его в интерфейсе.

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

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

Программная работа с подчиненными справочниками

Для автоматизации операций с подчиненными справочниками используйте встроенный язык . Рассмотрим основные приемы:

Создание нового элемента

Чтобы создать элемент подчиненного справочника из кода:

Владелец = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка");

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

НовыйДоговор.Владелец = Владелец;

НовыйДоговор.Номер = "ДОГ-001/2026";

НовыйДоговор.Дата = ТекущаяДата();

НовыйДоговор.Записать();

Обратите внимание: поле Владелец обязательно для заполнения, иначе возникнет ошибка.

Поиск и выборка элементов

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

Владелец = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка");

Выборка = Справочники.ДоговорыКонтрагентов.Выбрать();

Пока Выборка.Следующий() Цикл

Если Выборка.Владелец = Владелец Тогда

Сообщить(Выборка.Номер);

КонецЕсли;

КонецЦикла;

Более эффективный способ — использовать отбор при выборке:

Выборка = Справочники.ДоговорыКонтрагентов.Выбрать();

Выборка.Отбор.Владелец.Установить(Владелец);

Пока Выборка.Следующий() Цикл

Сообщить(Выборка.Номер);

КонецЦикла;

Удаление элементов

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

Договор = Справочники.ДоговорыКонтрагентов.НайтиПоНомеру("ДОГ-001/2026");

Если Не Договор.Пустая() Тогда

Договор.Удалить();

КонецЕсли;

Для массового удаления используйте обработку или запрос.

💡

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

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

При работе с подчиненными справочниками разработчики часто сталкиваются с типичными проблемами. Рассмотрим самые распространенные:

Ошибка Причина Решение
Не отображается закладка с подчиненным справочником Не настроены права доступа или форма владельца не обновлена Проверьте права роли и обновите конфигурацию базы данных
Ошибка "Не указан владелец" при записи Поле "Владелец" не заполнено в коде или форме Добавьте проверку на заполнение владельца перед записью
Медленная работа при большом количестве записей Отсутствуют индексы или неправильно настроены отборы Добавьте индексы по полю "Владелец" и оптимизируйте запросы
Дублирование данных в подчиненном справочнике Отсутствует контроль уникальности Настройте проверку на уникальность по ключевым реквизитам

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

💡

Если подчиненный справочник используется в документах, настройте проверку заполнения владельца при проведении. Это предотвратит ошибки вида "Ссылка на несуществующий объект".

Практический пример: справочник "Сотрудники" с подчиненным "Личные данные"

Рассмотрим создание структуры для кадрового учета:

  1. Главный справочник: "Сотрудники" (хранит ФИО, должность, подразделение).
  2. Подчиненный справочник: "ЛичныеДанныеСотрудников" (хранит паспортные данные, ИНН, СНИЛС).

Шаги реализации:

  1. Создайте справочник "ЛичныеДанныеСотрудников" как подчиненный "Сотрудникам".
  2. Добавьте реквизиты:
    • 📄 СерияПаспорта (строка, 4 символа)
    • 📄 НомерПаспорта (строка, 6 символов)
    • 📅 ДатаВыдачи (дата)
    • 🏛️ КемВыдан (строка, 250 символов)
  • В форме элемента "Сотрудники" добавьте закладку Личные данные с таблицей подчиненных элементов.
  • Настройте отображение паспортных данных в печатных формах (например, в трудовом договоре).
  • Преимущество такого подхода — разделение конфиденциальных данных. Личная информация хранится отдельно от основных сведений о сотруднике, что упрощает контроль доступа.

    Для автоматизации заполнения можно добавить обработку, которая при создании нового сотрудника сразу открывает форму для ввода личных данных:

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

    Если Новый Тогда

    ОткрытьФорму("Справочник.ЛичныеДанныеСотрудников.ФормаЭлемента", ЭтотОбъект);

    КонецЕсли;

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

    Интеграция с документами и регистрами

    Подчиненные справочники часто используются в связке с документами и регистрами. Рассмотрим типичные сценарии:

    Связь с документами

    Пример: в документе "ПриемНаРаботу" нужно указать сотрудника и его личные данные. Для этого:

    1. В документе добавьте реквизит Сотрудник (тип СправочникСсылка.Сотрудники).
    2. Добавьте реквизит ЛичныеДанные (тип СправочникСсылка.ЛичныеДанныеСотрудников).
    3. Настройте связь между полями:
      Процедура СотрудникПриИзменении(Элемент)
      

      Если ЗначениеЗаполнено(Сотрудник) Тогда

      ЛичныеДанные.Владелец = Сотрудник;

      КонецЕсли;

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

    Это обеспечит автоматическую привязку личных данных к выбранному сотруднику.

    Работа с регистрами сведений

    Если данные из подчиненного справочника нужно использовать в отчетах, целесообразно дублировать их в регистр сведений. Например:

    1. Создайте регистр сведений "ПаспортныеДанныеСотрудников".
    2. Настройте запись данных при изменении подчиненного справочника:
      Процедура ПриЗаписи(Отказ)
      

      Если Изменено() Тогда

      Запись = РегистрыСведений.ПаспортныеДанныеСотрудников.СоздатьМенеджерЗаписи();

      Запись.Сотрудник = Владелец;

      Запись.СерияПаспорта = СерияПаспорта;

      Запись.НомерПаспорта = НомерПаспорта;

      Запись.Записать();

      КонецЕсли;

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

    3. Это ускорит построение отчетов, так как выборка из регистра сведений работает быстрее, чем обход элементов справочника.

      Когда не стоит дублировать данные в регистр сведений?

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

      FAQ: Ответы на частые вопросы

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

      Нет, в стандартной конфигурации 1С 8.3 справочник может быть подчинен только одному владельцу. Если требуется множественная подчиненность, используйте:

      • Дополнительные реквизиты с ссылками на другие справочники
      • Регистры сведений для хранения связей
      • Механизм планов обмена (для распределенных баз)

    Пример реализации через реквизиты:

    // В подчиненном справочнике добавляем реквизиты
    

    ВторичныйВладелец1 (тип СправочникСсылка.Справочник1)

    ВторичныйВладелец2 (тип СправочникСсылка.Справочник2)

    Как перенести данные из обычного справочника в подчиненный?

    Для переноса данных:

    1. Создайте обработку с алгоритмом:
      Выборка = Справочники.СтарыйСправочник.Выбрать();
      

      Пока Выборка.Следующий() Цикл

      НовыйЭлемент = Справочники.НовыйПодчиненныйСправочник.СоздатьЭлемент();

      НовыйЭлемент.Владелец = НайтиВладельца(Выборка.Ссылка); // Ваша функция поиска владельца

      НовыйЭлемент.Наименование = Выборка.Наименование;

      НовыйЭлемент.Записать();

      КонецЦикла;

    2. Перед переносом сделайте резервную копию базы.
    3. Проверьте целостность данных после переноса.

    Для сложных структур используйте Конвертацию данных или Универсальный обмен в формате XML.

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

    Это происходит если:

    • В конфигурации настроена пометка удаления вместо физического удаления
    • На подчиненный справочник есть ссылки в документах или регистрах
    • В модуле объекта переопределен метод удаления

    Чтобы принудительно удалить:

    1. Проверьте настройки удаления в свойствах справочника (вкладка Прочее).
    2. Используйте метод ПометитьУдаление() с рекурсивным обходом:
    3. Процедура УдалитьВладельцаСПодчиненными(Владелец)
      

      Подчиненные = Справочники.ПодчиненныйСправочник.Выбрать();

      Подчиненные.Отбор.Владелец.Установить(Владелец);

      Пока Подчиненные.Следующий() Цикл

      Подчиненные.ТекущийЭлемент.Удалить();

      КонецЦикла;

      Владелец.Удалить();

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

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

    Ограничение настраивается в модуле объекта:

    Процедура ПриЗаписи(Отказ)
    

    Если Новый Тогда

    Количество = Справочники.ПодчиненныйСправочник.Выбрать(Владелец).Количество();

    Если Количество >= 10 Тогда // Ваше ограничение

    Отказ = Истина;

    Сообщить("Превышено максимальное количество подчиненных элементов (10)!");

    КонецЕсли;

    КонецЕсли;

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

    Для гибкого управления лимитами используйте регистр сведений с настройками по типам владельцев.

    Можно ли сделать подчиненный справочник независимым?

    Да, но это требует реструктуризации:

    1. Создайте новый независимый справочник.
    2. Добавьте в него реквизит БывшийВладелец (тип СправочникСсылка).
    3. Перенесите данные обработкой:
      Выборка = Справочники.ПодчиненныйСправочник.Выбрать();
      

      Пока Выборка.Следующий() Цикл

      НовыйЭлемент = Справочники.НовыйСправочник.СоздатьЭлемент();

      НовыйЭлемент.БывшийВладелец = Выборка.Владелец;

      НовыйЭлемент.Наименование = Выборка.Наименование;

      // Перенос других реквизитов

      НовыйЭлемент.Записать();

      КонецЦикла;

    4. Обновите все ссылки в документах и регистрах.
    5. Удалите старый подчиненный справочник после проверки.

    Эта операция требует тестирования, так как может нарушить целостность данных.