Как исправить ошибку Не выполнено обновление информационной базы в 1С:ЗУП при переходе через несколько релизов

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

При обновлении информационных баз 1С, которые не обновлялись длительное время, специалисты часто сталкиваются с ситуацией: в Конфигураторе обновление конфигурации базы данных прошло успешно, однако при первом запуске в режиме «1С:Предприятие» система выдает сообщение «Изменился номер версии конфигурации. Будет выполнено обновление информационной базы», а затем следующее окно: «Не выполнено обновление информационной базы! Завершить работу системы?» с вариантами ответа «Да» и «Нет».

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

Причины возникновения ошибки обновления

Проанализируем архитектуру процесса обновления конфигураций на платформе 1С. Обновление любой типовой конфигурации состоит из двух независимых этапов:

  1. Обновление метаданных в Конфигураторе: добавление, изменение и удаление объектов конфигурации (справочников, документов, регистров, общих модулей).
  2. Обработка и конвертация данных в режиме «1С:Предприятие»: заполнение новых реквизитов по умолчанию, перенос информации между старыми и новыми регистрами, пересчет итогов и служебных таблиц.

За второй этап отвечает специализированный общий модуль (например, ПроцедурыОбновленияИнформационнойБазы). В нем хранится список версий и сопоставленных им процедур-обработчиков. Разработчики типовых решений с течением времени удаляют из модуля обработчики для устаревших релизов, чтобы не перегружать код.

Если база отстает на несколько десятков релизов (например, версия данных в константах 2.5.40.4, а конфигурация обновлена сразу файлом поставки до 2.5.46.1), то при запуске в режиме предприятия алгоритм проверяет номер текущей версии в константах и ищет в модуле нужный шаг обновления. Не найдя обработчиков для старой версии или столкнувшись с разрывом в цепочке версий, процедура аварийно прерывает выполнение и выводит ошибку.

Кроме того, ошибка может быть вызвана следующими факторами:

  1. Исключение при выполнении кода: сбой в конкретной процедуре заполнения данных (деление на ноль, обращение к несуществующему предопределенному значению, нарушение уникальности записей).
  2. Случайное обновление «назад»: выбор файла конфигурации младшей версии вместо старшей.
  3. Рассинхронизация номеров версий: прерывание сеанса обновления, когда метаданные обновились, а запись в служебную константу не зафиксировалась.

Шаг 1. Диагностика причины сбоя

Прежде чем приступать к исправлению, выясним точную причину остановки процедуры. Для этого выполним диагностические действия:

1. Анализ Журнала регистрации

Откроем Журнал регистрации через Конфигуратор (меню Администрирование — Журнал регистрации) или в режиме «1С:Предприятие», если доступ под полными правами возможен. Установим отбор по важности: Ошибка и Предупреждение. В журнале будет зафиксировано точное имя процедуры, строка модуля и описание исключения, приведшего к аварийной остановке.

2. Запуск в режиме отладки

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

3. Проверка номера версии в константах

Посмотрим значение константы, отвечающей за номер релиза конфигурации (например, НомерВерсииКонфигурации). Сравним ее значение с номером версии в окне Справка — О программе и в описании свойств корневого узла конфигурации поставщика.

Шаг 2. Способы решения проблемы

Разберем основные варианты исправления ситуации в зависимости от сложности случая.

Вариант 1. Поэтапное последовательное обновление (рекомендуемый способ)

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

  1. Создание резервной копии: перед началом любых работ обязательно выгрузим информационную базу в файл .dt или сделаем копию файла 1Cv8.1CD.
  2. Определение цепочки релизов: откроем файл описания поставки или таблицу обновлений и определим минимально необходимый список промежуточных релизов (например, 2.5.41.3 -> 2.5.42.4 -> 2.5.43.3 -> 2.5.44.1 -> 2.5.46.1).
  3. Последовательное обновление конфигурации: через меню Конфигурация — Поддержка — Обновить конфигурацию применяем промежуточный файл обновления (.cfu) или файл конфигурации (.cf).
  4. Запуск в режиме «1С:Предприятие»: после каждого наката промежуточного релиза обязательно запускаем базу в монопольном режиме предприятия, дожидаемся завершения регламентных процедур обновления данных и только после этого переходим к следующему релизу.

Вариант 2. Ручная синхронизация номера версии в константах

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

Посмотрим на пример кода для внешней обработки или консоли кода, позволяющего установить корректный номер релиза:


// Установка актуального номера версии в служебную константу
Константы.НомерВерсииКонфигурации.Установить("2.5.46.1");
Сообщить("Номер версии успешно обновлен.");

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

Вариант 3. Перенос процедур обновления в общий модуль

Если необходимо выполнить прямое обновление одним файлом .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С:Предприятие».

Шаг 3. Тестирование и исправление базы данных

После успешного запуска системы и завершения обновления данных рекомендуется выполнить проверку целостности таблиц:

  1. Откроем Конфигуратор в монопольном режиме.
  2. Перейдем в меню Администрирование — Тестирование и исправление...
  3. Установим флаги:
    • Реиндексация таблиц информационной базы;
    • Проверка логической целостности;
    • Проверка ссылочной целостности;
    • Пересчет итогов.
  4. Нажмем кнопку Выполнить и проверим служебные сообщения в окне вывода на отсутствие ошибок.
← На главную