Как исправить ошибку «Обнаружена незавершенная операция сохранения конфигурации» в 1С?

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

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

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

Почему возникает эта ошибка? Разберем механику платформы

Для того чтобы эффективно бороться с проблемой, выясним причину её возникновения. В структуре базы данных «1С:Предприятие» за хранение метаданных и программного кода отвечают специализированные системные таблицы. Наиболее важными среди них являются две:

В процессе штатного обновления (особенно динамического) платформа 1С выполняет транзакционный перенос данных из таблицы CONFIGSAVE в основную таблицу CONFIG. Чтобы контролировать целостность этого процесса, система создает в таблице CONFIG служебные маркеры записи в поле FileName:

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

Решение проблемы для файловых баз данных (формат .1CD)

В файловом варианте базы данных у нас нет прямого доступа к SQL-консоли для быстрого удаления проблемных строк. Тем не менее, существует обходной технологический прием, позволяющий обойти ограничения платформы. Разберем его по шагам.

Для восстановления нам понадобятся стандартная утилита конвертации баз данных cnvdbfl.exe, входящая в комплект поставки платформы 1С, и специализированная утилита для низкоуровневого анализа файлов баз данных Tool_1CD. Основная сложность заключается в том, что старые бесплатные версии Tool_1CD часто не поддерживают современные версии формата баз данных платформы 8.3. Чтобы решить эту проблему, мы временно понизим версию структуры файла базы данных, внесем изменения и вернем всё обратно.

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

Шаг 2. Конвертация базы данных в формат платформы 8.2. Закройте все сессии 1С. Откройте командную строку Windows (cmd) от имени администратора. Перейдите в каталог установленной платформы 1С (каталог bin вашей текущей версии платформы 8.3) и выполните команду конвертации:


cd "C:\Program Files\1cv8\8.3.10.2939\bin"
cnvdbfl.exe -c -f 8.2.14 "E:\1C\Bases\Trade\1Cv8.1CD"

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

Шаг 3. Редактирование базы через утилиту Tool_1CD. Теперь запустите программу Tool_1CD и откройте в ней подготовленный файл 1Cv8.1CD. Поскольку формат теперь совместим с версией 8.2, утилита без проблем прочитает структуру таблиц.

  1. Найдите в списке таблиц таблицу с именем CONFIGSAVE. Полностью очистите все записи в этой таблице. Это удалит все незавершенные черновики конфигурации.
  2. Перейдите к таблице CONFIG. Нам нужно отфильтровать записи по полю FileName.
  3. Найдите и аккуратно удалите строки, содержащие в поле FileName значения commit, dynamicCommit и dbStruFinal. Помните: удалять нужно именно эти конкретные строки, а не всю таблицу!
  4. Сохраните изменения в файле и закройте утилиту Tool_1CD.

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

Решение проблемы для клиент-серверных баз данных (MS SQL, PostgreSQL)

В случае использования клиент-серверного варианта исправить ситуацию значительно проще, так как мы имеем прямой доступ к таблицам базы данных через систему управления базами данных (СУБД). Рассмотрим процесс исправления на примере СУБД MS SQL Server.

Разберем по шагам последовательность действий администратора в среде SQL Server Management Studio (SSMS):

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

-- Очищаем таблицу промежуточных сохранений конфигурации
TRUNCATE TABLE configsave;

-- Удаляем зависшие маркеры незавершенной транзакции динамического обновления
DELETE FROM config WHERE FileName = 'commit';
DELETE FROM config WHERE FileName = 'dynamicCommit';
DELETE FROM config WHERE FileName = 'dbStruFinal';

После успешного выполнения данного запроса запустите службу сервера 1С. Попробуйте зайти в Конфигуратор базы данных. База должна открыться без каких-либо ошибок.

Обязательные профилактические действия после восстановления

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

  1. Сброс кэша динамических обновлений: Откройте базу в режиме Конфигуратора, перейдите в меню Конфигурация -> Конфигурация базы данных и выберите пункт Вернуться к конфигурации БД. Это принудительно заставит платформу сопоставить рабочую конфигурацию с конфигурацией базы данных и очистит остаточные временные файлы реструктуризации.
  2. Тестирование и исправление: Обязательно запустите встроенную утилиту «Тестирование и исправление» (меню Администрирование -> Тестирование и исправление...). Выберите пункты «Реструктуризация таблиц информационной базы» и «Проверка логической целостности». Это гарантирует, что физические таблицы данных соответствуют описанию метаданных.
  3. Очистка кэша на компьютерах пользователей: Из-за специфики динамического обновления локальные файлы кэша на рабочих станциях пользователей могут хранить старые версии модулей. Если их не очистить, пользователи могут столкнуться с непредсказуемым поведением интерфейса или ошибками типов данных. Самый надежный способ очистки — удалить базу из списка запуска в стартере 1С и добавить её заново под тем же путем. Также можно вручную удалить содержимое папок %userprofile%\AppData\Local\1C\1Cv8 и %userprofile%\AppData\Roaming\1C\1Cv8.

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

← На главную