В процессе обновления конфигурации или применения динамического обновления программисты и администраторы иногда сталкиваются с ситуацией, когда платформа начинает «ругаться» на отсутствие или наличие несуществующего поля в таблицах базы данных MS SQL Server (например, колонки Fld38683 в табличной части Document229.VT2818). Попытки вручную удалить или добавить эту колонку средствами SQL Server Management Studio обычно только усугубляют ситуацию. Разберем по шагам, почему возникает эта ошибка и как корректно восстановить работоспособность информационной базы.
Платформа 1С:Предприятие хранит информацию о структуре данных сразу в нескольких местах:
Document229 и VT2818).Config (или Params): содержит упакованную структуру метаданных (файл DBNames), согласно которой платформа строит SQL-запросы.Когда вы удаляете колонку через SQL-запрос ALTER TABLE ... DROP COLUMN, физическое поле исчезает из MS SQL, но запись о нем остается в бинарных данных конфигурации базы данных. При выполнении любой операции 1С продолжает формировать SQL-запросы с упоминанием «удаленного» поля, что приводит к критической ошибке СУБД. Именно поэтому ручные правки структуры базы данных в SQL Server категорически не рекомендуются.
Проанализируем основные факторы, приводящие к рассогласованию структуры метаданных и физических таблиц:
Часто проблема кроется в том, что рабочий процесс сервера 1С (rphost) удерживает в памяти устаревшую схему метаданных. Разберем порядок действий для очистки сеансового кэша:
snacc* и временные файлы сеансов).%LocalAppData%\1C\1cv8 и %AppData%\1C\1cv8).Если конфигуратор открывается, попробуем сбросить незавершенные изменения и вернуть конфигурацию к заведомо исправному состоянию:
ConfigSave..cf), с которого производилось обновление, через меню Конфигурация -> Загрузить конфигурацию из файла... и выполните обновление базы данных (клавиша F7).При сбоях во время обновления в таблице Config могут оставаться служебные флаги транзакций. Проанализируем SQL-запросы, которые помогают сбросить заблокированное состояние обновления:
DELETE FROM Config WHERE FileName = 'commit';
DELETE FROM Config WHERE FileName = 'dbStruFinal';
Важно: Выполняйте данные SQL-запросы только после создания полного бэкапа базы данных MS SQL. После выполнения запросов обязательно перезапустите службу сервера 1С.
Если конфигуратор успешно запускается, разберем выполнение штатной процедуры проверки целостности:
Если структура таблицы повреждена безвозвратно, рассмотрим самый надежный вариант сохранения накопленных данных:
.cf).