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

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

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

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

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

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

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

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

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

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

Важно понимать: определяемый тип не создаёт новый тип данных в строгом смысле. Он лишь группирует существующие. Поэтому проверка «ТипЗнч(Ссылка) = Тип("ОпределяемыйТип...")» невозможна — определяемые типы не имеют представления в менеджере типов на уровне встроенного языка.

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

Главный сценарий — централизованное управление составом типов для смысловых сущностей. Например, в конфигурации есть понятие «Контрагент системы лояльности», которое может быть справочником «Контрагенты», «ФизическиеЛица» или «Партнеры». Этот состав используется в пяти документах, трёх регистрах и двух планах обмена. С определяемым типом добавление нового вида контрагента требует правки одного объекта.

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

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

Один и тот же состав типовПовторяется в 3+ местах

Если одинаковый набор ссылочных типов задан в нескольких реквизитах — кандидат на определяемый тип

Планируется расширение составаСостав будет расти

Если в будущем добавятся новые виды объектов, централизация сэкономит время

Внедрение подсистем БСПТребуется интеграция

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

Разовый составной реквизитИспользуется один раз

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

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

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

Ограничения и особенности работы

Первое ограничение — определяемый тип недоступен как отдельное значение во встроенном языке. Нельзя написать «Тип("ОпределяемыйТип.ВладелецСкидки")» или проверить значение на соответствие определяемому типу штатной функцией. Проверку приходится выполнять через перебор типов состава или через метаданные.

Второе — производительность запросов. Составной тип в поле, по которому строится соединение или отбор, заставляет СУБД работать с несколькими таблицами. Если определяемый тип включает десяток документов и используется в измерении регистра, по которому идут частые выборки, стоит оценить план запроса и при необходимости пересмотреть архитектуру.

Третье — реструктуризация. Добавление типа в состав определяемого типа, используемого в реквизитах с данными, приводит к изменению структуры таблиц. На больших базах обновление может занять заметное время, поэтому такие изменения планируют на регламентное окно.

Типичные ошибки при использовании определяемых типов

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

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

Как проверить результат и выбрать подход

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

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

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

Поле ввода в пользовательском режиме
Норма

Кнопка выбора показывает все виды объектов из состава типа

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

Часть видов отсутствует — проверьте состав типа и права

Обновление конфигурации БД
Норма

Реструктуризация проходит без ошибок и предупреждений о потере данных

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

Предупреждения о сужении типа — есть риск потери значений

Команды подсистем БСП
Норма

Печать, основания, взаимодействия доступны для объектов из типа

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

Команды не появляются — объект не добавлен в нужный определяемый тип

Запросы по составному полю
Норма

Время выполнения приемлемо на рабочем объёме данных

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

Заметная деградация — пересмотрите состав или индексацию

Выбор между определяемым типом и прямым составным типом в реквизите зависит от масштаба переиспользования. Ниже — ориентиры для решения.

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

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

Состав типов нужен в одном реквизите и меняться не планируетсяЗадайте составной тип напрямую в свойствах реквизита
Один и тот же состав используется в трёх и более объектахСоздайте определяемый тип и назначьте его всем реквизитам
Внедряете подсистему БСП или типовой механизмЗаполните определяемые типы, требуемые подсистемой, своими объектами
Тип используется в измерении регистра с интенсивными выборкамиОцените производительность; при проблемах сократите состав или измените схему хранения

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

Итог

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

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

Частые вопросы

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

Напрямую — нет: в языке запросов нет синтаксиса для ссылки на определяемый тип. Однако поле, имеющее этот тип, ведёт себя как обычное составное поле: к нему применимы ВЫРАЗИТЬ, ССЫЛКА и соединения с конкретными таблицами из состава.

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

Составной тип реквизита задаётся локально в свойствах конкретного реквизита. Определяемый тип — отдельный объект метаданных с именем, на который ссылаются многие реквизиты. Изменение определяемого типа меняет состав сразу во всех местах использования.

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

Штатной функции нет. Практический приём — получить описание типа из метаданных (Метаданные.ОпределяемыеТипы.Имя.Тип) и проверить через СодержитТип(ТипЗнч(Значение)).

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

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

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

Помимо состава типа объект должен быть подключён к механизму: для печати БСП нужно указать документ в определяемом типе объектов с командами печати и реализовать процедуру ДобавитьКомандыПечати в модуле менеджера объекта.

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

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