Сбой в работе файловой базы данных 1С — кошмар любого системного администратора и программиста. Одной из наиболее опасных и трудноустранимых проблем является ошибка СУБД: «Ошибка SQL: таблица не найдена». Она указывает на нарушение физической или логической целостности файла базы данных 1cv8.1cd, когда конфигурация «знает» о существовании таблицы (например, конкретного документа или регистра), но физически в структуре базы этой таблицы больше нет.
В этой статье мы подробно рассмотрим причины возникновения этой ошибки, разберем поведение стандартных инструментов диагностики и предложим детальную пошаговую инструкцию по восстановлению базы данных с использованием низкоуровневых утилит Tool_1CD и cnvdbfl.exe.
В файловом варианте работы вся база данных хранится в одном бинарном файле 1cv8.1cd. Внутри него организована собственная файловая система СУБД от компании 1С. Ошибка отсутствия таблицы чаще всего происходит по следующим причинам:
1cv8.exe в момент записи транзакции.При возникновении любых проблем пользователи первым делом запускают проверку утилитой chdbfl.exe. Она проверяет базу на уровне физической структуры страниц данных. Если утилита натыкается на сильно поврежденные страницы, которые она не может прочитать или восстановить, её алгоритм действует радикально: она просто удаляет поврежденные блоки данных целиком.
В результате после успешного отчета chdbfl.exe о «восстановлении физической целостности» база запускается, но при попытке открыть конкретный документ (например, Заявку на кассовый расход) или провести его, система выдает ошибку СУБД. Утилита удалила поврежденную таблицу вместе с метаданными, и теперь платформа 1С не может обнаружить её физическую структуру в файле.
Прежде чем приступать к восстановлению, нам необходимо точно выяснить, какая именно таблица была повреждена или удалена. В тексте ошибки обычно фигурирует внутреннее имя таблицы СУБД (например, _Document156 или _AccumRg21395).
Если база запускается в режиме «1С:Предприятие», мы можем сопоставить техническое имя таблицы с реальным объектом метаданных конфигурации. Для этого запустим следующую команду в программном коде внешней обработки:
ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого СтрокаТаблицы Из ТаблицаСтруктуры Цикл
Если СтрокаТаблицы.ИмяТаблицыХранения = "_Document156" Тогда
Сообщить("Потерянная таблица принадлежит объекту: " + СтрокаТаблицы.ИмяМетаданных);
КонецЕсли;
КонецЦикла;
Если база не запускается в пользовательском режиме, сопоставить имя можно путем открытия архивной (здоровой) копии этой же базы через утилиту Tool_1CD в режиме просмотра.
Важнейшее правило: любые низкоуровневые манипуляции с файлом базы данных можно производить только после создания резервной копии!
1cv8.1cd в надежную отдельную директорию.Рассмотрим детальный алгоритм, который позволяет обойти ограничение «Read-Only» в Tool_1CD и вернуть потерянную таблицу на место.
Этап А. Понижение версии формата базы данных
Нам необходимо временно сконвертировать базу данных в старый формат платформы 8.2 (версия 8.2.14), с которым утилита Tool_1CD умеет работать в режиме записи.
cd "C:\Program Files\1cv8\8.3.22.1709\bin"
cnvdbfl.exe для поврежденной базы данных, указав целевой формат 8.2.14:
cnvdbfl.exe -c -f 8.2.14 "C:\MyBases\BrokenBase\1cv8.1cd"
cnvdbfl.exe -c -f 8.2.14 "C:\MyBases\ArchiveBase\1cv8.1cd"
Этап Б. Экспорт и импорт таблицы через Tool_1CD
Теперь обе базы находятся в редактируемом формате 8.2.14.
1cv8.1cd._Document156)._Document156 в файле базы данных. Даже если данные внутри нее будут устаревшими (из старого бэкапа), физическая целостность схемы данных будет полностью восстановлена.Этап В. Обратная конвертация базы в формат 8.3
После успешного импорта таблицы базу необходимо вернуть в рабочий формат актуальной платформы.
cnvdbfl.exe -c -f 8.3.8 "C:\MyBases\BrokenBase\1cv8.1cd"
После проведения этих процедур база данных вернется в штатный режим работы: документы будут проводиться, а обновление конфигурации (в том числе через cf-файл) выполнится без ошибок СУБД.
Если повреждения базы настолько серьезные, что низкоуровневые утилиты выдают ошибки при конвертации, но при этом база все еще открывается в режиме «1С:Предприятие», можно применить альтернативный высокоуровневый метод:
Мы проанализировали причины возникновения ошибки «Таблица не найдена» и рассмотрели два надежных сценария её устранения. Помните, что регулярное создание резервных копий штатными средствами и отказ от небезопасных динамических обновлений уберегут вашу систему от критических сбоев!