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

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

Типообразующие объекты в 1С: что это такое и как они работают

Разбираем, что такое типообразующие объекты в 1С, какие объекты конфигурации образуют типы, как это влияет на разработку, реквизиты и обмен данными.

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

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

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

Какие объекты конфигурации являются типообразующими

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

  • Справочники — порождают типы СправочникСсылка, СправочникОбъект, СправочникВыборка, СправочникСписок, СправочникМенеджер.
  • Документы — ДокументСсылка, ДокументОбъект, ДокументВыборка, ДокументСписок, ДокументМенеджер.
  • Планы видов характеристик — ПланВидовХарактеристикСсылка и связанные типы; ключевой объект для механизма дополнительных свойств.
  • Планы счетов — ПланСчетовСсылка и др.
  • Планы видов расчёта — ПланВидовРасчетаСсылка и др.
  • Планы обмена — ПланОбменаСсылка; тип узла используется в механизмах обмена.
  • Задачи — ЗадачаСсылка и связанные типы.
  • Бизнес-процессы — БизнесПроцессСсылка и др.
  • Перечисления — ПеречислениеСсылка; особый случай: значения перечисления задаются в конфигураторе, а не пользователем.

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

Какие типы порождает каждый объект

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

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

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

Где знание о типообразующих объектах применяется на практике

Определяемые типы

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

Здесь работает прямое правило: в состав определяемого типа можно включать только типообразующие объекты и примитивные типы (Строка, Число, Дата, Булево). Регистр или отчёт туда добавить нельзя — у них нет ссылочного типа.

Составные реквизиты

Когда реквизиту назначается составной тип (например, «СправочникСсылка.Контрагенты» или «ДокументСсылка.ЗаказКлиента»), разработчик фактически выбирает из списка типообразующих объектов. Чем шире составной тип, тем больше накладные расходы на хранение и индексацию, поэтому составной тип стоит ограничивать реально используемыми объектами.

Планы видов характеристик

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

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

Типообразующие объекты в обменах и расширениях

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

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

Как проверить, какие типы порождает объект

Есть несколько рабочих способов убедиться, что объект типообразующий, и увидеть порождённые типы:

  1. Откройте свойства реквизита любого объекта и нажмите кнопку выбора типа — в диалоге будут перечислены все доступные типообразующие объекты конфигурации, сгруппированные по видам.
  2. В конфигураторе откройте синтакс-помощник и найдите раздел с именем объекта (например, «Справочники» → конкретный справочник) — там перечислены все порождённые типы: Ссылка, Объект, Выборка, Список, Менеджер.
  3. В коде используйте функцию ТипЗнч() или конструктор ОписаниеТипов со строковым именем типа, например Новый ОписаниеТипов("СправочникСсылка.Номенклатура").
  4. Через метаданные: Метаданные.Справочники, Метаданные.Документы и другие коллекции позволяют программно перебрать все типообразующие объекты и построить список типов.
bsl
МассивТипов = Новый Массив;
Для Каждого Справочник Из Метаданные.Справочники Цикл
    МассивТипов.Добавить(Тип("СправочникСсылка." + Справочник.Имя));
КонецЦикла;

Типичные ошибки при работе с типообразующими объектами

Первая группа ошибок связана с переименованием. При переименовании справочника или документа платформа автоматически исправляет типы в реквизитах метаданных, но строковые литералы в коде — нет. Конструкции вида Тип("СправочникСсылка.СтароеИмя") или запросы с явным именем таблицы после переименования перестают работать. После любого переименования выполняйте глобальный поиск по старому имени.

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

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

Типичные ошибки
01
Переименование объекта без поиска строковых литералов в коде — падают Тип(), запросы и обмены
02
Составной тип «ЛюбаяСсылка» вместо точного перечня — лишняя нагрузка и слабый контроль целостности
03
Попытка добавить регистр или отчёт в определяемый тип — у них нет ссылочного типа
04
Удаление объекта без поиска ссылок — потеря данных в реквизитах, которые на него ссылались
05
Путаница между Ссылка и Объект — ошибки приведения типов в коде

Как выбрать подходящий типообразующий объект для задачи

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

Маршрут решения

Как выбрать действие

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

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

Регистр сведений — это типообразующий объект?

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

Что произойдёт с типами, если удалить справочник из конфигурации?

Порождённые им типы исчезнут, все данные справочника будут удалены, а реквизиты, имевшие составной тип, потеряют этот тип из состава. Если тип был единственным, реквизит останется без типа, и потребуется ручная корректировка. Предварительно выполняйте поиск ссылок и делайте резервную копию.

Можно ли в расширении создать свой типообразующий объект?

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

Чем определяемый тип отличается от типообразующего объекта?

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

Почему перечисление называют типообразующим, если его значения задаёт разработчик?

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

Как программно узнать, к какому виду относится ссылка?

Используйте метаданные объекта: выражение вида Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)) вернёт объект метаданных, по которому видно, справочник это, документ или иной типообразующий объект.

Итог

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

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