При обслуживании типовых решений 1С специалисты часто сталкиваются с ситуацией, когда стандартное обновление через поиск доступных обновлений не работает, а программа выдает пугающее сообщение: «Нарушена целостность структуры конфигурации». Проанализируем типичный случай на примере «Управления торговлей 10.3», когда в окне «О программе» указан один актуальный релиз, а в настройках поддержки — совершенно другой, безнадежно устаревший. Вместо сложного обновления устаревшей системы можно использовать готовое решение для переноса данных из УТ 10.3 в новые конфигурации 1С.
Первым делом проанализируем, как база данных оказалась в таком состоянии. Рассмотрим ситуацию: в системе числится версия 10.3.38.1, но при попытке обновления конфигуратор сообщает, что обновлений нет. Заглянув в меню Конфигурация — Поддержка — Настройка поддержки, мы обнаруживаем там древний релиз, например, 10.3.13.2.
Это классический симптом так называемого «рассинхрона». Основная конфигурация была обновлена некорректно — скорее всего, через «Сравнение и объединение» с новым файлом .cf, минуя механизм штатного обновления. При таком подходе программный код обновляется, а внутренняя «конфигурация поставщика», на которую ориентируется поиск обновлений, остается старой. В результате система пытается применить обновление, предназначенное для перехода с 13-го релиза на 14-й, к коду 38-го релиза, что и вызывает критические сбои.
Ошибка «Нарушена целостность структуры конфигурации» свидетельствует о повреждении служебных таблиц базы данных (таких как Config или ConfigCAS). Перед началом любых манипуляций обязательно создадим резервную копию базы данных. Рассмотрим последовательность действий для восстановления работоспособности:
%AppData%\Local\1C\1cv8 и %AppData%\Roaming\1C\1cv8. Часто конфигуратор «помнит» старые связи именно в локальных файлах пользователя.Администрирование — Тестирование и исправление. Обязательно выберем пункты «Реиндексация таблиц», «Проверка логической целостности» и «Проверка ссылочной целостности»..dt и загрузим его в пустую базу данных. Это позволяет пересобрать таблицы на уровне СУБД, отсекая мусорные записи.Если вышеуказанные действия не помогли, воспользуемся более радикальным методом — выгрузкой конфигурации в файлы XML. Разберем этот процесс по шагам:
Конфигурация — Выгрузить конфигурацию в файлы....Конфигурация — Загрузить конфигурацию из файлов....Этот метод часто позволяет «протащить» метаданные мимо поврежденных бинарных участков основной таблицы конфигурации.
Когда ошибка целостности устранена, нам необходимо привести конфигурацию поставщика в соответствие с фактическим кодом (в нашем примере — до версии 10.3.38.1). Посмотрим на два варианта решения этой задачи.
Если у нас есть полный файл .cf нужного релиза (того самого, который указан в окне «О программе»), выполним следующие действия:
Конфигурация — Поддержка — Настройка поддержки — Снять с поддержки.Конфигурация — Сравнить, объединить с конфигурацией из файла, выбрав наш файл .cf.Если нужного .cf файла нет, но есть старый релиз поставщика (например, 10.3.13.2), проделаем «хитрый» маневр:
.cf старого типового релиза..cfu) последовательно до нужного нам релиза (10.3.38.1)..cf.Конфигурация — Поддержка — Обновить конфигурацию, выбрав созданный нами «здоровый» файл.Иногда «умельцы» пытаются обмануть систему, просто меняя номер версии в свойствах конфигурации или константах. Посмотрим, к чему это приводит: при запуске обновления 1С ищет в файле обновления (.cfu) инструкции именно для того номера версии, который прописан в метаданных. Если номер изменен вручную, а структура таблиц осталась старой (или наоборот), программа не найдет нужных правил реструктуризации данных, что гарантированно приведет к ошибке «Нарушена целостность структуры конфигурации» в момент реструктуризации.
Рассмотрим пример кода, который часто используется в процедурах обновления для проверки версии (но который никогда не стоит пытаться обходить вручную):
// Пример логики проверки версии при обновлении
ТекущаяВерсия = Метаданные.Версия;
Если ТекущаяВерсия <> ОжидаемаяВерсия Тогда
ВызватьИсключение "Несоответствие релизов! Обновление невозможно.";
КонецЕсли;
Для корректной работы всегда используйте штатный механизм поддержки. Помните, что здоровое состояние базы — это когда версия в окне О программе, версия в Настройке поддержки и версия в регистре сведений СведенияОбОбновлениях (или аналогичном) полностью совпадают.