При разработке в среде 1С:Предприятие мы часто сталкиваемся с ситуациями, когда созданные нами объекты метаданных в расширении ведут себя не так, как в основной конфигурации. Одной из распространенных проблем является невозможность назначить созданный в расширении ОпределяемыйТип (Defined Type) в качестве типа данных для измерения регистра или реквизита объекта. Давайте вместе разберем, почему это происходит, как версия платформы влияет на разработку и какие существуют пути решения этой задачи.
Проанализируем ситуацию: разработчик создает ОпределяемыйТип внутри расширения и пытается использовать его для типизации измерения РегистрСведений, который также находится в этом расширении. Несмотря на то, что объект существует, он просто не появляется в списке доступных типов (Type Picker). Основная причина кроется в эволюции механизма расширений.
Долгое время в платформе «1С:Предприятие» существовало архитектурное ограничение. Рассмотрим ключевые этапы:
ОпределяемыйТип и типизировать им новые реквизиты внутри расширения было технически невозможно.Выясним причину в конкретном случае: если вы используете платформу версии 8.3.14 (как в обсуждаемой теме), то столкнетесь именно с этим системным ограничением. Платформа просто «не видит» тип в качестве потенциального источника данных для реквизитов, так как в ее логике расширение в этой версии не обладает такой возможностью.
Рассмотрим подробнее роль свойства РежимСовместимости. Даже если вы установили самую современную версию платформы (например, 8.3.25), это не гарантирует автоматического появления функционала. Расширение всегда работает в контексте основной конфигурации.
Проанализируем алгоритм проверки:
РежимСовместимости основной конфигурации. Если он установлен в 8.3.14 или ниже, то расширение будет ограничено возможностями именно этой версии.РежимСовместимости самого расширения. Он не может быть выше, чем у основной конфигурации.Таким образом, для того чтобы ОпределяемыйТип стал доступен для выбора, необходимо, чтобы оба этих параметра были установлены в значение не ниже «8.3.20». Если ваша типовая конфигурация (например, старая редакция «Управление торговлей») требует режима совместимости 8.3.14, то использовать новые типы данных в расширении напрямую не получится.
Разберем еще один важный технический нюанс. Даже при подходящей версии платформы тип может не отображаться, если его состав определен некорректно для конкретного объекта метаданных. Посмотрим на примере регистра сведений.
Измерения регистров предназначены для хранения ссылок, которые будут проиндексированы в базе данных. Если в состав вашего определяемого типа включены объекты вместо ссылок, платформа может скрыть этот тип из списка выбора, чтобы предотвратить ошибку структуры БД.
Убедимся, что в составе типа выбраны правильные значения. Сравним два варианта:
// Неправильно: использование типов объектов
СправочникОбъект.Контрагенты
ДокументОбъект.РеализацияТоваровУслуг
// Правильно: использование ссылочных типов
СправочникСсылка.Контрагенты
ДокументСсылка.РеализацияТоваровУслуг
Для измерений и реквизитов, которые должны храниться в таблицах базы данных, всегда используйте только Ссылка (Reference). Типы типа СправочникОбъект или ДокументОбъект существуют только в оперативной памяти в момент редактирования и не могут быть типом данных в базе.
Если вы столкнулись с тем, что тип не отображается, пройдем по шагам для исправления ситуации:
8.3.20.xxxx или выше.Режим совместимости. Если там указано значение меньше 8.3.20, то использование собственного определяемого типа в расширении недоступно.СправочникСсылка, ДокументСсылка, ПланВидовХарактеристикСсылка и т.д.).Ctrl+S) и обновление конфигурации базы данных (F7).Если мы работаем на старой версии платформы или в конфигурации с низким режимом совместимости, и обновить их невозможно, проанализируем альтернативные способы решения задачи.
Вместо создания ОпределяемогоТипа, мы можем указать Составной тип непосредственно в свойстве измерения регистра. В окне выбора типа данных установите флаг Составной тип данных и выберите все необходимые справочники и документы. Это менее удобно при масштабировании, но полностью работоспособно в версии 8.3.14.
Если в основной конфигурации уже есть ОпределяемыйТип (например, ДокументОбъект или ВладелецФайлов), который подходит вам по смыслу, мы можем:
Этот метод позволяет обойти ограничение на создание новых типов, используя расширение существующих метаданных основной конфигурации.
Если ваша разработка ведется в EDT, а не в классическом конфигураторе, ситуация может осложняться задержкой индексации. Выясним, что делать в этом случае:
Проанализируем состояние проекта. Если тип создан, но не виден, попробуйте выполнить Validate Project. В некоторых случаях требуется перезагрузка Language Server или полная очистка проекта (Project -> Clean). EDT более чувствителен к целостности метаданных, и если ОпределяемыйТип содержит ошибки (например, ссылается на незаимствованный объект), он будет исключен из списков выбора типов во всем проекте.
Подводя итог, можно сказать, что в большинстве случаев проблема решается либо переходом на современные версии платформы (8.3.20+), либо использованием классического составного типа данных вместо определяемого, если вы ограничены режимом совместимости 8.3.14.