Каждый специалист 1С рано или поздно сталкивается с критической ситуацией, когда файловая база данных внезапно перестает открываться как в режиме «1С:Предприятие», так и в режиме «Конфигуратор». При этом система выдает сообщение вида «Ошибка при выполнении операции с информационной базой: Файл базы данных поврежден 1Cv8.1CD», а штатная утилита проверки сообщает: «Повреждена таблица размещения внутреннего файла». Разберем детально причины возникновения такой неполадки, особенности диагностики и последовательность шагов по спасению информации.
Файловая база данных 1С представляет собой структурированный контейнер 1Cv8.1CD, разделенный на блоки (страницы) стандартного размера 4096 байт (в более новых форматах — до 64 КБ). Если файл подвергается некорректным внешним воздействиям, физические цепочки страниц разрываются, что приводит к невозможности прочитать метаданные или системную таблицу FILES.
Выделим основные предпосылки появления таких ошибок:
Проанализируем размер файла на диске: в неповрежденной базе общий размер файла в байтах должен быть строго кратен размеру страницы (4096). Некратность указывает на физическое обрезание файла операционной системой или драйвером диска.
Штатная утилита chdbfl.exe выполняет только физическую проверку файловой структуры. Важно понимать алгоритм ее работы: наткнувшись на поврежденный заголовок или блок, указывающий за пределы физического размера файла, утилита просто отсекает испорченную ветку. В результате после автоматического «исправления» целые таблицы (например, регистры или документы) могут полностью исчезнуть из базы, уменьшив размер файла на сотни мегабайт.
Перед любыми манипуляциями всегда создаем резервную копию поврежденного файла 1Cv8.1CD простым копированием в безопасный каталог.
Если после работы утилиты или при попытке штатного тестирования и исправления платформа аварийно падает с генерацией дампа памяти, применим методику локализации проблемы и переноса данных в чистую структуру.
_InfoRg7616), выясним, какому объекту конфигурации она соответствует. Для этого в исправной копии базы или аналогичной конфигурации выполним программный анализ структуры..cf) того же релиза.Посмотрим на пример кода, с помощью которого можно выяснить назначение физической таблицы по ее внутреннему системному имени:
ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого СтрокаТаблицы Из ТаблицаСтруктуры Цикл
Если СтрокаТаблицы.ИмяТаблицыХранения = "InfoRg7616" Тогда
Сообщить("Имя объекта: " + СтрокаТаблицы.Имя);
Сообщить("Назначение: " + СтрокаТаблицы.Назначение);
КонецЕсли;
КонецЦикла;
Если поврежденной таблицей оказывается служебный регистр сведений (например, РегистрСведений.ПараметрыОбменаДанными), утрата его записей не влияет на финансовые итоги и проводки. В таком случае его можно безопасно очистить программно или пропустить при переносе.
Для полной очистки конкретного регистра сведений, создающего ошибку при обращении, используем стандартную очистку набора записей без загрузки данных:
Набор = РегистрыСведений.ПараметрыОбменаДанными.СоздатьНаборЗаписей();
// Записываем пустой набор без отбора для очистки таблицы
Набор.Записать(Истина);
Если база повреждена на уровне таблицы FILES (описания конфигурации), восстановить внутреннюю целостность файла платформенными средствами невозможно. Оптимальным решением будет следующий алгоритм:
.cf требуемого релиза (выгруженный из аналогичной базы либо полученный из дистрибутива обновления).chdbfl.exe, убеждаясь в полном отсутствии физических ошибок структуры.Чтобы исключить повторение сбоев файловых таблиц, рекомендуем реализовать комплекс системных мер:
1CD.*.1CD, *.1CL, *.cfl в постоянные исключения антивирусного сканера.