Ситуация, когда при попытке выгрузки информационной базы в файл .dt или при выполнении тестирования и исправления возникает ошибка «В базе данных отсутствует таблица», является одной из самых серьезных технических проблем. Она означает нарушение логической или физической целостности структуры 1Cv8.1CD (для файловых баз) или несоответствие схемы данных в SQL-версии. Разберем подробно, почему это происходит и какими методами можно восстановить работоспособность системы.
Прежде чем приступать к лечению, нам необходимо понять, какая именно таблица пропала. Зачастую платформа выдает техническое имя, например, _Enum56, _InfoReg1234 или _ResSInf18654. Для того чтобы сопоставить это имя с объектом метаданных (справочником, регистром или перечислением), проанализируем структуру базы данных. Для удобного сопоставления технических имен с объектами можно использовать обработку для анализа структуры хранения базы данных.
Рассмотрим использование встроенного метода платформы. Для этого в консоли запросов или внешней обработке выполним следующий код:
СтруктураБД = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Таблица Из СтруктураБД Цикл
Если Таблица.ИмяТаблицыХранения = "_Enum56" Тогда // Замените на ваше имя
Сообщить("Проблемный объект: " + Таблица.ИмяТаблицы);
КонецЕсли;
КонецЦикла;
Выяснив, какой объект «потерял» таблицу, мы сможем выбрать наиболее подходящую стратегию восстановления.
Если база открывается в режиме Конфигуратора, попробуем заставить систему пересоздать недостающую таблицу средствами самой платформы. Рассмотрим этот процесс по шагам:
1Cv8.1CD).Проанализируем ситуацию: иногда добавление значения в перечисление срабатывает лучше, чем создание нового справочника, так как система более жестко проверяет состав таблиц перечислений при обновлении.
Если стандартная реструктуризация не помогает и ошибка блокирует любые действия, разберем более сложный, но эффективный метод, требующий использования сторонних утилит. Этот способ основан на том, что утилита Tool_1CD лучше работает с форматом базы 8.2.14.
Рассмотрим алгоритм действий:
cnvdbfl.exe (она находится в папке bin платформы). Выполняем команду в консоли:
cnvdbfl.exe -c -f 8.2.14 D:\Base\1Cv8.1CD
Tool_1CD. Переходим на закладку «Дополнительно» и выбираем пункт «Найти потерянные объекты». Система выведет список таблиц, которые описаны в структуре, но отсутствуют физически.Tool_1CD, находим нужные таблицы и выполняем «Экспорт текущей таблицы».cnvdbfl.exe.Посмотрим на ситуацию с другой стороны: если физическая структура таблиц разрушена, мы можем попытаться выгрузить данные на уровне объектов метаданных, минуя механизм .dt. Рассмотрим два варианта:
data_dump.zip. Этот механизм более устойчив к отсутствию вспомогательных таблиц итогов. Затем загрузим этот файл в пустую базу того же релиза.ВыгрузкаЗагрузкаДанныхXML.epf. Мы можем выгружать данные по частям, исключая тот объект, который вызывает ошибку. После загрузки в чистую базу недостающие данные можно будет восстановить вручную или из других источников.Если ваша база работает на MS SQL Server или PostgreSQL, у нас появляется возможность прямого вмешательства. Выясним причину ошибки: часто 1С «думает», что таблица должна быть, потому что она описана в таблице DBSCHEMA, но в самой СУБД её нет.
Проанализируем шаги для SQL:
.dt достаточно просто наличия таблицы с нужным именем..dt. Платформа увидит таблицу, «подцепит» её и позволит завершить процесс..dt в новую базу. При загрузке 1С сама сформирует правильную структуру таблиц.Иногда «виновником» ошибки становятся таблицы регистрации изменений. Они имеют префикс _ChangeRec. Рассмотрим, как это исправить:
Если отсутствует таблица регистрации изменений, попробуем удалить узел плана обмена, к которому она относится, или полностью очистить регистрацию изменений для этого узла программно. После удаления узла 1С автоматически должна удалить (или пересоздать при необходимости) соответствующие таблицы БД.
Также проверим расширения конфигурации. Если расширение добавляло свои реквизиты в объекты, а потом было некорректно удалено, в структуре могли остаться «хвосты». Попробуем временно отключить все расширения и запустить тестирование и исправление. Для быстрого отключения можно воспользоваться обработкой для группового управления расширениями конфигурации.
Многие пользователи первым делом запускают chdbfl.exe. Важно понимать: эта утилита проверяет физическую целостность файла (целостность страниц, индексов, заголовков). Если таблица отсутствует логически (её нет в списке таблиц внутри файла, хотя конфигурация её ждет), chdbfl.exe может отрапортовать, что «ошибок не обнаружено». Это не значит, что база здорова, это лишь сигнал к тому, что нужно переходить к методам реструктуризации или ручного восстановления таблиц, описанным выше.
Резюме: Исправление ошибки «В базе данных отсутствует таблица» требует комплексного подхода. Начните с простого изменения конфигурации для вызова реструктуризации. Если это не помогает, используйте метод с Tool_1CD для файловых баз или манипуляции на уровне SQL для серверных. Всегда держите под рукой копию файла 1Cv8.1CD до начала любых исправлений.