К сожалению, на момент починки не смог найти статью с похожей проблемой:
//infostart.ru/public/390768/
//infostart.ru/public/391766/
Поэтому решил описать свой опыт, для более простых случаев, когда под рукой есть более-менее свежий бекап.
Итак, что имеем:
- MS SQL Server 2008 + 1C 8.2.19
- Свежий ночной бекап (если такового нет, прочтения вышеуказанных ссылок вам не избежать)
- В Предприятие зайти невозможно - дает ошибку на какой-то тип
- Конфигуратор открывается нормально, можно сохранить в файл конфигурацию и конфигурацию БД, любые другие операции с конфигурацией БД (обновление, сравнение, открытие) приводят к вылету Конфигуратора.
- Тестирование и исправление (Реструктуризация таблиц) также ведут к моментальному вылету Конфигуратора.
Поиск способа решения:
- Проверка БД средствами SQL показала что ошибок нет
- Выгрузка в dt и загрузка обратно без ошибок, но ничего не дает: успешно получаем такую же базу с битой конфигурацией.
- Загрузка конфигурации целиком из файла также безуспешно.
- Создание новой базы из сохраненной конфигурации и копирование из нее нужных данных - имена таблиц SQL будут не совпадать.
Решение:
- Делаем бекап поврежденной базы (бекапы лишними не бывают) (у меня она называется ForGamesWithRestore)!
- Сохраняем конфигурацию из поврежденной базы (если она отличается от конфигурации в бекапе).
- Разворачиваем бекап в параллельную базу (напр. назовем ее FromBackUp).
- В поврежденной базе чистим таблицу ConfigSave (это изменения конфигурации, которые не удалось применить к Конфигурации БД):
DELETE FROM ForGamesWithRestore.dbo.ConfigSave GO
- Очищаем таблицы Config, DBSchema, Params в поврежденной базе, и копируем их базы FromBackUp:
DELETE FROM ForGamesWithRestore.dbo.Config GO DELETE FROM ForGamesWithRestore.dbo.DBSchema GO DELETE FROM ForGamesWithRestore.dbo.Params GO INSERT INTO ForGamesWithRestore.dbo.Config SELECT * FROM From_BackUp.dbo.Config INSERT INTO ForGamesWithRestore.dbo.DBSchema SELECT * FROM From_BackUp.dbo.DBSchema INSERT INTO ForGamesWithRestore.dbo.Params SELECT * FROM From_BackUp.dbo.Params
-
Если структуры конфигураций базы и бекапа не отличались, то на этом все.
-
Если отличия в метаданных были, то важно понимать что на текущем этапе таблицы SQL не соответствуют структуре конфигурации, напр. в моем случае в таблице с измененным справочником присутствовали две колонки, про которые Конфигуратор не знал.
-
Пробуем обновить Конфигурацию из файла (сохраняли на шаге 2). При возникновении ошибок читаем ссылки указанные в начале