Как исправить ошибку «Режим совместимости конфигурации с 1С:Предприятием версии Версия8_3_14 не поддерживается» в 1С?

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

При активной разработке в среде 1С:Предприятие 8 с использованием механизма расширений программисты часто сталкиваются с аппаратными и программными ограничениями совместимости. Одной из наиболее коварных ошибок является сообщение: «Режим совместимости конфигурации с 1С:Предприятием версии Версия8_3_14 не поддерживается». Она возникает внезапно, даже если физическая версия установленной платформы значительно выше (например, 8.3.16 или более поздняя), а сама конфигурация успешно открывается в Конфигураторе.

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

Почему возникает эта ошибка: глубокий технический анализ

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

В составе БСП присутствует общий модуль СтандартныеПодсистемыСервер. При запуске приложения в режиме «1С:Предприятие» срабатывает стартовое событие, вызывающее процедуру ПередЗапускомПрограммы(). Внутри этой процедуры разработчики БСП реализовали жесткий контроль окружения. Алгоритм проверки выглядит следующим образом:

  1. Программа обращается к свойству метаданных основной конфигурации: Метаданные.РежимСовместимости.
  2. Полученное значение преобразуется в строковый формат (например, в строку "Версия8_3_14" или "НеИспользовать").
  3. Эта строка сверяется со внутренним массивом («белым списком») версий, которые официально протестированы и поддерживаются текущей версией БСП, внедренной в вашу конфигурацию (например, в УНФ или Бухгалтерию).
  4. Если разработчик вручную повысил режим совместимости в свойствах конфигурации или установил его в значение «Не использовать», старая версия БСП не находит этот режим в своем списке разрешенных.
  5. Система генерирует исключение, выполнение кода прерывается, и пользователь видит окно с ошибкой.

Ситуация осложняется, когда в расширение добавляются тяжелые объекты метаданных, такие как собственные Регистры накопления. Для их поддержки в расширениях платформа жестко требует, чтобы режим совместимости самого расширения (а значит, и основной конфигурации) был установлен не ниже версии 8.3.13. Если базовая конфигурация (например, старый релиз УНФ) рассчитана на работу в режиме совместимости 8.3.14, а вы пытаетесь маневрировать версиями, БСП мгновенно блокирует запуск.

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

Решение 1. Отключение проверки БСП через заимствование методов в расширении (Рекомендуемый обходной путь)

Поскольку снимать конфигурацию с поддержки крайне нежелательно, мы можем использовать штатный механизм переопределения модулей в самом расширении. Платформа 1С позволяет заимствовать общие модули и подменять выполнение процедур с помощью аннотации &Вместо. Это позволит нам скорректировать поведение БСП "на лету".

Выполним следующие действия по шагам:

Шаг 1. Изменение режима совместимости конфигурации

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

Шаг 2. Заимствование общего модуля

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

Шаг 3. Создание замещающей процедуры

В модуле СтандартныеПодсистемыСервер нашего расширения объявим переопределяемый метод ПередЗапускомПрограммы(). Мы воспользуемся аннотацией &Вместо. Нам потребуется полностью скопировать оригинальный код этой процедуры из основной конфигурации, но локально модифицировать блок проверки.

Посмотрим на пример реализации кода в расширении:


&Вместо("ПередЗапускомПрограммы")
Процедура Расш1_ПередЗапускомПрограммы(ПараметрыЗапуска) Экспорт
    // Копируем оригинальное тело процедуры из основной конфигурации.
    // Находим фрагмент кода, где анализируется режим совместимости:
    // Обычно он выглядит так:
    // Если Не ОбщегоНазначения.ПоддерживаетсяРежимСовместимости() Тогда ...
    
    // Вместо вызова стандартной ошибки мы можем либо закомментировать этот блок,
    // либо принудительно вернуть Истина в проверках.
    
    // Ниже приведена схема обхода:
    Отказ = Ложь;
    // [Оригинальный код инициализации систем БСП]
    
    // Наша модификация: игнорируем критическую ошибку несоответствия режимов
    // Для этого мы просто пропускаем вызов исключения БСП.
КонецПроцедуры

Шаг 4. Обход контроля версии платформы

Иногда после отключения контроля режима совместимости БСП начинает выдавать следующую ошибку — несоответствие минимальной версии платформы. Чтобы решить и эту проблему, добавим в расширение общий модуль ОбщегоНазначенияПереопределяемый и переопределим метод ПриОпределенииОбщихПараметровБазовойФункциональности() с использованием аннотации &После. Внутри этой процедуры мы принудительно перепишем параметры контроля требований к платформе.

Рассмотрим пример кода:


&После("ПриОпределенииОбщихПараметровБазовойФункциональности")
Процедура Расш1_ПриОпределенииОбщихПараметровБазовойФункциональности(ОбщиеПараметры) Экспорт
    СистемнаяИнформация = Новый СистемнаяИнформация;
    // Устанавливаем минимальные требования на уровне текущей запущенной платформы
    ОбщиеПараметры.Вставить("МинимальнаяВерсияПлатформы", СистемнаяИнформация.ВерсияПриложения);
    ОбщиеПараметры.Вставить("РекомендуемаяВерсияПлатформы", СистемнаяИнформация.ВерсияПриложения);
КонецПроцедуры

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

Решение 2. Изменение архитектуры расширения (без использования регистров накопления)

Если вы не хотите вмешиваться в код БСП и переопределять глобальные механизмы контроля, проанализируем архитектуру самого разрабатываемого расширения. Зададимся вопросом: почему нам потребовался высокий режим совместимости (не ниже 8.3.13)?

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

Мы можем обойти это ограничение, изменив подход к хранению данных:

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

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

Решение 3. Обновление конфигурации до актуального релиза

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

Поэтому наиболее рациональный шаг — обновить конфигурацию (например, УНФ) до того релиза, в котором разработчики 1С официально перевели систему на требуемый режим совместимости. При обновлении конфигурации автоматически обновится и встроенная БСП, и все проверки совместимости будут проходить в штатном режиме без ошибок. При обслуживании нескольких баз выполнять автоматическое обновление информационных баз 1С и их архивирование можно по расписанию.

Важный нюанс: Ошибка свойства «Предупреждать» при переходе между версиями платформ

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

«Действие при подключении "Предупреждать" недопустимо в режиме совместимости 8.3.14 и ниже»

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

Решение этой проблемы очень простое:

  1. Откроем свойства нашего расширения и перейдем к списку всех заимствованных объектов.
  2. Проанализируем настройки контроля свойств каждого заимствованного объекта.
  3. Заменим значение свойства контроля с «Предупреждать» (одиночная галочка) на «Проверять значение при подключении расширения» (двойная галочка) либо полностью снимем контроль с этого свойства (снимем все галочки).

После этой корректировки расширение без проблем применится на платформе с режимом совместимости 8.3.14.

Таким образом, мы детально разобрали все возможные варианты обхода данной проблемы. Выбор конкретного метода зависит от ваших задач: если необходимо быстро запустить расширение "здесь и сейчас" без изменения метаданных — используйте заимствование методов БСП (Решение 1). Если важна долгосрочная стабильность при регулярных обновлениях — пересмотрите архитектуру хранения данных в расширении (Решение 2) или обновите основную конфигурацию (Решение 3).

← На главную