Как поменять режим совместимости в расширении 1С

· 9 мин

Содержание

Режим совместимости расширения 1С меняют в Конфигураторе: откройте дерево расширения, вызовите свойства его корневого элемента и в группе «Совместимость» выберите нужную версию в поле «Режим совместимости». Затем сохраните расширение и обновите конфигурацию базы данных (F7). Главное правило: режим расширения не может быть выше режима совместимости основной конфигурации.

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

Зачем расширению свой режим совместимости

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

Отсюда три практических следствия:

  • 🔒 Набор доступных возможностей. Если у расширения стоит 8.3.14, в его модулях нельзя использовать то, что появилось позже, например асинхронные Асинх/Ждать (они пришли в 8.3.18).
  • ⚙️ Поведение платформы. Часть изменений в новых версиях платформа включает только при соответствующем режиме совместимости. Расширение со старым режимом работает «по-старому».
  • 🔗 Применимость к конфигурации. Режим расширения сверяется с режимом основной конфигурации. Если расширение «новее» конфигурации, платформа его не применит.

Режим совместимости — не версия платформы. На платформе 8.3.25 спокойно работают конфигурация и расширение с режимом 8.3.20. Наоборот не бывает: режим выше версии установленной платформы выбрать нельзя, в списке таких значений просто нет.

Какое значение выбрать

СитуацияЧто поставить в расширении
Типовая конфигурация, расширение дорабатывает еёРовно тот же режим, что у основной конфигурации
Конфигурация обновилась и подняла свой режимМожно оставить прежний или поднять до нового режима конфигурации
Нужна новая возможность платформы в кодеНе выше режима конфигурации; если его не хватает — ждать обновления конфигурации
Конфигурация работает без режима совместимости («Не использовать»)Любой режим вплоть до «Не использовать»

Значение «Не использовать» у расширения означает режим текущей платформы. Если у конфигурации стоит, скажем, 8.3.20, а платформа 8.3.24, такое расширение окажется «выше» конфигурации и не применится. Это частая ловушка.

Пример с цифрами

Бухгалтерия работает на платформе 8.3.24. У типовой конфигурации стоит режим 8.3.20. Программист год назад сделал расширение для печатной формы счёта и оставил у него «Не использовать», пока база была на другой платформе и другом релизе.

После обновления расширение перестало применяться. Причина: «Не использовать» на платформе 8.3.24 равно режиму 8.3.24, а это выше 8.3.20 у конфигурации. Решение занимает пять минут: выставить в расширении 8.3.20, проверить код и нажать F7.

Обратная история: конфигурацию обновили до релиза с режимом 8.3.24, а у расширения остался 8.3.20. Оно продолжает работать. Поднимать режим здесь не обязательно, это делают по необходимости.

Где искать настройку: Конфигуратор, EDT, файлы

В пользовательском режиме (Администрирование → Печатные формы, отчеты и обработки → Расширения в БП 3.0 и похожих конфигурациях на БСП) режим совместимости не меняется. Там можно только загрузить, отключить или удалить расширение . Менять свойство приходится в среде разработки.

ГдеКак добраться до свойства
КонфигураторКонфигурация → Расширения конфигурации → выбрать расширение → открыть его дерево → свойства корня → группа «Совместимость»
1C:EDTПроект расширения → корневой объект конфигурации → редактор свойств → «Режим совместимости»
Файлы XMLВ выгрузке расширения файл Configuration.xml, элемент <CompatibilityMode>

Рядом с режимом совместимости в той же группе лежат «Режим использования модальности» и «Режим использования синхронных вызовов расширений платформы и внешних компонент». Их тоже стоит сверить с основной конфигурацией.

Посмотреть режим основной конфигурации так же просто: Конфигурация → Открыть конфигурацию, затем свойства корня и та же группа «Совместимость».

Пошагово: меняем режим совместимости в расширении

Перед началом выгрузите текущее расширение в файл .cfe. Это ваша точка отката: если что-то пойдёт не так, файл просто загружается обратно.

Шаг 1. Откройте расширение

  1. Запустите базу в режиме «Конфигуратор» под пользователем с правами администратора.
  2. Выберите Конфигурация → Расширения конфигурации.
  3. Выделите нужное расширение и нажмите кнопку «Конфигурация» в командной панели окна. Откроется дерево объектов расширения.

Шаг 2. Сохраните копию

В дереве расширения откройте меню Конфигурация и выберите сохранение расширения в файл. Укажите папку и имя, например МоиДоработки_до_смены_режима.cfe.

Шаг 3. Поменяйте свойство

  1. Щёлкните правой кнопкой по корню дерева расширения (верхний элемент с его именем) и выберите «Свойства».
  2. Найдите группу «Совместимость».
  3. В поле «Режим совместимости» выберите версию. Сверяйтесь с режимом основной конфигурации: не выше него.

Шаг 4. Проверьте код

Запустите Конфигурация → Проверка конфигурации для расширения. Если режим понизили, проверка покажет места, где код использует недоступные теперь методы. Исправьте их до сохранения.

Шаг 5. Сохраните и примените

  1. Сохраните расширение (Ctrl+S).
  2. Нажмите «Обновить конфигурацию базы данных» (F7). Если расширение добавляет свои реквизиты или таблицы, платформа покажет список изменений структуры — примите его.
  3. Выгрузите обновлённое расширение в новый .cfe, если его распространяют по другим базам.

Если расширение добавляет данные (свои реквизиты, регистры), обновление структуры может потребовать монопольного доступа. Делайте это, когда пользователи вышли из базы.

То же из командной строки

Для пакетной работы удобнее выгрузить расширение в файлы, поправить Configuration.xml и загрузить обратно:

