Разработка и Конфигурация · 11 мин
Определяемый тип в 1С 8.3: что это и как с ним работать
Что такое определяемый тип в 1С 8.3, зачем он нужен, как создать и настроить состав типов. Примеры использования, типичные ошибки и ответы на вопросы.
Определяемый тип — это объект метаданных в конфигурации 1С 8.3, который задаёт состав типов, допустимых для реквизитов, ресурсов, измерений и параметров. Он находится в ветке «Общие» дерева конфигурации и позволяет централизованно описать, какие значения может принимать то или иное поле, не привязываясь жёстко к конкретному справочнику или документу.
Главная ценность определяемого типа — управляемость расширений. Если реквизит типовой конфигурации ссылается на определяемый тип, разработчик может добавить в состав этого типа свой справочник или документ через расширение конфигурации, не изменяя исходный код поставщика. После обновления типовой конфигурации такие доработки не теряются, что существенно снижает стоимость сопровождения.
Механизм активно используется в типовых решениях: «1С:Библиотека стандартных подсистем» содержит десятки определяемых типов вроде «ВладелецПрисоединенныхФайлов» или «ОбъектСНаборомДополнительныхРеквизитов». Понимание того, как они устроены, необходимо любому разработчику, который дорабатывает типовые конфигурации или проектирует собственные.
Что такое определяемый тип и где он находится
В дереве конфигурации определяемые типы расположены по пути: Общие → Определяемые типы. Каждый элемент этого раздела — самостоятельный объект метаданных с именем, синонимом и главным свойством «Тип», в котором перечисляется состав допустимых типов данных.
Состав может включать примитивные типы (Строка, Число, Дата, Булево), ссылки на справочники, документы, перечисления, планы видов характеристик и другие объекты. Один определяемый тип может объединять несколько ссылочных типов — например, «ДокументРеализацияТоваровУслуг» и «ДокументВозвратТоваровПокупателю» одновременно.
Важно понимать: определяемый тип не хранит данные и не имеет таблиц в базе. Это чисто описательный объект — «контракт», который говорит платформе, какие значения допустимы в полях, использующих этот тип.
Зачем нужен определяемый тип: основные сценарии
Первый и главный сценарий — поддержка расширений. Типовая конфигурация объявляет реквизит «Владелец» определяемого типа, а внедренец добавляет в состав этого типа свой справочник «Проекты». После этого механизмы типовой конфигурации (например, присоединённые файлы или дополнительные реквизиты) начинают работать и с новым объектом.
Второй сценарий — единообразие внутри собственной конфигурации. Если десяток реквизитов в разных документах должны ссылаться на один и тот же набор справочников, проще один раз описать определяемый тип и ссылаться на него, чем вручную поддерживать состав типов в каждом реквизите. При добавлении нового объекта правка делается в одном месте.
Третий сценарий — интеграция с библиотекой стандартных подсистем (БСП). Многие подсистемы БСП работают только с объектами, входящими в состав соответствующих определяемых типов. Хотите подключить свой документ к механизму версионирования или контактной информации — добавьте его тип в нужный определяемый тип.
Если один и тот же набор типов повторяется в трёх и более местах — вынесите его в определяемый тип
Реквизиты, к которым подключаются доработки, должны ссылаться на определяемые типы
Подсистемы БСП требуют включения объектов в свои определяемые типы
Как создать определяемый тип: пошаговая инструкция
Создание выполняется в конфигураторе и занимает несколько минут. Перед началом убедитесь, что конфигурация открыта на изменение, а для работы с типовой конфигурацией на поддержке — что вы понимаете, какие правки лучше делать через расширение.
- 1Откройте конфигуратор и разверните ветку «Общие» → «Определяемые типы»
- 2Нажмите «Добавить» и задайте имя, например «ВладелецДополнительныхСвойств»
- 3В свойстве «Тип» нажмите кнопку выбора и отметьте нужные типы: примитивные или ссылочные
- 4Сохраните конфигурацию и обновите конфигурацию базы данных
- 5В реквизите документа или справочника в поле «Тип» выберите созданный определяемый тип
- 6Проверьте в режиме предприятия, что поле принимает значения всех перечисленных типов
При выборе состава типов учитывайте ограничение: если определяемый тип содержит несколько ссылочных типов, поле ввода в интерфейсе будет предлагать выбор объекта из списка. Это нормально для редко редактируемых полей, но для массового ввода лучше ограничивать состав одним-двумя типами.
После обновления конфигурации базы данных проверьте, не появились ли ошибки реструктуризации. Сам определяемый тип таблиц не создаёт, но изменение типа существующего реквизита, заполненного данными, может привести к потере значений, если старый тип не входит в новый состав.
Как использовать определяемый тип в коде
Встроенный язык 1С предоставляет методы для работы с определяемыми типами. Чаще всего нужно проверить, входит ли конкретное значение в состав типа, или получить само описание типов программно.
ОписаниеТипа = Метаданные.ОпределяемыеТипы.ВладелецПрисоединенныхФайлов.Тип;
Если ОписаниеТипа.СодержитТип(ТипЗнч(ОбъектСсылка)) Тогда
// Объект входит в состав определяемого типа
КонецЕсли;Типичные операции: получение описания типа через метаданные, проверка вхождения методом СодержитТип(), перебор всех типов набора методом Типы(). Эти приёмы используются в универсальных процедурах, которые должны работать с любым объектом из состава определяемого типа.
При программной проверке помните о примитивных типах: если в составе есть «Строка», то ТипЗнч() для строкового значения вернёт «Строка», и проверка сработает корректно. А вот для необъявленных в составе типов проверка вернёт Ложь — используйте это для защиты универсальных алгоритмов от неподдерживаемых данных.
Определяемый тип и расширения конфигурации
Ключевая особенность механизма — расширяемость. В расширении конфигурации можно заимствовать определяемый тип основной конфигурации и добавить в его состав собственные объекты расширения. Исходный состав при этом не изменяется — платформа объединяет оба набора при работе.
Порядок действий: в расширении добавьте заимствованный определяемый тип, откройте его свойство «Тип» и отметьте объекты расширения, которые должны войти в состав. После обновления все реквизиты типовой конфигурации, использующие этот тип, начнут принимать ссылки на ваши объекты.
Такой подход — рекомендуемый способ подключения собственных документов и справочников к подсистемам БСП: присоединённые файлы, дополнительные реквизиты и сведения, версионирование, запрет редактирования. Конфигурация остаётся на полной поддержке, обновления устанавливаются без конфликтов.
Определяемый тип против составного типа реквизита: что выбрать
Альтернатива определяемому типу — прямое указание составного типа в свойствах каждого реквизита. Оба подхода дают поле, принимающее несколько типов значений, но различаются управляемостью.
Сравнение вариантов
Подходит, когда состав типов используется в нескольких местах или должен расширяться через расширение. Единая точка изменения, поддержка БСП
Подходит для разового локального случая, когда набор типов уникален и расширение не планируется. Меньше объектов метаданных, но правки в каждом реквизите отдельно
Практическое правило: если один и тот же состав типов встречается два и более раз, или конфигурация будет дорабатываться расширениями — выбирайте определяемый тип. Для единичного поля с уникальным набором типов достаточно составного типа реквизита.
Типичные ошибки при работе с определяемыми типами
Отдельно стоит упомянуть запросы. Обращение к реквизиту определяемого типа «через точку» в запросе заставляет платформу строить соединения со всеми таблицами состава. Если состав широкий, запрос может стать заметно медленнее. В таких случаях используйте ВЫРАЗИТЬ(...) для явного приведения типа — это и ускорит запрос, и сделает намерение понятнее.
Как проверить результат настройки
Финальная проверка — сценарная: создайте в режиме предприятия объект каждого типа из состава, заполните реквизит, сохраните и перечитайте. Если все значения сохраняются и корректно отображаются, настройка выполнена правильно.
Что важно запомнить
Определяемый тип — централизованное описание набора типов в ветке «Общие». Его создают, когда один состав типов нужен в нескольких местах или должен расширяться без изменения типовой конфигурации. Через расширение можно только добавлять типы. Перед сменой типа заполненного реквизита делайте резервную копию.
Частые вопросы
Чем определяемый тип отличается от составного типа реквизита?
Составной тип задаётся индивидуально в свойствах каждого реквизита, а определяемый тип — один раз как отдельный объект метаданных, на который ссылаются реквизиты. Определяемый тип можно расширять через расширение конфигурации, составной тип реквизита — нет.
Можно ли изменить определяемый тип типовой конфигурации без снятия с поддержки?
Да, через расширение конфигурации. Заимствуйте определяемый тип в расширение и добавьте в его состав свои объекты. Удалить типы основной конфигурации таким способом нельзя — только добавить.
Почему после добавления типа в определяемый тип поле его не видит?
Чаще всего не обновлена конфигурация базы данных: изменения в конфигураторе не применяются к рабочей базе автоматически. Выполните «Обновить конфигурацию базы данных» (F7) и проверьте снова.
Влияет ли определяемый тип на производительность?
Сам по себе — нет, но широкий состав типов влияет на запросы: обращение к реквизиту «через точку» порождает соединения со всеми таблицами состава. Используйте ВЫРАЗИТЬ() для приведения типа и не включайте лишние объекты в состав.
Можно ли использовать определяемый тип в параметрах запроса и СКД?
Да. Описание типа можно получить через Метаданные.ОпределяемыеТипы.ИмяТипа.Тип и передать в параметр или использовать для проверки значений. В СКД тип поля определяется источником данных, но проверки в коде работают стандартно.
Что будет со старыми данными при смене типа реквизита на определяемый?
Если старый тип реквизита входит в состав нового определяемого типа — данные сохранятся. Если не входит — значения будут очищены при реструктуризации. Перед обновлением сверьте состав типов и сделайте резервную копию базы.