Каждый администратор баз данных и разработчик 1С рано или поздно сталкивается со сложными системными сбоями, которые невозможно решить стандартным тестированием и исправлением. Один из самых неприятных и пугающих сбоев — это системное сообщение «Нарушена целостность структуры конфигурации». Данная ошибка чаще всего заявляет о себе в процессе сравнения или объединения конфигураций при попытке обновиться на очередной релиз.
В этой статье мы подробно разберем, почему возникает эта ошибка, как провести глубокую диагностику СУБД и какими методами можно вернуть базу данных к жизни. Мы рассмотрим как стандартные приемы работы в Конфигураторе, так и низкоуровневые операции на уровне таблиц MS SQL Server.
Прежде чем приступать к активным действиям и деструктивным запросам, давайте разберем физическую суть проблемы. Конфигурация в системе 1С:Предприятие хранится в виде набора служебных бинарных данных прямо внутри таблиц базы данных. Если мы работаем на клиент-серверном варианте, за хранение метаданных отвечают таблицы СУБД с именами Config, ConfigSave и Params.
Нарушение целостности структуры обычно происходит по следующим причинам:
Рассмотрим пошагово рабочие сценарии устранения этой ошибки, начиная от самых простых и безопасных и заканчивая глубоким хирургическим вмешательством в таблицы SQL.
Как показывает практика практикующих специалистов и опыт обсуждения на профильных форумах, в подавляющем большинстве случаев ошибка вылетает из-за повреждения скрытой конфигурации поставщика. Конфигуратор пытается выполнить трехстороннее сравнение (Основная конфигурация, Конфигурация базы данных и Конфигурация поставщика) и падает.
Проанализируем ситуацию и выполним восстановление конфигурации поставщика по шагам:
.cf файл на диск. Если это удалось сделать, значит, основная конфигурация жизнеспособна..cf) именно того релиза, который сейчас установлен у клиента (например, 3.0.58.41). Установим его через дистрибутив или найдем на портале 1С..cf аналогичного релиза.После этой процедуры можно повторно запускать процесс штатного обновления — сравнение конфигураций должно пройти без ошибок.
Бывают критические случаи, когда Конфигуратор вообще отказывается открываться, выдавая ошибку целостности сразу при запуске. В такой ситуации нам помогут прямые SQL-запросы к таблицам базы данных. Перед выполнением любых запросов в обязательном порядке сделайте резервную копию (бэкап) базы данных средствами MS SQL Server Management Studio!
Разберем три основных сценария очистки транзакций и некорректных динамических обновлений.
Сценарий А. Откат незавершенного динамического обновления
Если система «зависла» в состоянии динамического обновления, нам необходимо принудительно очистить маркеры этого процесса в таблицах Config и Params. Выполним следующий SQL-запрос:
DELETE FROM [Имя_Вашего_Релиза_БД].[dbo].[Config] WHERE [FileName] = 'DynamicallyUpdated';
DELETE FROM [Имя_Вашего_Релиза_БД].[dbo].[Params] WHERE [FileName] = 'DynamicallyUpdated';
Сценарий Б. Очистка блокировок фиксации структуры данных
В момент реструктуризации СУБД создает временные файлы фиксации изменений. Если процесс прервался, они блокируют последующие попытки обновления. Избавимся от записей dbStruFinal и commit с помощью следующего запроса:
DELETE FROM [Имя_Вашего_Релиза_БД].[dbo].[Config] WHERE [FileName] IN ('dbStruFinal', 'commit');
Сценарий В. Сброс несохраненных изменений конфигурации
Если сбой произошел в момент редактирования метаданных до нажатия кнопки F7, проблемные объекты могут находиться в таблице редактируемой конфигурации ConfigSave. Очистим эту таблицу, чтобы откатиться к последней стабильной рабочей версии конфигурации:
TRUNCATE TABLE [Имя_Вашего_Релиза_БД].[dbo].[ConfigSave];
После выполнения указанных SQL-запросов необходимо обязательно перезапустить службу сервера 1С:Предприятия (чтобы сбросить серверный кэш метаданных) и попробовать открыть базу в Конфигураторе.
Если база данных файловая (имеет расширение файла 1Cv8.1CD), утилиты тестирования часто оказываются бессильны. Но существует проверенный инженерный лайфхак, который позволяет запустить Конфигуратор в обход ошибки целостности структуры.
Разберем этот алгоритм по шагам:
1Cv8.1CD.1Cv8_damaged.1CD).1Cv8.1CD из только что созданной пустой базы.1Cv8.1CD (который чистый) и возвращаем исходное имя нашему поврежденному файлу (переименовываем 1Cv8_damaged.1CD обратно в 1Cv8.1CD). Так как Конфигуратор уже запущен и держит сессию, операционная система позволит выполнить эту замену.В распределенных информационных базах данная ошибка часто возникает на подчиненных (периферийных) узлах из-за коллизий при приеме файла обмена. Чтобы реанимировать периферийную базу, выполним следующие шаги:
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
После этого база перейдет в автономный режим, сняв жесткие ограничения на изменение структуры метаданных.
.cf, выгруженный предварительно из главного узла. Для этого воспользуемся меню Конфигурация — Загрузить конфигурацию из файла....
ПланыОбмена.УстановитьГлавныйУзел(ПланыОбмена.НайтиПоКоду("КодГлавногоУзла"));
Иногда физическая структура базы данных абсолютно здорова, но искаженные файлы локального кэша заставляют платформу генерировать ложные сообщения об ошибках. Обычное пересоздание базы в списке запуска помогает далеко не всегда.
Для надежного результата выполним глубокую очистку:
%userprofile%\AppData\Local\1C\1Cv8%userprofile%\AppData\Roaming\1C\1Cv8srvinfo и запустим службу заново.Мы детально проанализировали системную ошибку целостности структуры конфигурации 1С и изучили пять практических методов ее решения. Помните, что залог успешного восстановления — это последовательное движение от простых методов (очистка кэша, замена конфигурации поставщика) к сложным низкоуровневым операциям в СУБД, и всегда начинайте любые работы с создания резервной копии базы данных!