Ситуация, когда при обновлении конфигурации происходит сбой, является одной из самых неприятных для администратора или программиста 1С. Особенно критично это выглядит в файловом варианте работы, когда база перестает пускать пользователя как в режим «Предприятие», так и в «Конфигуратор». При попытке входа система выдает зацикленные сообщения: «При обновлении данных после последней реструктуризации произошла критическая ошибка» и «Обнаружена незавершенная операция сохранения конфигурации». Проблема заключается в том, что внутри файла .1CD установился флаг незавершенной транзакции обновления, и стандартные средства, такие как chdbfl.exe, зачастую оказываются бессильны.
В этой статье мы подробно разберем, почему возникает эта ошибка, и рассмотрим проверенные методы восстановления работоспособности базы данных, сохранив при этом накопленные за день документы.
Давайте проанализируем, что происходит «под капотом» 1С в момент обновления. Когда мы нажимаем «Обновить конфигурацию базы данных» (F7), платформа выполняет несколько этапов:
CONFIGSAVE.CONFIGSAVE в таблицу CONFIG.Если на этапе реструктуризации или переноса данных происходит аварийное завершение (выключение света, системная ошибка, нехватка памяти), база остается в «подвешенном» состоянии. Она «думает», что процесс обновления еще идет, и блокирует любые другие действия, чтобы не допустить нарушения целостности данных.
Этот метод считается наиболее надежным и эффективным. Он заключается в том, чтобы вручную заменить «битые» таблицы конфигурации в поврежденной базе на исправные таблицы из резервной копии или из «чистой» базы. При этом сами данные (документы, справочники) останутся нетронутыми.
Рассмотрим последовательность действий:
1Cv8.1CD, обязательно скопируйте его в отдельную папку. Это «золотое правило» при работе с низкоуровневыми утилитами.cnvdbfl.exe, которая находится в папке bin платформы 1С. Выполним команду:
cnvdbfl.exe -c -f 8.2.14 "C:\ПутьКБазе\1Cv8.1CD"
Это позволит «пересобрать» файл, что иногда само по себе исправляет мелкие ошибки заголовка.Tool_1CD откроем этот исправный файл. Перейдем на закладку «Дополнительно» и выполним «Экспорт текущей таблицы» для таблиц CONFIG и CONFIGSAVE. Сохраните их в виде файлов на диске.Tool_1CD. Нам необходимо выполнить «Импорт текущей таблицы» для CONFIG и CONFIGSAVE, выбрав ранее сохраненные файлы из исправной копии.Если база не дает зайти в графический интерфейс, мы можем попытаться отдать команду платформе на откат изменений через ключ запуска. Рассмотрим использование параметра /RollbackCfg. Этот ключ предназначен именно для возврата основной конфигурации к состоянию конфигурации базы данных.
Попробуем запустить 1С из командной строки (cmd) со следующими параметрами:
"C:\Program Files\1cv8\8.3.X.XXXX\bin\1cv8.exe" DESIGNER /F "C:\ПутьКБазе" /RollbackCfg
Где 8.3.X.XXXX — версия вашей платформы. Если операция пройдет успешно, система сбросит незавершенные изменения конфигурации, и вы сможете войти в Конфигуратор в обычном режиме.
Иногда информация о незавершенном обновлении «застревает» в служебной таблице PARAMS. Проанализируем ситуацию: в этой таблице хранятся настройки информационной базы и флаги различных состояний. Одним из таких флагов является запись DBConfigUpdate.
С помощью Tool_1CD или специализированных скриптов 1CDLib можно найти в таблице PARAMS строки, отвечающие за обновление, и удалить их. Обычно это строки с идентификаторами:
DBConfigUpdateDBSchemaConfigDBSchemaConfigSaveВнимание: Удаление строк в таблицах вручную — это радикальная мера. Делайте это только тогда, когда у вас есть копия базы!
Автор темы упомянул, что обновлял печатную форму динамически. Динамическое обновление — это механизм, который позволяет вносить изменения без выгона пользователей, но он часто приводит к кэшированию ошибок. Если база «зависла» именно на динамическом обновлении, попробуем очистить кэш на сервере (для клиент-сервера) или локально (для файловой базы).
Разберем, как полностью вычистить локальный кэш:
%AppData%\1C\1cv8%LocalAppData%\1C\1cv8В некоторых случаях это помогает системе «забыть» о незавершенной транзакции, если данные в самой базе фактически успели записаться, но локальный индекс пользователя сообщает об обратном.
В платформе 8.3 предусмотрены механизмы автоматического завершения обновления. Попробуем запустить базу в режиме «Предприятие» со специальным ключом:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F "C:\ПутьКБазе" /C ЗапуститьОбновлениеИнформационнойБазы
Этот параметр инициирует процедуры обновления метаданных, которые прописаны в модуле обновления вашей конфигурации (например, в БСП). Хотя это редко помогает при блокировке самого входа, в ряде случаев это может «протолкнуть» зависшую реструктуризацию.
Чтобы больше не сталкиваться с необходимостью «лечить» файл базы данных вручную, давайте внесем в свою работу несколько простых правил:
1Cv8.1CD. Это занимает минуту, но экономит часы восстановления.Мы рассмотрели несколько путей решения проблемы — от простых ключей запуска до сложного восстановления таблиц через Tool_1CD. В большинстве случаев комбинация экспорта/импорта таблиц CONFIG и конвертации файла через cnvdbfl возвращает базу к жизни, позволяя продолжить работу без потери данных.