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

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

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

Исторический контекст: Ограничения до версии 8.3.18

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

Почему существовало такое ограничение? Мы можем предположить, что такое поведение было обусловлено тем, что платформа жестко фиксировала базовую структуру, поведение и способы хранения данных для типов метаданных. Любые подобные изменения требовали бы глубокой переработки непосредственно основной конфигурации. Такое ограничение, вероятно, было задумано, чтобы предотвратить избыточное усердие в расширениях и сохранить стабильность базовых механизмов системы. Изменение типа реквизита в расширении для заимствованного объекта могло бы привести к непредсказуемым последствиям при обновлении или работе с данными.

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

Новые возможности в 1С:Предприятие 8.3.18 и выше

Ситуация существенно изменилась с выходом платформы 1С:Предприятие версии 8.3.18. Была реализована долгожданная возможность расширять типы реквизитов заимствованных объектов. Это стало значительным шагом вперед для разработчиков, так как позволило нам гораздо гибче адаптировать типовые решения без необходимости снятия конфигурации с поддержки.

Благодаря этим изменениям в версии 8.3.18 и выше, мы можем:

  1. Увеличивать длину строкового или числового реквизита. Теперь мы можем адаптировать емкость полей под наши нужды, не затрагивая основную конфигурацию.
  2. Добавлять новые типы данных в составной тип реквизита. Рассмотрим подробнее этот пункт. Если типовой реквизит мог содержать ссылки только на ЗаказКлиента и Реализацию, теперь мы можем добавить в его составной тип возможность хранить в нем также ЗаказПоставщику, который был создан в расширении или заимствован. Это значительно расширяет функциональность типовых механизмов.
  3. Использовать свои перечисления (созданные в расширении) в качестве типов для новых реквизитов, добавленных в расширение. Если мы добавляем совершенно новый реквизит в заимствованный объект через расширение, мы можем смело использовать для него наши собственные перечисления.
  4. Использовать свои перечисления для модифицированных реквизитов заимствованных объектов. После заимствования объекта основной конфигурации в расширение и изменения его реквизита, если наше перечисление было добавлено в это же расширение, мы сможем использовать его в качестве типа для такого модифицированного реквизита. Это критически важное изменение, которое позволяет нам более тонко настраивать типы данных.

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

Остающиеся ограничения

Несмотря на значительное расширение возможностей, все же существуют некоторые ограничения, даже в версии 8.3.18 и старше. Важно их учитывать при планировании доработок:

  1. Невозможно изменять типы общих реквизитов. Общие реквизиты являются фундаментальными элементами конфигурации, и их типы остаются защищенными от изменений в расширениях.
  2. Ограничения сохраняются для реквизитов с типами внешних источников данных. Эти типы данных имеют свои специфические механизмы работы, которые не позволяют изменять их через расширения.
  3. Нельзя изменять типы реквизитов, имеющих определяемый тип. Определяемые типы агрегируют множество других типов, и их изменение в расширении могло бы нарушить логику работы всей системы.
  4. Запрещено изменять реквизит ТипПланаВидовХарактеристик. Этот реквизит также является системным и критически важным для корректной работы планов видов характеристик.

Кроме того, следует отметить, что в расширениях не поддерживается использование типа ЛюбаяСсылка. Механизмы, использующие этот тип, не будут работать с данными расширения, что необходимо учитывать при проектировании решений.

Практические аспекты внедрения и совместимости

Мы должны понимать, что, хотя возможность расширять типы реквизитов появилась в платформе 8.3.18, ее фактическое использование в конкретных типовых конфигурациях, таких как 1С:Комплексная автоматизация (КА), может занять некоторое время. Разработчики типовых решений не всегда оперативно переводят конфигурации на новые версии платформы или режимы совместимости. Часто это связано с необходимостью тщательного тестирования и адаптации к изменениям платформы, что может быть довольно трудоемким процессом. Например, переход на новый режим совместимости часто требует значительных усилий и времени.

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

В заключение, возможность выбора своего перечисления для реквизитов заимствованных объектов в расширениях стала реальностью для большинства случаев, начиная с платформы 1С:Предприятие версии 8.3.18. Мы рассмотрели основные изменения, новые возможности и сохраняющиеся ограничения, что позволяет нам более эффективно использовать инструмент расширений при доработке типовых решений.

← На главную