Как правильно перевести нетиповую базу с 1С 8.1 на 1С 8.3 в режиме совместимости?

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

Перевод рабочей системы с платформы 1С:Предприятие 8.1 на 8.3 (с сохранением обычных форм и включением режима совместимости с 8.2) — ответственная инженерная задача, особенно если в информационной базе одновременно работает около 200 пользователей. Простое открытие базы новой платформой может обернуться скрытыми ошибками выполнения, нестабильностью процессов сервера и блокировками.

Разберем по шагам весь процесс миграции: от подготовки и поэтапной конвертации данных до выявления критических изменений в объектной модели встроенного языка и настройки серверного кластера.

Шаг 1. Безопасная двухэтапная конвертация и план отката

Прямая конвертация объемной рабочей базы напрямую из 8.1 в 8.3 нередко приводит к ошибкам структуры таблиц и сбоям индексов. Проанализируем надежный и проверенный практикой алгоритм конвертации:

  1. Создание полной резервной копии. Обязательно создаем бэкап средствами СУБД (например, средствами Microsoft SQL Server или PostgreSQL). Помним: если мы выгрузим информационную базу в файл .dt из платформы 8.2 или 8.3, загрузить ее обратно в 8.1 штатным образом уже не удастся. Восстановление средствами СУБД — единственный гарантированный способ отката.
  2. Промежуточная конвертация на платформе 8.2. Сначала открываем рабочую копию конфигуратором платформы 8.2 (рекомендуется стабильный релиз ветки 8.2.19) и соглашаемся на конвертацию метаданных.
  3. Тестирование и исправление. На платформе 8.2 обязательно выполняем тестирование и исправление информационной базы. Включаем опции проверки логической и ссылочной целостности, а также реструктуризацию таблиц информационной базы.
  4. Финальный переход на платформу 8.3. Только после успешного завершения всех проверок открываем базу конфигуратором платформы 8.3 и сохраняем режим совместимости с версией 8.2.

Шаг 2. Анализ документации и автоматическая проверка конфигурации

Перед тем как пускать пользователей в систему, необходимо тщательно изучить технологические изменения платформы. Обратимся к файлу V8Update.htm, который поставляется в каталоге установки платформы 1С. Внимательно изучаем следующие разделы:

  1. Изменения, требующие изменений в конфигурациях и административных установках.
  2. Переход с предыдущей версии платформы.
  3. Изменения, влияющие на поведение системы.

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

Шаг 3. Критические изменения в синтаксисе и объектной модели

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

1. Изменение сигнатуры и поведения события «ОбработкаЗаполнения».

В платформе 8.1 процедура в модуле объекта имела один параметр:


Процедура ОбработкаЗаполнения(Основание)
    // Старый код платформы 8.1
КонецПроцедуры

Начиная с версии 8.2 сигнатура события изменилась. Теперь обработчик принимает два параметра: ДанныеЗаполнения и СтандартнаяОбработка. Кроме того, этот обработчик вызывается не только при явном вводе на основании, но и при интерактивном добавлении нового элемента из формы списка с установленным отбором. В этом случае в параметр передается не ссылка на документ-основание, а структура критериев отбора. Перепишем обработчик с учетом строгой проверки типов:


Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    Если ДанныеЗаполнения = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    // Проверяем тип входящих данных
    Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
        Контрагент = ДанныеЗаполнения.Контрагент;
        ДоговорКонтрагента = ДанныеЗаполнения.ДоговорКонтрагента;
    ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
        // Обработка заполнения по отбору из формы списка
        Если ДанныеЗаполнения.Свойство("Контрагент") Тогда
            Контрагент = ДанныеЗаполнения.Контрагент;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

2. Строгие требования к синтаксису запросов.

Платформа 8.3 предъявляет более жесткие требования к языку запросов. Например, если в предложении УПОРЯДОЧИТЬ ПО используется поле или выражение, отсутствующее в списке полей секции ВЫБРАТЬ, запрос, успешно работавший в 8.1, в новой платформе может вызывать исключение. Проанализируем правильное построение запроса:


ВЫБРАТЬ
    Заказ.Ссылка КАК Ссылка,
    Заказ.Дата КАК Дата,
    Заказ.СуммаДокумента КАК СуммаДокумента
ИЗ
    Документ.ЗаказПокупателя КАК Заказ
ГДЕ
    Заказ.Проведен = ИСТИНА
УПОРЯДОЧИТЬ ПО
    Дата УБЫВ

3. Изменение работы с подсистемами в объекте метаданных.

В платформе 8.1 многие разработчики обращались к свойству Подсистемы непосредственно у объекта конфигурации (например, Метаданные.Документы.РеализацияТоваровУслуг.Подсистемы). В новых версиях платформы состав проверяется от родительской подсистемы через ее свойство Состав:


Если Метаданные.Подсистемы.Продажи.Состав.Содержит(Метаданные.Документы.РеализацияТоваровУслуг) Тогда
    // Объект входит в подсистему
КонецЕсли;

Шаг 4. Настройка кластера серверов 1С и производительность на 200 пользователей

Для стабильной работы базы с одновременным подключением 200 пользователей в режиме обычного приложения необходимо заранее сконфигурировать серверную часть:

  1. Управление памятью рабочих процессов rphost. Сеансы толстого клиента под управлением платформы 8.3 потребляют значительно больше оперативной памяти по сравнению с 8.1. В консоли администрирования кластера серверов обязательно настраиваем параметры рабочих процессов: задаем интервал перезапуска процессов, лимит допустимой памяти на один процесс и предельный объем превышения памяти. Это предотвратит аварийное завершение сервера из-за накопленных утечек памяти.
  2. Формат журнала регистрации. По умолчанию в платформе 8.3 журнал создается в формате базы SQLite (единый файл .lgd). При 200 параллельных сеансах интенсивная запись событий в один файл порождает дисковые очереди и микрозависания. В таких условиях рекомендуется переключить журнал в классический разделенный текстовый формат (.lgf) либо оставить уровень логирования только для ошибок и предупреждений.
  3. Регламентные задания. В 8.1 регламентные задания запускались в отдельном выделенном клиентском сеансе. В 8.3 фоновые задания исполняются сервером автоматически в потоках rphost. Проверим, чтобы в модулях регламентных заданий не было обращений к интерактивным формам, предупреждениям и модальным диалогам, которые могут подвесить фоновый поток.
  4. Режим блокировок данных. Включение режима совместимости с 8.2 оставляет механизм управления транзакционными блокировками автоматическим (на уровне СУБД). Это означает, что сам по себе апгрейд платформы не избавит систему от взаимных блокировок (deadlocks) и ожидания на таблицах при проведении документов. Для реального роста пропускной способности при 200 пользователях потребуется дальнейший рефакторинг кода и переход на управляемые блокировки.

Итог

Переход с платформы 8.1 на 8.3 в режиме совместимости полностью реализуем и позволяет стандартизировать инфраструктуру. Однако он требует обязательного тестового прогона на резервной копии, ручной правки обработчиков ОбработкаЗаполнения, контроля внешних отчетов и строгой настройки параметров кластера серверов 1С.

← На главную