Определяемые типы в платформе 1С:Предприятие 8.3 — это мощный механизм, который позволяет разработчику создать «псевдоним» для составного типа данных и использовать его в различных местах конфигурации. На первый взгляд, это кажется идеальным решением: мы один раз описываем набор объектов (например, «Документы со статусами») и используем его в регистрах, реквизитах и коде. Однако за этим удобством скрываются серьезные технические нюансы. В этой статье мы подробно разберем по шагам, с какими «граблями» может столкнуться программист 1С при работе с этим объектом метаданных.
Проанализируем природу этого объекта. По сути, определяемый тип является синонимом (алиасом) для составного типа данных. Платформа не создает под него отдельную сущность в логике СУБД, отличную от обычного составного реквизита. Главное отличие заключается в централизации: если вы измените состав определяемого типа, изменения автоматически применятся ко всем реквизитам, которые на него ссылаются.
Рассмотрим пример. Если у вас есть регистр сведений СтатусыДокументов, где измерение Документ имеет определяемый тип ДокументыОборот, то добавление нового документа в этот тип автоматически расширит тип измерения в регистре. Это избавляет от необходимости вручную править десятки объектов метаданных.
Самая большая проблема, которую мы должны обсудить, — это риск безвозвратной потери данных. Выясним причину, почему это происходит при реорганизации информации. Когда вы исключаете какой-либо объект (например, Документ.РеализацияТоваровУслуг) из состава определяемого типа, платформа при обновлении конфигурации базы данных воспринимает это как команду на очистку значений этого типа в соответствующих полях.
Важные моменты:
Посмотрим на ситуацию с точки зрения СУБД. Поскольку определяемый тип превращается в составной тип на уровне SQL-таблицы, он наследует все проблемы «широких таблиц».
Проанализируем, как это влияет на производительность SQL:
ВЫБРАТЬ * становится крайне тяжелой операцией.Число или Строка, платформа возьмет максимально возможную длину. Если в одном месте вы планировали строку длиной 10 символов, но в составе типа есть строка неограниченной длины, то все реквизиты станут неограниченными, что может сломать индексацию.Рассмотрим практическое неудобство при разработке. Стандартный механизм «Поиск ссылок на объект» в конфигураторе работает с определяемыми типами нелинейно. Если вы ищете, где используется конкретный документ, поиск покажет вам определяемый тип. Однако, чтобы понять, в каких регистрах или формах используется сам этот тип, вам придется делать второй поиск уже по самому определяемому типу.
Это усложняет анализ влияния изменений. Окно первого поиска закроется, и вам придется держать в голове или записывать связи объектов. Профессиональные инструменты разработки (например, ИР или EDT) частично решают эту проблему, но в стандартном конфигураторе это остается серьезным затруднением при контроле структуры данных.
Работа с расширениями — это зона повышенного внимания. Разберем основные риски при использовании расширений:
Выясним, как правильно работать с этими типами в коде. Часто возникает задача создать программно описание типов на основе определяемого типа. Рассмотрим правильный и неправильный подходы.
Неправильно пытаться создать описание типа через строковое имя, так как оно может измениться или не распознаться платформой напрямую. Правильный способ — обращение через метаданные:
// Получаем описание типов на основании определяемого типа "МойТип"
Описание = Метаданные.ОпределяемыеТипы.МойТип.Тип;
// Пример использования при создании колонки таблицы значений
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ОбъектХранения", Описание);
Также важно помнить, что вы не можете создать иерархию: нельзя включить один ОпределяемыйТип в состав другого ОпределяемогоТипа. Платформа запрещает вложенность для упрощения структуры метаданных.
Проанализируем, как использование таких типов отражается на пользователях. В системе компоновки данных (СКД) или в обычных формах при выборе значения в поле с определяемым типом пользователю сначала предлагается выбрать сам тип объекта из огромного списка.
Если в ваш определяемый тип входит 50+ видов документов, это превращается в кошмар для пользователя. Поиск нужного типа документа в длинном списке замедляет работу. Чтобы этого избежать, разработчикам приходится программно ограничивать список доступных типов в формах, что частично нивелирует удобство использования самих определяемых типов.
Подводя итог, можно сказать, что определяемый тип — это не волшебная таблетка, а инструмент, требующий дисциплины. Рассмотрим основные правила безопасной работы:
Соблюдая эти правила, мы сможем эффективно использовать гибкость платформы 1С, минимизируя риски для стабильности и производительности системы.