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