Как правильно и без потерь перейти с платформы 1С 8.1 на 1С 8.3 для сильно измененной конфигурации

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

Перевод старых, сильно кастомизированных конфигураций (например, глубоко переработанной «Бухгалтерии предприятия» редакции 1.6) с платформы 1С:Предприятие 8.1 на современную 1С 8.3 — это сложная задача, требующая от разработчика четкого понимания внутренних механизмов работы СУБД, платформенных изменений и особенностей синтаксиса встроенного языка. В этой статье мы подробно разберем пошаговый процесс миграции, рассмотрим типичные проблемы, с которыми можно столкнуться при работе в режиме совместимости, и научимся исправлять критические ошибки в коде при полном отключении режима совместимости.

Зачем нужен переход на платформу 1С 8.3?

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

  1. Поддержка современного оборудования и ОС: Старая платформа 8.1 не оптимизирована для работы на современных серверах под управлением актуальных версий Windows Server и дистрибутивов Linux, а также имеет проблемы со стабильностью на клиентских ПК с Windows 10/11.
  2. Ограничения СУБД: Современные версии СУБД (Microsoft SQL Server, PostgreSQL, IBM DB2) некорректно работают со старыми драйверами и механизмами платформы 8.1, вызывая частые падения и утечки памяти.
  3. Интеграция с новым торговым оборудованием: Подключение современных фискальных регистраторов (онлайн-касс) по новым протоколам ФФД часто требует библиотек и механизмов платформы 8.3.
  4. Производительность и стабильность: При переходе на 8.3 (особенно при отказе от совместимости) существенно ускоряется выполнение многих операций, оптимизируется работа с памятью и механизмами блокировок.

Шаг 1: Подготовительные работы на платформе 8.1

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

Рассмотрим порядок действий на подготовительном этапе:

  1. Создадим резервную копию базы данных (резервное копирование средствами СУБД или выгрузка в файл .dt).
  2. Запустим базу в режиме Конфигуратора на платформе 8.1.
  3. Откроем меню Администрирование — Тестирование и исправление...
  4. Установим флажки напротив проверок: «Реиндексация таблиц информационной базы», «Проверка логической целостности», «Проверка ссылочной целостности» и «Реструктуризация таблиц информационной базы». При обнаружении битых ссылок выберем режим «Очищать объекты».
  5. Запустим процесс и дождемся его успешного окончания. Проверим отчет об ошибках.

Шаг 2: Промежуточная конвертация на платформу 8.2

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

Для безопасного перехода разберем двухэтапный алгоритм конвертации:

  1. Установим промежуточную платформу 1С:Предприятие 8.2 (лучше всего использовать стабильные релизы ветки 8.2, например, 8.2.19.83).
  2. Добавим нашу базу в список баз платформы 8.2 и запустим ее в режиме Конфигуратора.
  3. Платформа выдаст предупреждение: «Информационная база будет сконвертирована. Продолжить?». Нажимаем «Да».
  4. После успешной конвертации формата базы данных зайдем в свойства конфигурации (клик правой кнопкой мыши по самому верхнему элементу дерева метаданных — «Свойства»).
  5. Найдем свойство РежимСовместимости. По умолчанию там будет установлено значение «Версия 8.1». Нам необходимо перевести базу в режим совместимости «Версия 8.2.13» или полностью отключить его.

После изменения режима совместимости на платформе 8.2 обязательно запустим полную реструктуризацию и исправление базы данных (через меню «Тестирование и исправление»). Это перестроит внутренние таблицы СУБД под новые стандарты хранения данных.

Шаг 3: Переход на платформу 8.3 и выбор стабильного релиза

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

Проанализируем вопрос выбора стабильной версии платформы 8.3. Для конфигураций, построенных на обычных формах (толстый клиент), новые релизы (такие как 8.3.22, 8.3.24 и выше) могут быть избыточными и содержать внутренние ошибки обратной совместимости элементов управления. Опытные специалисты рекомендуют использовать проверенные временем LTS-релизы:

