Динамическое обновление конфигурации в среде «1С:Предприятие» — это крайне удобный, но в то же время весьма коварный инструмент. Оно позволяет разработчикам вносить изменения в код модулей «на лету», не требуя монопольного доступа и не заставляя пользователей прерывать свою работу. Однако в случае непредвиденного сбоя сети, отключения питания или зависания сессии в момент применения этих обновлений база данных переходит в некорректное промежуточное состояние. На экране пользователей и администратора появляется блокирующая ошибка: «Обнаружена незавершенная операция сохранения конфигурации. Для продолжения работы необходимо завершить операцию...». При этом войти в систему — ни в режиме Предприятия, ни в режиме Конфигуратора — становится невозможно.
В данной статье мы подробно разберем природу этого сбоя и рассмотрим проверенные практические методы восстановления работоспособности базы данных как для файлового, так и для клиент-серверного вариантов работы.
Для того чтобы эффективно бороться с проблемой, выясним причину её возникновения. В структуре базы данных «1С:Предприятие» за хранение метаданных и программного кода отвечают специализированные системные таблицы. Наиболее важными среди них являются две:
CONFIG — таблица, в которой хранится текущая рабочая (актуальная) конфигурация базы данных, запущенная у пользователей.CONFIGSAVE — вспомогательная таблица, куда сохраняются промежуточные изменения в процессе работы разработчика в Конфигураторе до того, как они будут окончательно применены.В процессе штатного обновления (особенно динамического) платформа 1С выполняет транзакционный перенос данных из таблицы CONFIGSAVE в основную таблицу CONFIG. Чтобы контролировать целостность этого процесса, система создает в таблице CONFIG служебные маркеры записи в поле FileName:
commit — сигнализирует о начале процесса фиксации изменений;dynamicCommit — указывает на проведение именно динамического обновления;dbStruFinal — отмечает финальную стадию реструктуризации таблиц БД.Если в момент записи этих маркеров или сразу после них происходит аварийное завершение процесса, транзакция зависает. При следующей попытке авторизации платформа считывает таблицу конфигурации, обнаруживает неудаленные служебные маркеры и понимает, что целостность структуры нарушена. В результате вход полностью блокируется.
В файловом варианте базы данных у нас нет прямого доступа к 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, утилита без проблем прочитает структуру таблиц.
CONFIGSAVE. Полностью очистите все записи в этой таблице. Это удалит все незавершенные черновики конфигурации.CONFIG. Нам нужно отфильтровать записи по полю FileName.FileName значения commit, dynamicCommit и dbStruFinal. Помните: удалять нужно именно эти конкретные строки, а не всю таблицу!Tool_1CD.Шаг 4. Обратная конвертация базы данных в формат 8.3. Проанализируем ситуацию: наша база теперь очищена от проблемных транзакций, но находится в формате 8.2. Нам необходимо вернуть её в рабочий формат 8.3. Самый простой и безопасный способ сделать это — запустить Конфигуратор 1С актуальной версии платформы 8.3 и выбрать нашу базу. Платформа обнаружит устаревший формат файла и предложит автоматически конвертировать базу обратно в формат 8.3. Соглашаемся с предложением.
В случае использования клиент-серверного варианта исправить ситуацию значительно проще, так как мы имеем прямой доступ к таблицам базы данных через систему управления базами данных (СУБД). Рассмотрим процесс исправления на примере СУБД MS SQL Server.
Разберем по шагам последовательность действий администратора в среде SQL Server Management Studio (SSMS):
-- Очищаем таблицу промежуточных сохранений конфигурации
TRUNCATE TABLE configsave;
-- Удаляем зависшие маркеры незавершенной транзакции динамического обновления
DELETE FROM config WHERE FileName = 'commit';
DELETE FROM config WHERE FileName = 'dynamicCommit';
DELETE FROM config WHERE FileName = 'dbStruFinal';
После успешного выполнения данного запроса запустите службу сервера 1С. Попробуйте зайти в Конфигуратор базы данных. База должна открыться без каких-либо ошибок.
Просто запустить базу данных после сбоя — это только половина дела. Нам важно убедиться, что логическая целостность конфигурации не пострадала, а локальные кэши пользователей не содержат остатков некорректных метаданных. Выполним следующие шаги:
%userprofile%\AppData\Local\1C\1Cv8 и %userprofile%\AppData\Roaming\1C\1Cv8.Применяя данные методики на практике, вы сможете быстро локализовать и устранить последствия неудачного динамического обновления, сохранив при этом все накопленные за рабочий день данные пользователей.