"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Админ" /P "" /DumpConfigToFiles "D:\ext_src" -Extension МоиДоработки

rem правим в D:\ext_src\Configuration.xml элемент <CompatibilityMode>, например Version8_3_20

"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Админ" /P "" /LoadConfigFromFiles "D:\ext_src" -Extension МоиДоработки /UpdateDBCfg

Путь к платформе, базу, пользователя и имя расширения подставьте свои. Значение в XML пишется в виде Version8_3_20, Version8_3_24 и так далее.

Что меняется в коде и объектах расширения

Режим совместимости определяет, какой «словарь» платформы доступен модулям расширения. Это касается встроенного языка, свойств форм и поведения стандартных механизмов.

При понижении режима

  • ❌ Перестают компилироваться конструкции, появившиеся позже выбранной версии. Типичный пример — Асинх/Ждать при режиме ниже 8.3.18.
  • ❌ Свойства элементов форм, добавленные в новых версиях, становятся недоступны в редакторе формы.
  • ⚠️ Синтаксическая проверка поймает только явные вызовы. Обращения через Выполнить() или строки с именами методов она не видит — такие места ищите поиском по модулям.

При повышении режима

  • ✅ Открываются новые методы и свойства — ради этого режим обычно и поднимают.
  • ⚠️ Может измениться поведение уже написанного кода. Платформа включает часть изменений только с определённого режима, поэтому то, что работало «по-старому», начнёт работать «по-новому».
  • ⚠️ Если в расширении есть синхронные вызовы модальных окон, а режим использования модальности в новом режиме запрещает их, всплывут ошибки при выполнении.

Как это связано с заимствованными объектами

Заимствованные объекты (формы, модули, справочники основной конфигурации) живут по правилам расширения, а не конфигурации. Если вы перехватываете процедуру типовой формы через &После или &Вместо, ваш код исполняется в режиме совместимости расширения.

Отсюда вывод: держите режимы одинаковыми. Когда расширение и конфигурация расходятся, сложнее предсказать, почему одна и та же конструкция ведёт себя по-разному в типовом модуле и в вашем.

Ошибки при смене режима и как из них выйти

Диагностика: выберите симптом

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

Если откат всё-таки нужен

Загрузите сохранённый перед изменениями .cfe поверх текущего расширения: в окне Конфигурация → Расширения конфигурации выделите расширение и выберите загрузку из файла. Затем снова F7. Данные расширения при такой замене остаются на месте, если вы не удаляли его объекты.

Как убедиться, что расширение работает после изменений

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

Проверка расширения после смены режима
Выполнено: 0 / 7

Несколько приёмов, которые ускоряют проверку:

  • 🔍 Поиск по модулям. Правка → Глобальный поиск по расширению на слова Выполнить, Вычислить, имена новых методов. Строковые вызовы проверка не ловит.
  • 🧪 Отладка на сервере. Если расширение меняет серверную логику, включите отладку на сервере и пройдите ключевые сценарии под отладчиком.
  • 📋 Журнал регистрации. После первого рабочего дня откройте журнал с отбором по уровню «Ошибка». Новые ошибки в модулях расширения сразу видны.
  • 🔖 Свойство «Версия». Поднимите версию расширения в его свойствах. Так администраторы других баз поймут, что файл изменился.

Режим совместимости расширения в облаке (1cfresh и аналоги)

В облачных сервисах вроде 1cfresh у пользователя нет Конфигуратора. Значит, поменять режим прямо в облачной базе нельзя. Схема другая.

  1. Выгрузите данные приложения из сервиса и разверните локальную копию (сервис даёт выгрузку для переноса в локальную базу).
  2. Откройте копию в Конфигураторе, поменяйте режим совместимости в расширении, как описано выше.
  3. Проверьте расширение на копии и сохраните .cfe.
  4. Загрузите новый файл в сервис через раздел расширений приложения.

Особенности облака, которые влияют на режим:

  • ☁️ Версия платформы фиксирована провайдером. Режим выше используемой в сервисе платформы задать нельзя.
  • 🔄 Приложение обновляется без вас. Провайдер обновил типовую конфигурацию — её режим совместимости мог вырасти. Старое расширение при этом обычно продолжает работать, но если вы подняли его режим заранее, а конфигурация отстаёт, расширение не применится.
  • 🛡️ Безопасный режим. В облаке расширения работают с ограничениями: без доступа к файловой системе сервера, внешним компонентам и привилегированным операциям. Смена режима совместимости эти ограничения не снимает.
  • 📝 Проверка перед публикацией. У некоторых провайдеров расширение проходит проверку перед подключением. Держите номер версии в свойствах расширения актуальным, чтобы не путаться в загруженных файлах.

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

Частые вопросы

Можно ли поменять режим совместимости расширения без Конфигуратора?
Без среды разработки — нет. Подходят Конфигуратор, 1C:EDT или правка Configuration.xml в выгрузке с последующей загрузкой через пакетный режим.
Нужно ли менять режим расширения при каждом обновлении типовой конфигурации?
Нет. Расширение с режимом ниже режима конфигурации применяется. Менять стоит, когда нужны новые возможности платформы или вы хотите единых правил с конфигурацией.
Влияет ли режим совместимости расширения на основную конфигурацию?
Нет. Он действует только на код и формы самого расширения, включая перехваченные процедуры. Режим конфигурации остаётся прежним.
Почему у нового расширения сразу стоит режим совместимости?
При создании расширения платформа подставляет режим совместимости основной конфигурации. Так расширение сразу применимо к базе.
Сохранятся ли данные расширения после смены режима?
Да. Смена режима совместимости не удаляет реквизиты и таблицы расширения. Данные теряются только при удалении самого расширения или его объектов.