При разработке в 1С с использованием расширений часто возникает задача добавить собственный объект (например, новый документ или справочник) в составной тип, определенный в основной конфигурации. Классический пример — добавление нового документа в определяемый тип ВладелецФайлов из Библиотеки стандартных подсистем (БСП), чтобы к нему можно было прикреплять файлы. Однако при попытке сделать это стандартным способом разработчики годами сталкивались с ошибкой: «Значение контролируемого свойства Тип у объекта ... не совпадает со значением в расширяемой конфигурации». Давайте разберемся, почему она возникает и как ее правильно решить на современных версиях платформы.
Проанализируем ситуацию и выясним, что долгое время это было технологическим ограничением платформы, а не ошибкой разработчика.
В процессе поиска решения многие пробовали обходные пути, которые, к сожалению, не приводили к желаемому результату. Рассмотрим самые популярные из них, чтобы понять их неэффективность.
Попытка №1: Отключение контроля свойства
Первая мысль, которая приходит в голову при виде ошибки о контроле свойства, — это отключить этот самый контроль. В свойствах заимствованного в расширение объекта (в нашем случае, определяемого типа) есть флажок «Контролировать ...» или «Проверять значение при подключении расширения».
Что происходит, если его снять? Ошибка при обновлении конфигурации действительно пропадает, и расширение успешно подключается. Однако проблема не решается. В режиме «Предприятие» состав определяемого типа остается прежним, таким же, как в основной конфигурации. Ваш новый тип в него не попадает. Платформа просто игнорирует изменение, не выдавая ошибки.
Попытка №2: «Лайфхак» с копированием из внешней обработки
Некоторые разработчики находили нестандартный способ, который заключался в создании реквизита с нужным составным типом во внешней обработке, копировании его (Ctrl+C) и вставке (Ctrl+V) в объект расширения. Иногда это срабатывало для реквизитов, но являлось недокументированным и крайне нестабильным поведением. При любом последующем редактировании свойств такого реквизита «неизвестные» типы могли слететь. Этот метод категорически не рекомендуется использовать, тем более что сейчас существует штатное решение.
Ключ к решению проблемы лежит в возможностях платформы «1С:Предприятие». Полноценная поддержка изменения состава определяемых типов в расширениях появилась только начиная с версии платформы 8.3.20.
Однако просто установить свежую платформу недостаточно. Есть еще одно критически важное условие, о которое спотыкаются многие разработчики: режим совместимости основной конфигурации.
Даже если у вас установлена последняя версия платформы (например, 8.3.25), но в свойствах основной конфигурации режим совместимости установлен на Версия 8.3.17 или ниже, платформа будет работать в режиме эмуляции старой версии, где расширение типов было невозможно. Именно поэтому многие, работая с типовыми конфигурациями (УТ, ERP, ЗУП), не могли воспользоваться новой возможностью — разработчики 1С не спешат повышать режим совместимости в своих продуктах для сохранения обратной совместимости.
Таким образом, для успешного расширения определяемого типа должны быть выполнены два условия:
Если оба условия выше выполнены, расширить определяемый тип становится просто. Разберем по шагам на примере добавления нового документа в определяемый тип ВладелецДополнительныхСведений.
Шаг 1. Проверка окружения
Перед началом работы откройте конфигуратор основной базы и перейдите в свойства конфигурации (правый клик на корневом элементе дерева -> Свойства). Убедитесь, что в поле «Режим совместимости» установлено значение не ниже Версия 8.3.20.
Шаг 2. Заимствование объектов в расширение
ОпределяемыйТип.ВладелецДополнительныхСведений.Документ.МойНовыйДокумент.Шаг 3. Настройка состава типа в расширении
Тип и нажмите на кнопку выбора (...), чтобы открыть окно «Редактирование состава типа данных».Документ.МойНовыйДокумент).Шаг 4. Настройка контроля
В палитре свойств заимствованного определяемого типа найдите группу «Контроль». Для свойства «Контроль значения при подключении расширения» выберите режим, который разрешает изменения. В современных версиях платформы это может быть настройка с одной галочкой: «Проверять значение при подключении расширения, не запрещать подключение расширения».
Эта настройка говорит платформе, что мы осознанно меняем свойство и что это не ошибка. Платформа сравнит типы, увидит расхождение, но не будет блокировать подключение расширения, а применит измененный состав типа.
Шаг 5. Обновление и проверка
Сохраните расширение и обновите конфигурацию базы данных (F7). После этого можно заходить в режим «Предприятие» и проверять результат. Например, если вы добавляли тип в ВладелецДополнительныхСведений, то для экземпляров вашего нового документа появится возможность добавлять дополнительные сведения.
Возможность расширять составные и определяемые типы в расширениях — мощный инструмент, который позволяет проводить более глубокую доработку конфигураций без снятия с поддержки. Главное помнить, что эта функциональность напрямую зависит от версии платформы и режима совместимости. Если у вас не получается добавить тип, в первую очередь проверяйте именно эти два параметра. Старые "обходные пути" лучше оставить в прошлом, так как они нестабильны и больше не нужны.