Как перевести самописную конфигурацию на новый релиз платформы 1С?

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

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

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

Зачем отключать режим совместимости?

Когда вы устанавливаете новую версию платформы 1С, конфигурация по умолчанию продолжает работать в режиме совместимости со своей «родной» версией (например, 8.3.8). Это сделано для того, чтобы старый код выполнялся без ошибок. Но если мы хотим использовать весь потенциал новых механизмов — например, изменять типы данных существующих реквизитов через расширения, создавать собственные планы обмена или использовать новые возможности XDTO-пакетов — нам необходимо повысить режим совместимости как минимум до 8.3.11 (а лучше до 8.3.13 или вообще отключить его).

Шаг 1. Подготовка и создание резервной копии

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

Шаг 2. Первичное обновление платформы без изменения совместимости

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

Шаг 3. Изменение режима совместимости в копии базы

Теперь переходим к работе в нашей тестовой копии. Откроем конфигуратор, перейдем в свойства корневого объекта конфигурации и найдем свойство РежимИспользованияСовместимости. Изменим его значение на требуемое (например, Версия 8.3.13) или выберем вариант Не использовать, если мы хотим полностью перейти на стандарты текущей платформы.

Шаг 4. Использование встроенного инструмента «Проверка конфигурации»

Платформа 1С предоставляет мощный встроенный инструмент для автоматического поиска ошибок. Перейдем в меню Конфигурация — Проверка конфигурации. Нам необходимо настроить проверку, установив следующие флаги:

  1. Проверка логической целостности конфигурации — для поиска внутренних ошибок структуры метаданных.
  2. Поиск некорректных ссылок — выявляет обращения к несуществующим объектам.
  3. Проверка синтаксиса — здесь обязательно выбираем проверку для всех возможных режимов выполнения: тонкий клиент, веб-клиент, сервер, внешнее соединение.
  4. Проверка на использование модальных вызовов и синхронных методов — это самый критичный пункт при переходе с версии 8.3.8.

Запустим проверку и проанализируем полученный список ошибок. Большинство из них будет связано с устаревшим синтаксисом и использованием запрещенных методов.

Шаг 5. Отказ от модальности и переход на асинхронные методы

Начиная с версии платформы 8.3.9, 1С активно вытесняет синхронные методы работы. Если в режиме совместимости 8.3.8 старый код работал без проблем, то при отключении совместимости функции вроде Вопрос(), Предупреждение() или НайтиФайлы() вызовут аварийное завершение работы программы в веб-клиенте или тонком клиенте.

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

Посмотрим на пример классического синхронного кода, который использовался в старых конфигурациях:


// Пример устаревшего синхронного кода
Ответ = Вопрос("Вы действительно хотите провести документ?", РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
    ПровестиДокумент();
КонецЕсли;

Для работы на новых релизах платформы этот код необходимо переписать с использованием асинхронных методов и описания оповещения. Разберем по шагам, как это сделать:


// Пример современного асинхронного кода
&НаКлиенте
Процедура ВыполнитьПроверкуИПроведение()
    ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВопросаОПроведении", ЭтотОбъект);
    ПоказатьВопрос(ОписаниеОповещения, "Вы действительно хотите провести документ?", РежимДиалогаВопрос.ДаНет);
КонецПроцедуры

&НаКлиенте
Процедура ПослеВопросаОПроведении(Результат, ДополнительныеПараметры) Экспорт
    Если Результат = КодВозвратаДиалога.Да Тогда
        ПровестиДокумент();
    КонецЕсли;
КонецПроцедуры

Аналогичным образом необходимо поступить с функциями работы с файловой системой. Вместо синхронного метода НайтиФайлы() следует использовать асинхронную процедуру НачатьНахождениеФайлов().

Шаг 6. Учет технических особенностей платформы 8.3.13+

При переходе на новые релизы следует держать в уме несколько важных системных изменений:

Шаг 7. Тестирование и запуск в эксплуатацию

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

← На главную