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

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

Подчинённые объекты конфигурации 1С:Предприятие

Что такое подчинённые объекты конфигурации 1С:Предприятие: реквизиты, табличные части, формы, макеты. Иерархия объектов, примеры и типичные ошибки разработчиков.

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

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

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

Что такое подчинённый объект и чем он отличается от самостоятельного

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

Ключевые признаки подчинённого объекта: он не имеет собственного пункта в разделе прав роли (права назначаются на родителя), удаляется вместе с владельцем и адресуется полным именем вида Справочник.Номенклатура.Реквизит.Артикул. Платформа хранит его описание внутри структуры родительского объекта, а не как отдельную сущность.

Какие объекты могут быть подчинёнными

Набор подчинённых объектов зависит от типа родителя. Наиболее распространённые виды:

  • Реквизиты — поля объекта, хранящие отдельные значения (артикул, контрагент, сумма). Есть почти у всех прикладных объектов.
  • Табличные части — вложенные таблицы (список товаров в документе, контактная информация контрагента). У табличной части, в свою очередь, есть собственные подчинённые реквизиты.
  • Формы — описания экранных представлений: форма элемента, форма списка, форма выбора.
  • Макеты — шаблоны печатных форм и схемы компоновки данных.
  • Команды — кнопки и пункты меню, формируемые объектом.
  • Движения — у документов: ссылки на регистры, по которым документ делает записи.
  • Предопределённые элементы — у справочников и планов счетов: элементы, заданные на этапе разработки.
  • Измерения, ресурсы, реквизиты — у регистров сведений и накопления.

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

Как устроена иерархия: родитель и владелец

Подчинение бывает многоуровневым. Классический пример: Документ.РеализацияТоваров → ТабличнаяЧасть.Товары → Реквизит.Количество. Здесь табличная часть подчинена документу, а её реквизит подчинён табличной части. Полное имя объекта метаданных строится через всю цепочку владельцев.

Важно не путать подчинение объектов конфигурации с подчинением данных. Справочник может быть подчинён другому справочнику (владелец элементов, например «Единицы измерения» подчинены «Номенклатуре») — но это связь на уровне данных, а подчинённым объектом конфигурации при этом является, например, реквизит «Владелец». Это разные механизмы, и их смешение — типичная ошибка новичков.

Обращение к подчинённым объектам из встроенного языка

В коде к метаданным подчинённых объектов обращаются через коллекцию Метаданные с указанием полного пути. Например, получить реквизит справочника можно так:

Реквизит = Метаданные.Справочники.Номенклатура.Реквизиты.Найти("Артикул");

Если Реквизит <> Неопределено Тогда

Сообщить("Тип реквизита: " + Реквизит.Тип);

КонецЕсли;

Аналогично работают коллекции ТабличныеЧасти, Формы, Макеты, Измерения, Ресурсы. Для табличной части путь удлиняется: Метаданные.Документы.РеализацияТоваров.ТабличныеЧасти.Товары.Реквизиты.

При работе с данными (не метаданными) обращение идёт через точку от объекта: ДокументОбъект.Товары вернёт табличную часть, а СтрокаТовары.Количество — значение реквизита строки. Метод Найти() в коллекциях метаданных безопаснее прямого обращения: при отсутствии объекта он вернёт Неопределено, а не вызовет исключение.

bsl
ТЧ = Метаданные.Документы.РеализацияТоваров.ТабличныеЧасти.Найти("Товары");
Если ТЧ <> Неопределено Тогда
    Для Каждого Реквизит Из ТЧ.Реквизиты Цикл
        Сообщить(Реквизит.Имя);
    КонецЦикла;
КонецЕсли;

Что происходит с подчинёнными объектами при обновлении конфигурации

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

Особое внимание — к переименованию. Для платформы переименование реквизита выглядит как удаление старого и создание нового: данные без специальной обработки будут потеряны. Если нужно переименовать подчинённый объект с сохранением данных, сначала добавьте новый реквизит, перенесите данные обработкой, и только потом удаляйте старый.

Типичные ошибки при работе с подчинёнными объектами

Первая ошибка — обращение к подчинённому объекту по жёстко заданному имени без проверки существования. После обновления типовой конфигурации реквизит может исчезнуть или переименоваться, и код упадёт с ошибкой. Используйте Найти() и проверку на Неопределено.

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

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

Типичные ошибки
01
Прямое обращение к реквизиту метаданных без Найти() — код падает после обновления типовой конфигурации
02
Переименование реквизита с данными — платформа трактует это как удаление, данные теряются
03
Изменение типовой формы вместо создания своей — конфликты при каждом обновлении
04
Смешение подчинения метаданных и подчинения данных — неверная архитектура решения

Как проверить корректность структуры

После добавления или изменения подчинённых объектов выполните проверку конфигурации: меню «Конфигурация → Проверка конфигурации». Платформа покажет ошибки в модулях форм, битые ссылки в макетах и командах. Затем запустите обновление конфигурации базы данных в тестовой копии и просмотрите окно реструктуризации: там перечислены все изменения таблиц, включая колонки подчинённых реквизитов.

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

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

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

Проверка конфигурации в конфигураторе
Норма

Нет ошибок в модулях форм и ссылок на реквизиты

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

Сообщения о ненайденных объектах метаданных

Окно реструктуризации при обновлении
Норма

Только добавление новых колонок и таблиц

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

Удаление или изменение колонок с данными

Открытие формы объекта в режиме Предприятия
Норма

Форма открывается, поля отображаются и сохраняются

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

Ошибка обращения к реквизиту или пустые поля

FAQ

Можно ли создать подчинённый объект без родителя?

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

Чем табличная часть отличается от регистра сведений?

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

Можно ли добавить подчинённый объект через расширение конфигурации?

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

Что произойдёт с данными при удалении табличной части?

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

Как узнать, какие подчинённые объекты есть у конкретного объекта?

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

Назначаются ли права доступа на подчинённые объекты отдельно?

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

Итог

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

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