При коллективной разработке в 1С часто используется механизм хранилища конфигурации. Однако иногда случаются сбои, и разработчик видит сообщение: "Нарушена целостность структуры конфигурации". После этой ошибки база может перестать открываться в конфигураторе (выкидывает сразу после ввода пароля), а создание новой чистой базы и подключение к этому же хранилищу возвращает ту же самую ошибку. Давайте разберем по шагам, как диагностировать и устранить эту проблему, а также как попытаться спасти "мучительный код", который еще не был помещен в основную ветку.
В первую очередь проанализируем самые простые причины. Ошибка может быть вызвана рассинхронизацией закэшированных данных платформы. Нам нужно очистить не только локальный кэш пользователя 1С, но и кэш самого хранилища.
Кэш хранилища находится непосредственно в каталоге, где развернуто само хранилище. Посмотрим на структуру папок в каталоге хранилища и удалим временные файлы (папки с кэшем). Также не лишним будет выполнить проверку физической целостности локальной файловой базы с помощью утилиты chdbfl.exe. Если база не открывается, этот шаг может вернуть ее к жизни.
Если кэш очищен, а ошибка сохраняется, значит, повреждена внутренняя структура самого хранилища. Самый быстрый путь для восстановления рабочего процесса — "отодвинуть" старое хранилище в сторону (переименовать папку) и создать новое на основе актуальной рабочей конфигурации (CF-файла).
.cf..cf.Минус этого метода — мы теряем историю версий и те изменения, которые были сделаны, но не дошли до рабочей базы.
Если нам критически важно вытащить последнюю версию конфигурации напрямую из сломанного хранилища (когда конфигуратор не открывается), воспользуемся пакетным режимом запуска 1С. Этот метод позволяет напрямую обратиться к хранилищу в обход пользовательского интерфейса.
Рассмотрим команду, которую необходимо выполнить в консоли (cmd):
1cv8.exe DESIGNER /DepotF "C:\Path\To\Depot" /DepotN "ИмяПользователя" /DepotP "Пароль" /DepotDumpCfg "C:\Backup\Dump.cf" -v-1
Где ключ -v-1 означает выгрузку последней актуальной версии. Вы также можете подставить конкретный номер версии, если последняя окончательно битая. Если команда отработает успешно, мы получим файл .cf, который можно загрузить в новую базу.
Проанализируем ситуацию для клиент-серверных баз. Иногда ошибка кроется в самой базе разработчика, где остались следы неудачного сохранения или "зависшего" фонового обновления. В этом случае мы можем напрямую очистить проблемные записи в таблицах SQL. Внимание: перед этими действиями обязательно сделайте бэкап базы средствами СУБД!
Запустим SQL Server Management Studio и выполним следующие запросы для очистки следов прерванного сохранения:
DELETE FROM Config WHERE FileName = 'dbStruFinal';
DELETE FROM Config WHERE FileName = 'commit';
Если параллельно пыталось примениться динамическое обновление, удалим его следы:
DELETE FROM Config WHERE FileName = 'DynamicallyUpdated';
DELETE FROM Params WHERE FileName = 'DynamicallyUpdated';
Также иногда помогает полная очистка таблицы ConfigSave, в которой хранятся несохраненные данные конфигурации. В крайнем случае, можно перенести содержимое таблицы Config из полностью идентичной рабочей базы-донора.
Что делать, если база была файловая, она не открывается, а код еще не был отправлен в хранилище? В таком случае мы можем использовать сторонние утилиты для парсинга файловых баз 1С (например, Tool_1CD). Эти программы читают файл 1Cv8.1CD на низком уровне.
Мы сможем открыть внутренние таблицы базы, найти записи с измененными модулями и вытащить их в виде простого текста. Да, это кропотливый ручной труд, но он спасет написанный "мучительный код" от полного уничтожения.
Выясним причину, почему хранилище может "ломаться". Чаще всего это происходит из-за того, что разработчики подключаются к одному хранилищу с разных версий платформы (например, 8.3.22.x и 8.3.23.x). В отличие от инфобаз, хранилище не всегда жестко блокирует такое подключение, что приводит к повреждению его файлов. Рекомендуется жестко регламентировать использование единой версии платформы у всех участников команды.
Кроме того, если на машинах разработчиков или на сервере установлены нелицензионные "пропатченные" файлы (например, замененный файл backbas.dll) или эмуляторы ключей защиты HASP, встроенная защита платформы 1С может блокировать нормальную работу конфигуратора и выдавать ложные сообщения о нарушении целостности. Решением будет полная очистка системы от эмуляторов и переустановка оригинального дистрибутива 1С.