Ситуация, когда процесс обновления информационной базы прерывается критической ошибкой «В схеме базы данных отсутствует таблица...», является одной из самых неприятных для системного администратора или разработчика 1С. Особенность этой проблемы заключается в том, что стандартные средства проверки (такие как Тестирование и исправление или утилита chdbfl.exe) часто не находят ошибок, а выгрузка базы в файловый вариант (.dt) и вовсе проходит успешно, демонстрируя корректную работу в локальной копии. Однако при попытке вернуть данные на сервер ошибка повторяется снова и снова.
В этой статье мы подробно разберем природу данной ошибки, выясним, почему она возникает именно в серверных версиях, и рассмотрим пошаговые методы её устранения — от простых манипуляций с кэшем до глубокого восстановления таблиц через SQL-запросы.
Прежде чем приступать к лечению, давайте проанализируем ситуацию и поймем, на что именно жалуется платформа. Ошибка указывает не просто на отсутствие физической таблицы в SQL (хотя это может быть следствием), а на несоответствие в схеме базы данных. В контексте 1С:Предприятие 8.3 схема — это специальный реестр, который сопоставляет объекты метаданных (справочники, документы, константы) с их физическими именами в СУБД (например, таблица _Const7436).
В современных версиях платформы (начиная с 8.3) описание этой структуры хранится в системной таблице под названием DBSchema. Если в конфигурации объект существует, а в таблице DBSchema запись о нем повреждена или отсутствует, платформа «теряется» и выдает критическую ошибку при попытке реструктуризации данных во время обновления.
Как показывает практика и опыт участников профессиональных форумов, зачастую корень зла кроется в ошибках самой платформы. Рассмотрим подробнее ситуацию с релизом 8.3.10. В этой ветке версий был зафиксирован баг, при котором механизм обновления некорректно обрабатывал таблицы констант и итогов. Платформа могла «забыть» включить объект в бинарное описание схемы при завершении транзакции.
Порядок действий:
Если обновление платформы не помогло или вы уже используете актуальный релиз, проанализируем состояние кэша сервера приложений. Сервер 1С кэширует структуру метаданных для ускорения работы, и иногда этот кэш «протухает», продолжая транслировать неверную структуру схемы даже после исправлений в SQL.
Разберем по шагам процесс глубокой очистки:
1C:Enterprise 8.3 Server Agent.C:\Program Files\1cv8\srvinfo (или иной путь, если он менялся при установке).snccntx. Полностью удалим его содержимое. Именно здесь хранятся скомпилированные метаданные и описания конфигурации.Это «хирургический» метод, который мы рекомендуем использовать только после создания полной резервной копии базы данных средствами SQL Server. Если база в файловом варианте работает, а в серверном — нет, значит, при загрузке .dt таблица DBSchema на сервере сформировалась неверно.
Алгоритм принудительного обновления схемы:
Рассмотрим логику: если мы удалим описание схемы, 1С при запуске конфигуратора увидит, что описания нет, и попытается восстановить его на основе основной конфигурации (таблица Config).
.cf) из исправной файловой копии.
TRUNCATE TABLE DBSchema;
Внимание: В некоторых старых версиях (8.2) эти данные хранились в таблице Params с ключом dbschema. В 8.3 это отдельная таблица..cf. Это заставит систему заново сопоставить объекты метаданных с таблицами СУБД.Если система ругается на конкретную таблицу, например Const7436, нам нужно выяснить, какому объекту метаданных она соответствует. В файловом варианте, где база открывается, мы можем программно получить эту информацию.
Воспользуемся встроенным методом ПолучитьСтруктуруХраненияБазыДанных(). Создадим простую внешнюю обработку и выполним следующий код:
ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого СтрокаСтруктуры Из ТаблицаСтруктуры Цикл
Если СтрокаСтруктуры.ИмяТаблицыХранения = "Const7436" Тогда
Сообщить("Эта таблица принадлежит объекту: " + СтрокаСтруктуры.ИмяТаблицы);
КонецЕсли;
КонецЦикла;
Что это нам даст?
Выяснив, что это за объект (например, конкретная константа), мы можем попробовать следующее:
DBSchema.Иногда самым быстрым способом решения «необъяснимых» глюков серверной версии является полная переинициализация базы на уровне SQL. Посмотрим, как сделать это правильно:
.dt (раз она выгружается без ошибок)..dt в абсолютно чистую, только что созданную базу. При загрузке 1С сформирует таблицы и таблицу DBSchema «с нуля», что исключит влияние старых ошибок структуры SQL.Проанализировав ситуацию, можно сделать вывод: ошибка «В схеме базы данных отсутствует таблица» чаще всего является следствием программного сбоя платформы при работе с бинарными данными описания таблиц.
Краткий чек-лист для исправления:
.dt — это логический слепок данных, а ошибка схемы — это проблема физического представления. Поэтому «лечение» часто требует именно пересоздания физической базы на SQL-сервере.