Установим выбранную платформу 8.3, добавим информационную базу в список, запустим Конфигуратор и согласимся на конвертацию формата базы данных. Теперь наша конфигурация работает под управлением ядра 8.3!

Шаг 4: Адаптация кода и исправление синтаксических ошибок

Если мы решим полностью отказаться от режима совместимости (установим свойство РежимСовместимости в значение «Не использовать»), нам придется исправить ряд критических синтаксических ошибок, которые на платформе 8.1 игнорировались, а на 8.3 вызовут жесткое падение системы при выполнении кода.

1. Ошибки в запросах при использовании РАЗЛИЧНЫЕ и УПОРЯДОЧИТЬ ПО

В платформе 8.1 допускалось использование сортировки по полям, которые не были выбраны в секции ВЫБРАТЬ, даже при наличии ключевого слова РАЗЛИЧНЫЕ. В версии 8.3 без режима совместимости такой запрос вызовет ошибку СУБД.

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	РеализацияТоваровУслуг.Контрагент КАК Контрагент
    |ИЗ
    |	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |
    |УПОРЯДОЧИТЬ ПО
    |	РеализацияТоваровУслуг.Дата";

Выясним причину ошибки: СУБД не может отсортировать уникальные строки по полю Дата, так как это поле исключено из результирующей выборки уникальности. Исправим этот запрос, добавив сортируемое поле в выборку:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	РеализацияТоваровУслуг.Контрагент КАК Контрагент,
    |	РеализацияТоваровУслуг.Дата КАК Дата
    |ИЗ
    |	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |
    |УПОРЯДОЧИТЬ ПО
    |	Дата";

2. Строгая типизация в обработчике ОбработкаЗаполнения

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

Разберем, как правильно реализовать данный обработчик в модуле документа:


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

3. Конфликты имен картинок и метаданных

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

4. Внешние обработки и диагностические отчеты

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

Шаг 5: Оптимизация СУБД и решение проблем производительности

Многие пользователи при простом переносе базы на платформу 8.3 замечают визуальное замедление работы интерфейса и проведения документов. Проанализируем причины этого явления и рассмотрим технические методы решения проблем.

1. Переход на управляемые блокировки данных

В платформе 8.1 по умолчанию использовался режим автоматических блокировок на уровне СУБД. При этом СУБД блокировала целые таблицы при проведении документов, что исключало параллельную работу пользователей. Платформа 8.3 ориентирована на управляемые блокировки.

Если вы оставите режим «Автоматический» в свойствах конфигурации на платформе 8.3, то при работе на современных СУБД (MS SQL Server, PostgreSQL) вы столкнетесь с частыми эскалациями блокировок и ошибками времени ожидания блокировки (Lock Timeout). Рекомендуется постепенно переводить критические документы (такие как реализация товаров, поступление, платежные поручения) и регистры накопления в режим управляемых блокировок.

2. Оптимизация размера страницы файловой базы данных

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

Начиная с версии платформы 8.3.8, реализована возможность изменять размер страницы файла информационной базы (по умолчанию он равен 4096 байт). Увеличив его до 65536 байт, мы увеличиваем предел размера таблиц и ускоряем операции чтения/записи.

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

  1. Завершим работу всех пользователей и закроем Конфигуратор.
  2. Найдем в каталоге установленной платформы 1С (обычно это C:\Program Files\1cv8\8.3.X.X\bin\) утилиту cnvdbfl.exe и запустим ее.
  3. Укажем путь к файлу базы данных 1Cv8.1CD.
  4. В поле «Размер страницы» выберем значение 64 Кб (65536).
  5. Установим флажок «Конвертировать» и запустим процесс. После завершения база будет работать ощутимо быстрее.

3. Реиндексация и реструктуризация таблиц

После полного отключения режима совместимости на платформе 8.3 структура некоторых таблиц (особенно таблиц фактического периода действия регистров расчета и планов видов расчета) должна быть оптимизирована. Для этого обязательно выполним тестирование и исправление информационной базы с включенными опциями «Реиндексация таблиц» и «Реструктуризация таблиц». Это создаст новые кластерные индексы и оптимизирует распределение данных в файлах СУБД.

Подведем итоги

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

← На главную