Как в расширении 1С добавить свой тип в заимствованный определяемый тип?

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

При разработке в 1С с использованием расширений часто возникает задача добавить собственный объект (например, новый документ или справочник) в составной тип, определенный в основной конфигурации. Классический пример — добавление нового документа в определяемый тип ВладелецФайлов из Библиотеки стандартных подсистем (БСП), чтобы к нему можно было прикреплять файлы. Однако при попытке сделать это стандартным способом разработчики годами сталкивались с ошибкой: «Значение контролируемого свойства Тип у объекта ... не совпадает со значением в расширяемой конфигурации». Давайте разберемся, почему она возникает и как ее правильно решить на современных версиях платформы.

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

Почему старые методы не работают?

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

Попытка №1: Отключение контроля свойства

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

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

Попытка №2: «Лайфхак» с копированием из внешней обработки

Некоторые разработчики находили нестандартный способ, который заключался в создании реквизита с нужным составным типом во внешней обработке, копировании его (Ctrl+C) и вставке (Ctrl+V) в объект расширения. Иногда это срабатывало для реквизитов, но являлось недокументированным и крайне нестабильным поведением. При любом последующем редактировании свойств такого реквизита «неизвестные» типы могли слететь. Этот метод категорически не рекомендуется использовать, тем более что сейчас существует штатное решение.

Правильное решение: версия платформы и режим совместимости

Ключ к решению проблемы лежит в возможностях платформы «1С:Предприятие». Полноценная поддержка изменения состава определяемых типов в расширениях появилась только начиная с версии платформы 8.3.20.

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

Даже если у вас установлена последняя версия платформы (например, 8.3.25), но в свойствах основной конфигурации режим совместимости установлен на Версия 8.3.17 или ниже, платформа будет работать в режиме эмуляции старой версии, где расширение типов было невозможно. Именно поэтому многие, работая с типовыми конфигурациями (УТ, ERP, ЗУП), не могли воспользоваться новой возможностью — разработчики 1С не спешат повышать режим совместимости в своих продуктах для сохранения обратной совместимости.

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

  1. Версия платформы 1С:Предприятие — 8.3.20 или новее.
  2. Режим совместимости основной конфигурации — Версия 8.3.20 или новее.

Пошаговая инструкция по расширению определяемого типа

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

Шаг 1. Проверка окружения

Перед началом работы откройте конфигуратор основной базы и перейдите в свойства конфигурации (правый клик на корневом элементе дерева -> Свойства). Убедитесь, что в поле «Режим совместимости» установлено значение не ниже Версия 8.3.20.

Шаг 2. Заимствование объектов в расширение

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

Шаг 3. Настройка состава типа в расширении

  1. В дереве метаданных расширения найдите заимствованный определяемый тип и откройте его свойства.
  2. Найдите свойство Тип и нажмите на кнопку выбора (...), чтобы открыть окно «Редактирование состава типа данных».
  3. В открывшемся списке вы увидите все типы из основной конфигурации, а также объекты, созданные в вашем расширении. Установите флажок напротив вашего нового объекта (Документ.МойНовыйДокумент).

Шаг 4. Настройка контроля

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

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

Шаг 5. Обновление и проверка

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

Подведем итог

Возможность расширять составные и определяемые типы в расширениях — мощный инструмент, который позволяет проводить более глубокую доработку конфигураций без снятия с поддержки. Главное помнить, что эта функциональность напрямую зависит от версии платформы и режима совместимости. Если у вас не получается добавить тип, в первую очередь проверяйте именно эти два параметра. Старые "обходные пути" лучше оставить в прошлом, так как они нестабильны и больше не нужны.

← На главную