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

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

Определяемый тип в 1С: что это такое и как его использовать

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

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

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

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

Что такое определяемый тип и где он находится в конфигураторе

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

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

В типовых конфигурациях вы встретите десятки таких объектов: например, типы вроде «ВладелецДоговора», «ОбъектРасчетов», «АналитикаВзаиморасчетов» (названия зависят от конфигурации). Их состав нередко отличается между решениями, потому что каждый прикладной механизм определяет собственный набор участников.

Зачем нужны определяемые типы: практические задачи

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

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

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

РасположениеВетка «Общие» → «Определяемые типы»

Откройте дерево конфигурации и проверьте наличие ветки

Тип реквизитаВ свойствах указано имя, а не конкретный тип

Откройте свойства реквизита и посмотрите поле «Тип»

Поведение в формеПоле предлагает выбор из нескольких видов объектов

Нажмите кнопку выбора в поле и посмотрите список типов

Как создать определяемый тип: пошаговый порядок

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

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

Создание определяемого типа
  1. 1
    Откройте конфигуратор и разверните ветку «Общие» → «Определяемые типы»
  2. 2
    Добавьте новый элемент и задайте понятное имя (например, «ВладелецНоменклатуры»)
  3. 3
    В свойстве «Тип» отметьте нужные типы: примитивные и/или ссылки на объекты
  4. 4
    Для строк и чисел при необходимости задайте длину и точность
  5. 5
    Сохраните конфигурацию и укажите новый тип в нужных реквизитах
  6. 6
    Обновите конфигурацию базы данных и проверьте выбор значений в форме

Выбор состава типов

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

Как использовать определяемый тип в коде и запросах

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

В запросах составные поля требуют внимательности. Соединение по составному полю с таблицей конкретного объекта корректно работает, но обращение к реквизиту через точку от составного поля неоднозначно: платформа выполнит неявное соединение со всеми таблицами состава, что может замедлить запрос. Рекомендуется явно приводить тип через ВЫРАЗИТЬ(... КАК ...) перед обращением к реквизитам.

bsl
// Проверка значения составного поля
Если ТипЗнч(Документ.Контрагент) = Тип("СправочникСсылка.Контрагенты") Тогда
    // логика для контрагента
КонецЕсли;

// Состав определяемого типа программно
ОписаниеТипа = Метаданные.ОпределяемыеТипы.ВладелецДоговора.Тип;
Для Каждого ТекТип Из ОписаниеТипа.Типы() Цикл
    Сообщить(ТекТип);
КонецЦикла;

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

Определяемый тип против составного типа и характеристик

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

Что выбрать для задачи

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

Один набор типов используется во многих объектах и должен меняться централизованно; требуется поддержка расширений

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

Набор типов нужен в одном-двух местах и не будет повторяться; централизованное управление не требуется

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

Пользователи сами создают произвольные аналитики и свойства, состав заранее неизвестен

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

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

Самая частая ошибка — добавление нового типа в определяемый тип без анализа прикладной логики. Документы и регистры начнут принимать новый вид значений, но обработчики проведения, заполнения и проверки могут быть к нему не готовы. Перед расширением состава найдите все места использования (через поиск ссылок на определяемый тип) и проверьте, как код обрабатывает каждый возможный тип.

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

Типичные ошибки
01
Добавили тип в состав, но не обновили обработчики проведения — документы с новым типом проводятся с ошибками или молча пропускают логику
02
Обращение к реквизиту составного поля через точку в запросе без ВЫРАЗИТЬ — резкое падение производительности
03
Изменение типа заполненного реквизита без проверки данных — при реструктуризации возможны потери несовместимых значений
04
Дублирование: создали новый определяемый тип, хотя подходящий уже есть в БСП или типовой подсистеме

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

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

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

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

Поле в форме
Норма

Предлагает выбор всех видов объектов из состава типа

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

Часть типов недоступна или поле не даёт выбрать значение

Проведение документа
Норма

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

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

Ошибки при проведении с отдельными типами

Запросы и отчёты
Норма

Отчёты выводят данные по всем типам без дублей и потерь строк

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

Строки пропадают или задваиваются при соединениях

Итог

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

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

Частые вопросы об определяемых типах

Чем определяемый тип отличается от обычного составного типа реквизита?

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

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

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

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

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

Что произойдёт с данными, если убрать тип из состава определяемого типа?

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

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

Обращение «через точку» к реквизиту составного поля заставляет платформу выполнять соединение со всеми таблицами, входящими в состав типа. Чтобы этого избежать, сначала приведите поле к конкретному типу оператором ВЫРАЗИТЬ(... КАК Справочник.Имя), а затем обращайтесь к его реквизитам — соединение будет только с одной таблицей.

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

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