Ситуация, когда при проверке файловой базы данных утилита chdbfl.exe сообщает о повреждении таблицы (например, _Document209) и восстанавливает «0 из 3631 записей», является критической. Фактически это означает, что штатный инструмент очистил поврежденные блоки данных, чтобы вернуть файлу физическую целостность, но при этом удалил содержимое самой таблицы. В этой статье мы разберем алгоритм действий, который поможет вернуть данные, даже если стандартное восстановление не помогло.
Прежде всего, нам необходимо понять, почему так произошло. Утилита chdbfl.exe работает на уровне физической структуры файла .1CD. Если заголовок таблицы или дерево индексов повреждены настолько, что программа не может однозначно идентифицировать начало и конец записей, она принимает радикальное решение: объявить эти данные «мусором» и обнулить ссылки на них. В итоге мы получаем «здоровую» пустую таблицу.
Важное правило: никогда не запускайте chdbfl.exe без создания резервной копии файла базы данных. Если утилита уже отработала и удалила записи, восстановление возможно только из копии, сделанной ДО запуска лечения, или путем сложного совмещения данных из старых архивов и «остатков» текущей базы.
Проанализируем ситуацию, описанную в теме. Повреждена таблица _Document209, которая в данной конфигурации отвечает за документ «Заказ покупателя». Мы видим симптомы: в списках документов пусто, либо при открытии форма документа оказывается пустой, а заголовок окна сообщает, что создается «Новый» объект.
Однако в 1С данные редко хранятся в одной-единственной таблице. Структура документа в файловой базе включает в себя:
_Document209) — здесь хранятся дата, номер, ссылка на контрагента, сумма документа и другие реквизиты «шапки»._Document209_VT1500) — отдельные таблицы, где хранятся строки с товарами, услугами и количеством.Рассмотрим идею, предложенную опытными участниками: если повреждена только основная таблица, данные в табличных частях могут уцелеть. Также, если на основании заказов создавались другие документы (например, «Реализация товаров и услуг» или «Счет на оплату»), мы можем попытаться восстановить информацию о заказах, опираясь на эти связанные цепочки.
Если база всё еще открывается в режиме «1С:Предприятие» (пусть и с ошибками), попробуем программно извлечь то, что осталось. Проанализируем методику частичного переноса данных в архивную копию:
ВыгрузкаЗагрузкаДанныхXML.epf (она входит в состав состава ИТС)._Document209 могут указывать на идентификаторы (UUID), которых нет в старом архиве.Как показывает практика, после загрузки в архивную копию мы получим документы, в которых могут быть пустые поля контрагентов или номенклатуры. Чтобы этого избежать, сначала выгрузите из поврежденной базы все справочники (Контрагенты, Номенклатура, Договоры), и только после этого приступайте к загрузке документов.
Если chdbfl.exe еще не запускался, или у вас есть копия «до лечения», можно воспользоваться специализированным ПО, например Tool_1CD. Разберем, как это помогает:
Проанализируем структуру файла .1CD. Он разбит на страницы по 4 Кб. Даже если повреждена страница-заголовок таблицы, сами страницы с данными (записями о заказах) могут физически находиться в файле. Tool_1CD позволяет просматривать содержимое таблиц напрямую, игнорируя логические ошибки индексов. Мы можем экспортировать таблицу _Document209 в формат CSV или XML и затем программно восстановить объекты в чистой базе.
Если данные в основной таблице _Document209 потеряны безвозвратно (затерты нулями), но табличные части (_VT) уцелели, мы можем прибегнуть к программному восстановлению. Рассмотрим примерный алгоритм на языке 1С:
// Пример логики восстановления заголовков документов по их ТЧ
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТЧ.Ссылка КАК ПоврежденнаяСсылка
|ИЗ
| Документ.ЗаказПокупателя.Товары КАК ТЧ";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ПоврежденнаяСсылка.ПолучитьОбъект() = Неопределено Тогда
// Ссылка есть в ТЧ, но самого документа в основной таблице нет
// Здесь можно создать новый документ и попытаться заполнить его
// на основании данных из связанных Реализаций или других источников
КонецЕсли;
КонецЦикла;
Проанализируем ситуацию: в сообщении №9 автор отмечает, что номера документов могут измениться, а ссылки остаться «битыми». Чтобы минимизировать этот ущерб, при ручном восстановлении важно сохранять УникальныйИдентификатор (UUID) документа, если он сохранился в движениях регистров или табличных частях.
Выясним причины, которые приводят к повреждению таблицы _Document209. Заказы покупателей — это одна из самых часто перезаписываемых таблиц в торговых системах. Повреждения в файловом режиме (.1CD) чаще всего возникают из-за:
_Document209 «ломает» заголовок таблицы.chdbfl выдал «0 записей», сразу переходите к работе с копией, сделанной ДО запуска этой утилиты.Таким образом, даже при «нулевом» результате работы chdbfl.exe, данные часто можно спасти, используя комплексный подход: от XML-выгрузки до низкоуровневого анализа структуры таблиц.