Перевод самописной конфигурации со старых версий платформы (например, 8.3.8) на более современные релизы (8.3.13, 8.3.17 и выше) — это частая задача, с которой сталкиваются разработчики. Основной причиной такого перехода обычно является желание использовать новые возможности платформы, в частности — современные механизмы расширений, которые позволяют кастомизировать систему без изменения основной конфигурации. Однако простое обновление платформы без изменения настроек совместимости не даст желаемого результата. Нам потребуется отключить или повысить режим совместимости конфигурации, что неизбежно повлечет за собой необходимость рефакторинга кода.
В этой статье мы подробно и пошагово разберем, как правильно перевести вашу собственную конфигурацию на новый релиз платформы, минимизировав риски возникновения ошибок в работающей базе данных.
Когда вы устанавливаете новую версию платформы 1С, конфигурация по умолчанию продолжает работать в режиме совместимости со своей «родной» версией (например, 8.3.8). Это сделано для того, чтобы старый код выполнялся без ошибок. Но если мы хотим использовать весь потенциал новых механизмов — например, изменять типы данных существующих реквизитов через расширения, создавать собственные планы обмена или использовать новые возможности XDTO-пакетов — нам необходимо повысить режим совместимости как минимум до 8.3.11 (а лучше до 8.3.13 или вообще отключить его).
Прежде чем приступать к каким-либо манипуляциям в конфигураторе, критически важно обезопасить данные. Сделаем полную резервную копию базы данных. Проводить все первоначальные работы мы будем исключительно на копии базы данных. Ни в коем случае не выполняйте эти действия сразу на рабочей базе!
Рассмотрим последовательный подход к обновлению. Для начала установим новый релиз платформы на сервер и клиентские машины. На этом этапе мы не меняем режим совместимости в конфигураторе. Наша цель — запустить базу на новой платформе «как есть» и убедиться, что основные функции работают стабильно в режиме эмуляции старой версии.
Теперь переходим к работе в нашей тестовой копии. Откроем конфигуратор, перейдем в свойства корневого объекта конфигурации и найдем свойство РежимИспользованияСовместимости. Изменим его значение на требуемое (например, Версия 8.3.13) или выберем вариант Не использовать, если мы хотим полностью перейти на стандарты текущей платформы.
Платформа 1С предоставляет мощный встроенный инструмент для автоматического поиска ошибок. Перейдем в меню Конфигурация — Проверка конфигурации. Нам необходимо настроить проверку, установив следующие флаги:
8.3.8.Запустим проверку и проанализируем полученный список ошибок. Большинство из них будет связано с устаревшим синтаксисом и использованием запрещенных методов.
Начиная с версии платформы 8.3.9, 1С активно вытесняет синхронные методы работы. Если в режиме совместимости 8.3.8 старый код работал без проблем, то при отключении совместимости функции вроде Вопрос(), Предупреждение() или НайтиФайлы() вызовут аварийное завершение работы программы в веб-клиенте или тонком клиенте.
Выясним причину этой проблемы. Современные стандарты веб-технологий и мобильных платформ не поддерживают блокировку интерфейса (модальность). Поэтому нам придется переписать эти участки кода на асинхронные аналоги.
Посмотрим на пример классического синхронного кода, который использовался в старых конфигурациях:
// Пример устаревшего синхронного кода
Ответ = Вопрос("Вы действительно хотите провести документ?", РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
ПровестиДокумент();
КонецЕсли;
Для работы на новых релизах платформы этот код необходимо переписать с использованием асинхронных методов и описания оповещения. Разберем по шагам, как это сделать:
// Пример современного асинхронного кода
&НаКлиенте
Процедура ВыполнитьПроверкуИПроведение()
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВопросаОПроведении", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, "Вы действительно хотите провести документ?", РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВопросаОПроведении(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ПровестиДокумент();
КонецЕсли;
КонецПроцедуры
Аналогичным образом необходимо поступить с функциями работы с файловой системой. Вместо синхронного метода НайтиФайлы() следует использовать асинхронную процедуру НачатьНахождениеФайлов().
При переходе на новые релизы следует держать в уме несколько важных системных изменений:
8.3.9, в платформе усилена безопасность работы с внешним кодом. Если ваша самописная конфигурация использует внешние компоненты, библиотеки или COM-соединения, может потребоваться их перерегистрация в операционной системе или настройка профилей безопасности в кластере 1С.8.3.10, были доработаны алгоритмы автоматического распределения элементов в интерфейсе «Такси». В самописках с плотной компоновкой элементов формы могут слегка "разъехаться". Рекомендуется вручную открыть ключевые формы и проверить корректность их визуального отображения.После того как встроенный инструмент проверки перестал выдавать критические синтаксические ошибки, а весь код работы с файлами и диалогами переведен на асинхронные рельсы, приступаем к сквозному тестированию. Протестируйте ключевые бизнес-процессы вашей конфигурации. Только после успешного завершения всех тестов на копии можно планировать перенос изменений в рабочую базу данных.