Перевод старых, сильно кастомизированных конфигураций (например, глубоко переработанной «Бухгалтерии предприятия» редакции 1.6) с платформы 1С:Предприятие 8.1 на современную 1С 8.3 — это сложная задача, требующая от разработчика четкого понимания внутренних механизмов работы СУБД, платформенных изменений и особенностей синтаксиса встроенного языка. В этой статье мы подробно разберем пошаговый процесс миграции, рассмотрим типичные проблемы, с которыми можно столкнуться при работе в режиме совместимости, и научимся исправлять критические ошибки в коде при полном отключении режима совместимости.
Казалось бы, если конфигурация старая и успешно работает на платформе 8.1, зачем тратить время и ресурсы на переход? Рассмотрим основные технические причины:
Прежде чем приступать к конвертации базы данных, мы должны убедиться, что исходная база не содержит логических и физических ошибок. Любые скрытые дефекты структуры метаданных на новой платформе могут привести к аварийному завершению работы конфигуратора или потере данных.
Рассмотрим порядок действий на подготовительном этапе:
.dt).Опыт крупных миграций показывает, что «прямой прыжок» с платформы 8.1 на современные релизы 8.3 (особенно выше версии 8.3.15) практически всегда приводит к критическим сбоям при конвертации формата базы данных. Платформа 8.3 просто отказывается корректно обрабатывать старую структуру СУБД.
Для безопасного перехода разберем двухэтапный алгоритм конвертации:
8.2.19.83).РежимСовместимости. По умолчанию там будет установлено значение «Версия 8.1». Нам необходимо перевести базу в режим совместимости «Версия 8.2.13» или полностью отключить его.После изменения режима совместимости на платформе 8.2 обязательно запустим полную реструктуризацию и исправление базы данных (через меню «Тестирование и исправление»). Это перестроит внутренние таблицы СУБД под новые стандарты хранения данных.
После того как база успешно запущена и протестирована на платформе 8.2, мы можем переходить к финальной конвертации на 8.3.
Проанализируем вопрос выбора стабильной версии платформы 8.3. Для конфигураций, построенных на обычных формах (толстый клиент), новые релизы (такие как 8.3.22, 8.3.24 и выше) могут быть избыточными и содержать внутренние ошибки обратной совместимости элементов управления. Опытные специалисты рекомендуют использовать проверенные временем LTS-релизы:
8.3.10.2580 или 8.3.10.2650 — наиболее стабильные сборки для работы со старыми конфигурациями «Бухгалтерии предприятия» в режиме совместимости.8.3.12.1790 (или последние релизы ветки 8.3.12) — идеальный выбор, если планируется полное отключение режима совместимости.Установим выбранную платформу 8.3, добавим информационную базу в список, запустим Конфигуратор и согласимся на конвертацию формата базы данных. Теперь наша конфигурация работает под управлением ядра 8.3!
Если мы решим полностью отказаться от режима совместимости (установим свойство РежимСовместимости в значение «Не использовать»), нам придется исправить ряд критических синтаксических ошибок, которые на платформе 8.1 игнорировались, а на 8.3 вызовут жесткое падение системы при выполнении кода.
РАЗЛИЧНЫЕ и УПОРЯДОЧИТЬ ПОВ платформе 8.1 допускалось использование сортировки по полям, которые не были выбраны в секции ВЫБРАТЬ, даже при наличии ключевого слова РАЗЛИЧНЫЕ. В версии 8.3 без режима совместимости такой запрос вызовет ошибку СУБД.
Рассмотрим пример некорректного кода запроса:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| РеализацияТоваровУслуг.Контрагент КАК Контрагент
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|
|УПОРЯДОЧИТЬ ПО
| РеализацияТоваровУслуг.Дата";
Выясним причину ошибки: СУБД не может отсортировать уникальные строки по полю Дата, так как это поле исключено из результирующей выборки уникальности. Исправим этот запрос, добавив сортируемое поле в выборку:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| РеализацияТоваровУслуг.Контрагент КАК Контрагент,
| РеализацияТоваровУслуг.Дата КАК Дата
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|
|УПОРЯДОЧИТЬ ПО
| Дата";
ОбработкаЗаполненияВ платформе 8.1 обработчик события заполнения документа мог принимать параметры произвольного типа и не требовал строгой валидации. В 1С 8.3 при снятом режиме совместимости необходимо обязательно проверять входящие данные. Если передать в процедуру нетипизированное значение или пустую ссылку, выполнение прервется с ошибкой.
Разберем, как правильно реализовать данный обработчик в модуле документа:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения)
// Выполняем обязательную проверку типа входного параметра
Если ДанныеЗаполнения = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") Тогда
// Разберем логику заполнения на основании поступления
ЭтотОбъект.Контрагент = ДанныеЗаполнения.Контрагент;
ЭтотОбъект.ДоговорКонтрагента = ДанныеЗаполнения.ДоговорКонтрагента;
ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
// Заполнение из переданной структуры параметров
Если ДанныеЗаполнения.Свойство("Контрагент") Тогда
ЭтотОбъект.Контрагент = ДанныеЗаполнения.Контрагент;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
При отключении режима совместимости платформа 8.3 может выдать синтаксические ошибки при компиляции конфигурации из-за совпадения имен некоторых системных картинок со свойствами конфигурации. Например, в старой «Бухгалтерии предприятия 1.6» встроенные картинки могут конфликтовать с новыми системными ресурсами. Решается это простым переименованием или удалением дублирующих картинок в ветке метаданных Общие — Общие картинки.
Обратите внимание на встроенные диагностические отчеты и регламентированные обработки. В режиме совместимости 8.1 они могли загружаться динамически как внешние файлы. На платформе 8.3 при снятой совместимости внешние файлы конфигураций 8.1 не откроются без предварительной конвертации. Рекомендуется заблаговременно встроить все критически важные внешние отчеты и обработки непосредственно в состав метаданных конфигурации и исправить синтаксические ошибки через механизм проверки конфигурации (клавиша F7 в конфигураторе).
Многие пользователи при простом переносе базы на платформу 8.3 замечают визуальное замедление работы интерфейса и проведения документов. Проанализируем причины этого явления и рассмотрим технические методы решения проблем.
В платформе 8.1 по умолчанию использовался режим автоматических блокировок на уровне СУБД. При этом СУБД блокировала целые таблицы при проведении документов, что исключало параллельную работу пользователей. Платформа 8.3 ориентирована на управляемые блокировки.
Если вы оставите режим «Автоматический» в свойствах конфигурации на платформе 8.3, то при работе на современных СУБД (MS SQL Server, PostgreSQL) вы столкнетесь с частыми эскалациями блокировок и ошибками времени ожидания блокировки (Lock Timeout). Рекомендуется постепенно переводить критические документы (такие как реализация товаров, поступление, платежные поручения) и регистры накопления в режим управляемых блокировок.
Если база данных используется в файловом варианте, у вас есть отличная возможность значительно ускорить ее работу и обойти старое ограничение файлового формата на максимальный размер одной таблицы в 4 Гб.
Начиная с версии платформы 8.3.8, реализована возможность изменять размер страницы файла информационной базы (по умолчанию он равен 4096 байт). Увеличив его до 65536 байт, мы увеличиваем предел размера таблиц и ускоряем операции чтения/записи.
Разберем, как выполнить эту процедуру с помощью утилиты тестирования файловых баз cnvdbfl.exe:
C:\Program Files\1cv8\8.3.X.X\bin\) утилиту cnvdbfl.exe и запустим ее.1Cv8.1CD.После полного отключения режима совместимости на платформе 8.3 структура некоторых таблиц (особенно таблиц фактического периода действия регистров расчета и планов видов расчета) должна быть оптимизирована. Для этого обязательно выполним тестирование и исправление информационной базы с включенными опциями «Реиндексация таблиц» и «Реструктуризация таблиц». Это создаст новые кластерные индексы и оптимизирует распределение данных в файлах СУБД.
Перевод старой измененной конфигурации с платформы 8.1 на платформу 8.3 — это выполнимая задача, если придерживаться строгой последовательности шагов. Не пытайтесь конвертировать базу напрямую. Обязательно используйте промежуточную платформу 8.2 для исправления синтаксических ошибок в запросах и обработчиках. Отключив режим совместимости и настроив блокировки данных, вы получите стабильно работающую систему на современной технологической платформе.