В процессе разработки в среде 1С:Предприятие 8 программисты часто сталкиваются с ситуацией, когда незначительное, на первый взгляд, изменение метаданных (например, удаление точки маршрута в бизнес-процессе) приводит к невозможности запустить отладку или обновить конфигурацию базы данных. Процесс «зависает» на этапе реструктуризации таблиц, а попытки вернуть всё «как было» путем простого пересоздания объекта не приносят результата. В этой статье мы подробно разберем, почему это происходит, как правильно реагировать на длительную реструктуризацию и что делать, если база данных перестала запускаться.
Рассмотрим ситуацию: разработчик создал точку маршрута, обновил конфигурацию базы данных (F7 или F5), затем решил, что точка лишняя, и удалил её. При попытке повторного запуска система инициирует процесс реструктуризации. Даже если вы попытаетесь создать новую точку с точно таким же именем, это не решит проблему. Выясним причину такого поведения платформы.
Дело в том, что для платформы «1С:Предприятие» имя объекта (его идентификатор в коде) — это лишь внешняя оболочка. Внутри системы каждому объекту метаданных при создании присваивается уникальный внутренний идентификатор — GUID. Когда вы удаляете точку маршрута, её GUID безвозвратно стирается из структуры метаданных. Созданная заново точка с тем же именем получит новый GUID. С точки зрения базы данных — это абсолютно другой объект. Все записи в существующих таблицах (задачи, бизнес-процессы), которые ссылались на старый идентификатор, теперь указывают «в пустоту» (битые ссылки).
Часто при удалении объектов бизнес-процесса в строке состояния Конфигуратора можно заметить надписи вида: Реструктуризация РегистрСведений.КомментарииСистемы. На первый взгляд связи нет, но проанализируем ситуацию глубже. Реструктуризация смежных объектов инициируется платформой по нескольким причинам:
БизнесПроцессСсылка или ЗадачаСсылка, и для этого измерения установлено свойство «Ведущее», система обязана проверить целостность всех записей при любом изменении структуры исходного бизнес-процесса.Рассмотрим пошагово, что нужно делать, если вы столкнулись с подобной проблемой:
Конфигурация — Сравнить конфигурации (выбирая Основную конфигурацию и Конфигурацию базы данных). Это позволит увидеть реальные расхождения в GUID объектов, даже если их имена совпадают.Внимание! Никогда не завершайте работу Конфигуратора через «Диспетчер задач» во время активной реструктуризации. Это гарантированно приведет к рассогласованию структуры основной конфигурации и конфигурации базы данных. Если это уже произошло, разберем методы восстановления:
Запустите режим Администрирование — Тестирование и исправление. В настройках обязательно укажите:
Иногда Конфигуратор «видит» различия там, где их уже нет, из-за локального кэша метаданных. Попробуйте удалить временные файлы пользователя 1С в папках %AppData%\1C\1Cv8 и %LocalAppData%\1C\1Cv8.
Для файловых баз данных необходимо запустить стандартную утилиту проверки физической целостности chdbfl.exe, которая находится в папке bin установленной платформы. Это поможет восстановить структуру таблиц, если она была повреждена при аварийном завершении.
В клиент-серверном варианте, если конфигурация «застряла» в промежуточном состоянии, системные администраторы могут прибегнуть к очистке таблицы ConfigSave в базе данных SQL. Это принудительно заставит Конфигуратор забыть о недавних несохраненных изменениях и вернуться к состоянию конфигурации базы данных.
-- Пример запроса для удаления несохраненной конфигурации (выполнять только после бэкапа!)
DELETE FROM ConfigSave
Чтобы избежать подобных проблем, проанализируем правильную методику внесения изменений в работающие бизнес-процессы:
.dt архива. Это сэкономит время, затрачиваемое на длительную реструктуризацию и поиск «битых» ссылок.Подведем итог: процесс реструктуризации — это критически важная операция по синхронизации программного кода и физических таблиц СУБД. Понимание механизмов работы GUID и связей между бизнес-процессами и регистрами позволяет разработчику сохранять спокойствие и принимать верные решения даже в патовых ситуациях.