Почему в расширении 1С не отображаются определяемые типы при редактировании состава данных?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке в среде 1С:Предприятие мы часто сталкиваемся с ситуациями, когда созданные нами объекты метаданных в расширении ведут себя не так, как в основной конфигурации. Одной из распространенных проблем является невозможность назначить созданный в расширении ОпределяемыйТип (Defined Type) в качестве типа данных для измерения регистра или реквизита объекта. Давайте вместе разберем, почему это происходит, как версия платформы влияет на разработку и какие существуют пути решения этой задачи.

Анализ технического ограничения версий платформы

Проанализируем ситуацию: разработчик создает ОпределяемыйТип внутри расширения и пытается использовать его для типизации измерения РегистрСведений, который также находится в этом расширении. Несмотря на то, что объект существует, он просто не появляется в списке доступных типов (Type Picker). Основная причина кроется в эволюции механизма расширений.

Долгое время в платформе «1С:Предприятие» существовало архитектурное ограничение. Рассмотрим ключевые этапы:

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

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

Влияние режима совместимости на видимость типов

Рассмотрим подробнее роль свойства РежимСовместимости. Даже если вы установили самую современную версию платформы (например, 8.3.25), это не гарантирует автоматического появления функционала. Расширение всегда работает в контексте основной конфигурации.

Проанализируем алгоритм проверки:

  1. Проверим РежимСовместимости основной конфигурации. Если он установлен в 8.3.14 или ниже, то расширение будет ограничено возможностями именно этой версии.
  2. Проверим РежимСовместимости самого расширения. Он не может быть выше, чем у основной конфигурации.

Таким образом, для того чтобы ОпределяемыйТип стал доступен для выбора, необходимо, чтобы оба этих параметра были установлены в значение не ниже «8.3.20». Если ваша типовая конфигурация (например, старая редакция «Управление торговлей») требует режима совместимости 8.3.14, то использовать новые типы данных в расширении напрямую не получится.

Правильное наполнение определяемого типа

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

Измерения регистров предназначены для хранения ссылок, которые будут проиндексированы в базе данных. Если в состав вашего определяемого типа включены объекты вместо ссылок, платформа может скрыть этот тип из списка выбора, чтобы предотвратить ошибку структуры БД.

Убедимся, что в составе типа выбраны правильные значения. Сравним два варианта:


// Неправильно: использование типов объектов
СправочникОбъект.Контрагенты
ДокументОбъект.РеализацияТоваровУслуг

// Правильно: использование ссылочных типов
СправочникСсылка.Контрагенты
ДокументСсылка.РеализацияТоваровУслуг

Для измерений и реквизитов, которые должны храниться в таблицах базы данных, всегда используйте только Ссылка (Reference). Типы типа СправочникОбъект или ДокументОбъект существуют только в оперативной памяти в момент редактирования и не могут быть типом данных в базе.

Алгоритм решения проблемы (пошаговая инструкция)

Если вы столкнулись с тем, что тип не отображается, пройдем по шагам для исправления ситуации:

  1. Проверяем версию платформы: Убедимся, что установленная версия клиента и сервера — 8.3.20.xxxx или выше.
  2. Проверяем режим совместимости: Откроем свойства корневого объекта конфигурации и расширения. Ищем строку Режим совместимости. Если там указано значение меньше 8.3.20, то использование собственного определяемого типа в расширении недоступно.
  3. Проверяем состав типа: Зайдем в редактор определяемого типа и убедимся, что в списке типов отмечены только ссылочные типы (СправочникСсылка, ДокументСсылка, ПланВидовХарактеристикСсылка и т.д.).
  4. Проверяем заимствование: Если вы пытаетесь использовать тип из основной конфигурации, убедитесь, что он добавлен (заимствован) в расширение.
  5. Обновление конфигурации базы данных: Иногда список типов в визуальном редакторе кэшируется. Выполните сохранение (Ctrl+S) и обновление конфигурации базы данных (F7).

Обходные пути для старых версий (до 8.3.20)

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

Способ 1: Использование составного типа напрямую

Вместо создания ОпределяемогоТипа, мы можем указать Составной тип непосредственно в свойстве измерения регистра. В окне выбора типа данных установите флаг Составной тип данных и выберите все необходимые справочники и документы. Это менее удобно при масштабировании, но полностью работоспособно в версии 8.3.14.

Способ 2: Заимствование существующего типа

Если в основной конфигурации уже есть ОпределяемыйТип (например, ДокументОбъект или ВладелецФайлов), который подходит вам по смыслу, мы можем:

  1. Заимствовать этот тип в расширение.
  2. Добавить в него свои новые типы данных, созданные в расширении.
  3. Использовать этот заимствованный тип для своих реквизитов.

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

Особенности работы в Enterprise Development Tools (EDT)

Если ваша разработка ведется в EDT, а не в классическом конфигураторе, ситуация может осложняться задержкой индексации. Выясним, что делать в этом случае:

Проанализируем состояние проекта. Если тип создан, но не виден, попробуйте выполнить Validate Project. В некоторых случаях требуется перезагрузка Language Server или полная очистка проекта (Project -> Clean). EDT более чувствителен к целостности метаданных, и если ОпределяемыйТип содержит ошибки (например, ссылается на незаимствованный объект), он будет исключен из списков выбора типов во всем проекте.

Подводя итог, можно сказать, что в большинстве случаев проблема решается либо переходом на современные версии платформы (8.3.20+), либо использованием классического составного типа данных вместо определяемого, если вы ограничены режимом совместимости 8.3.14.

← На главную