Файловый вариант базы данных 1С (файл 1cv8.1cd) является достаточно хрупкой структурой. Отключение электричества, сбои в локальной сети во время обновления или проблемы с файловой системой могут привести к тому, что база перестанет открываться, выдавая ошибки типа "Файл базы данных поврежден", "Ошибка формата потока" или "Ошибка SDBL". В этой статье мы подробно разберем, как восстановить работоспособность базы, когда стандартная утилита chdbfl.exe оказывается бессильна или делает только хуже.
Прежде чем приступать к любым манипуляциям, обязательно создадим резервную копию текущего поврежденного файла. Помните, что каждое неудачное "лечение" может безвозвратно уничтожить данные. Рассмотрим основные инструменты, которые нам понадобятся:
Проанализируем типичную ситуацию: chdbfl.exe пишет, что база в норме, но 1С вылетает при запуске. Это означает, что физическая структура файла (страницы и блоки) корректна, но нарушена логическая целостность внутренних таблиц конфигурации.
Разберем случай, когда утилита Tool_1CD выдает ошибку: "Длина файла базы не кратна длине блока" или "Длина файла в блоках и количество блоков в заголовке не равны". Это часто происходит при внезапном обрыве записи в файл.
Посмотрим на структуру файла в Hex-редакторе. Информация о размере базы хранится в самом начале (нулевой блок). Нам нужно скорректировать значение общего количества блоков так, чтобы оно соответствовало реальному размеру файла. Выясним размер файла в байтах и разделим его на размер страницы (обычно 0x1000 или 4096 байт). Полученное значение нужно записать в соответствующее смещение в заголовке файла. Это позволит утилитам "увидеть" весь файл целиком.
Если база повреждена в процессе обновления, скорее всего, пострадала таблица CONFIG. Рассмотрим, как заменить поврежденную конфигурацию на здоровую из файла .cf (выгруженной конфигурации).
Выполним следующие шаги:
Tool_1CD и найдем таблицу CONFIG. Нам нужно определить её физическое расположение в файле.{"Folder","Config", и {"Folder","ConfigSave",..cf) и подготовим её кусок для вставки.1cd. Внимание: размер вставляемого блока должен точно соответствовать структуре внутренних смещений 1С, иначе база не пройдет проверку CRC.Как показывает практика, такая "хирургическая" операция позволяет запустить конфигуратор, после чего можно будет выполнить полноценное "Тестирование и исправление".
Часто база не открывается из-за того, что в таблице CONFIGSAVE (куда записываются временные данные при обновлении) остались некорректные записи. Выясним, как это исправить:
Если мы видим, что в таблице CONFIG есть нормальные данные, а CONFIGSAVE заполнена "мусором" после неудачного обновления, мы можем просто очистить таблицу CONFIGSAVE. В Tool_1CD можно увидеть список записей этой таблицы. Удаление записей через Hex-редактор (зануление соответствующих страниц) часто приводит к тому, что 1С игнорирует незавершенное обновление и запускается на старой, стабильной версии конфигурации.
Таблица DBSCHEMA — это сердце базы данных, в ней хранится описание всех таблиц и полей. Если chdbfl.exe удалил её (а он это делает часто при малейших сбоях), 1С не сможет сопоставить объекты метаданных с физическими таблицами на диске.
Проанализируем алгоритм восстановления:
.cf файла).Tool_1CD выгрузим таблицу DBSCHEMA из пустой базы.Проанализируем ситуацию, описанную экспертами: утилита chdbfl.exe является довольно "грубым" инструментом. Она проверяет физическую корректность страниц, но не знает о логике 1С. Например, если в описании таблицы поврежден один бит, chdbfl.exe может просто удалить всю таблицу целиком вместе со всеми данными. Поэтому:
chdbfl.exe без бэкапа.Иногда возникают ошибки вида "Таблица не найдена _Document175_VT3663". Посмотрим на ситуацию: это означает, что в метаданных (таблица CONFIG) объект есть, а в физической структуре (таблица DBSCHEMA или сами страницы данных) он отсутствует.
В этом случае нам помогает создание недостающего объекта. Попробуем добавить реквизит в соответствующий документ в конфигураторе. 1С попытается реструктуризировать таблицу и может "пересоздать" недостающие элементы. Если это не помогает, придется использовать Tool_1CD для ручного добавления описания таблицы в DBSCHEMA.
Если база открывается хотя бы частично, мы можем попытаться выгрузить данные программно, минуя битые объекты. Рассмотрим пример обхода документов с обработкой исключений:
Процедура ВосстановитьДанные()
Выборка = Документы.РеализацияТоваровУслуг.Выбрать();
Пока Выборка.Следующий() Цикл
Попытка
Объект = Выборка.ПолучитьОбъект();
// Код копирования данных в новую базу
Исключение
Сообщить("Ошибка чтения документа: " + Выборка.Ссылка);
// Записываем битые ссылки в лог для ручного анализа
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Подводя итоги, отметим, что восстановление 1cd — это всегда трудоемкий процесс, требующий понимания внутренней структуры формата. Главный совет — не доверяйте автоматическим средствам исправления на 100%. Если база действительно важна, используйте Tool_1CD для анализа того, что именно повреждено, и старайтесь перенести данные в новую, чистую базу данных как можно скорее.
Золотое правило сисадмина: хранение базы на флешке — это прямой путь к потере данных. Используйте надежные накопители и настройте ежедневное автоматическое резервное копирование (лучше всего — выгрузку в .dt и копирование самого .1cd).