При обновлении информационных баз 1С, которые не обновлялись длительное время, специалисты часто сталкиваются с ситуацией: в Конфигураторе обновление конфигурации базы данных прошло успешно, однако при первом запуске в режиме «1С:Предприятие» система выдает сообщение «Изменился номер версии конфигурации. Будет выполнено обновление информационной базы», а затем следующее окно: «Не выполнено обновление информационной базы! Завершить работу системы?» с вариантами ответа «Да» и «Нет».
В этой статье разберем, почему возникает данная ошибка, как устроена процедура обновления данных в типовых конфигурациях и как правильно выполнить накат обновлений без потери служебной информации.
Проанализируем архитектуру процесса обновления конфигураций на платформе 1С. Обновление любой типовой конфигурации состоит из двух независимых этапов:
За второй этап отвечает специализированный общий модуль (например, ПроцедурыОбновленияИнформационнойБазы). В нем хранится список версий и сопоставленных им процедур-обработчиков. Разработчики типовых решений с течением времени удаляют из модуля обработчики для устаревших релизов, чтобы не перегружать код.
Если база отстает на несколько десятков релизов (например, версия данных в константах 2.5.40.4, а конфигурация обновлена сразу файлом поставки до 2.5.46.1), то при запуске в режиме предприятия алгоритм проверяет номер текущей версии в константах и ищет в модуле нужный шаг обновления. Не найдя обработчиков для старой версии или столкнувшись с разрывом в цепочке версий, процедура аварийно прерывает выполнение и выводит ошибку.
Кроме того, ошибка может быть вызвана следующими факторами:
Прежде чем приступать к исправлению, выясним точную причину остановки процедуры. Для этого выполним диагностические действия:
1. Анализ Журнала регистрации
Откроем Журнал регистрации через Конфигуратор (меню Администрирование — Журнал регистрации) или в режиме «1С:Предприятие», если доступ под полными правами возможен. Установим отбор по важности: Ошибка и Предупреждение. В журнале будет зафиксировано точное имя процедуры, строка модуля и описание исключения, приведшего к аварийной остановке.
2. Запуск в режиме отладки
Запустим базу из Конфигуратора в режиме отладки (клавиша F5). В меню Отладка — Настройка остановки по ошибке включим флаг Останавливаться по ошибке. При возникновении исключения отладчик остановит выполнение на конкретной строке общего модуля, что позволит увидеть контекст ошибки и значения переменных.
3. Проверка номера версии в константах
Посмотрим значение константы, отвечающей за номер релиза конфигурации (например, НомерВерсииКонфигурации). Сравним ее значение с номером версии в окне Справка — О программе и в описании свойств корневого узла конфигурации поставщика.
Разберем основные варианты исправления ситуации в зависимости от сложности случая.
Это самый надежный метод обновления сильно устаревших баз, гарантирующий корректную конвертацию всех регистров и справочников.
.dt или сделаем копию файла 1Cv8.1CD.2.5.41.3 -> 2.5.42.4 -> 2.5.43.3 -> 2.5.44.1 -> 2.5.46.1)..cfu) или файл конфигурации (.cf).Если анализ журнала регистрации и кода показал, что между текущей версией в константах и новой версией конфигурации не было существенных изменений в структуре данных (или процедуры обновления фактически отработали, но сбой произошел на финальной стадии записи номера версии), можно обновить константу вручную.
Посмотрим на пример кода для внешней обработки или консоли кода, позволяющего установить корректный номер релиза:
// Установка актуального номера версии в служебную константу
Константы.НомерВерсииКонфигурации.Установить("2.5.46.1");
Сообщить("Номер версии успешно обновлен.");
После изменения значения константы повторно запустим систему в обычном режиме. Если модули не требуют отработки пропущенных процедур, запуск пройдет штатно.
Если необходимо выполнить прямое обновление одним файлом .cf сразу на финальный релиз без промежуточных запусков, можно временно перенести недостающие процедуры обработки данных из промежуточных релизов в модуль ПроцедурыОбновленияИнформационнойБазы.
Рассмотрим структуру регистрации обработчиков в коде общего модуля:
// Пример фрагмента таблицы переходов версий
НомераВерсийРелизов.Вставить("2.5.40", "2.5.40.4");
НомераВерсийРелизов.Вставить("2.5.41", "2.5.41.3");
НомераВерсийРелизов.Вставить("2.5.42", "2.5.42.4");
НомераВерсийРелизов.Вставить("2.5.43", "2.5.43.3");
НомераВерсийРелизов.Вставить("2.5.44", "2.5.44.1");
НомераВерсийРелизов.Вставить("2.5.46", "2.5.46.1");
Добавив недостающие вызовы процедур и алгоритмы миграции данных в модуль обновленной конфигурации, мы обеспечим последовательное выполнение всех этапов конвертации за один запуск в режиме «1С:Предприятие».
После успешного запуска системы и завершения обновления данных рекомендуется выполнить проверку целостности таблиц: