Сбой операционной системы или внезапное отключение электропитания компьютера нередко приводят к повреждению файловых баз 1С:Предприятие (файлов .1CD). Одной из наиболее распространенных и неприятных проблем в такой ситуации становится сообщение «Ошибка формата потока». При этом программа может аварийно завершать работу сразу при попытке открыть базу, зависать при открытии дерева метаданных в конфигураторе или прерывать штатную процедуру тестирования и исправления.
Разберем природу данной неисправности, выясним, почему стандартные средства проверки не всегда помогают, и рассмотрим пошаговые методы полного восстановления работоспособности информационной базы.
В файловой базе 1С данные метаданных, системные настройки и параметры сеансов пользователей хранятся в упакованном виде (потоки бинарных данных, сжатые алгоритмами Deflate или LZO). При аварийном падении Windows кэш дисковой подсистемы сбрасывается некорректно, что приводит к повреждению заголовков сжатых блоков или смещению внутренних указателей. Чаще всего сбой затрагивает следующие внутренние таблицы:
Штатная утилита проверки chdbfl.exe выполняет только физическую проверку целостности страниц файла и цепочек свободных блоков. Она не производит валидацию и распаковку каждого сжатого потока метаданных внутри полей BLOB. Поэтому утилита часто сообщает об отсутствии ошибок, хотя база продолжает выдавать сбой при открытии.
Прежде чем переходить к редактированию таблиц базы, исключим повреждение локального кэша платформы на клиентском компьютере. Выполним следующие действия:
1Cv8.1CD. Это действие сбрасывает идентификатор базы и пересоздает временные рабочие папки.%LocalAppData%\1C\1cv8 и %AppData%\1C\1cv8.8.3).Если интерактивный вход в конфигуратор приводит к зависанию при чтении метаданных, применим механизм пакетного обновления. Данный метод позволяет перезаписать поврежденный поток метаданных эталонным файлом поставщика (.cf) без открытия графического интерфейса дерева конфигурации.
Для выполнения операции найдем типовой файл конфигурации той же версии (например, релиз 2.0.60.4) и выполним команду через командную строку Windows:
"C:\Program Files\1cv8\8.3.10.2667\bin\1cv8.exe" DESIGNER /F "C:\Bases\MyBase" /LoadCfg "C:\Distr\1cv8.cf" /UpdateDBCfg
Параметр /LoadCfg принудительно перезаписывает таблицы CONFIG и CONFIGSAVE, а ключ /UpdateDBCfg применяет изменения к структуре базы данных. Если в базе включена авторизация, добавим параметры /N "ИмяПользователя" /P "Пароль".
Если конфигуратор запускается, но интерактивное тестирование прерывается ошибкой, запустим проверку логической и ссылочной целостности в пакетном режиме с выводом протокола в лог-файл:
"C:\Program Files\1cv8\8.3.10.2667\bin\1cv8.exe" DESIGNER /F "C:\Bases\MyBase" /IBCheckAndRepair -ReIndex -LogAndRefsIntegrity -RecalcTotals -Out "C:\Bases\repair_log.txt"
Также попробуем выполнить аварийную выгрузку информационной базы в файл выгрузки .dt:
"C:\Program Files\1cv8\8.3.10.2667\bin\1cv8.exe" DESIGNER /F "C:\Bases\MyBase" /DumpIB "C:\Bases\backup_recovered.dt"
Если выгрузка завершится успешно, создадим новую пустую базу и загрузим полученный .dt файл. При загрузке платформа пересоздает физическую структуру файла базы данных и упаковывает потоки заново.
В ситуациях, когда доработанная конфигурация не открывается, а типового файла поставки нет, воспользуемся архивной копией базы (даже устаревшей). Если с момента создания архива структура метаданных (состав реквизитов, справочников и документов) не менялась, перенесем таблицы конфигурации из архива в поврежденную базу.
1Cv8.1CD.CONFIG и CONFIGSAVE из старого рабочего архива.F7.Если ошибка формата потока появляется только при старте предприятия под определенным пользователем или при открытии конкретного документа, причиной является повреждение сериализованных настроек формы.
Для устранения сбоя выполним очистку записей в таблицах _SYSTEMSETTINGS, _COMMONSETTINGS и _USERSSETTINGS. Удаление этих записей приведет к сбросу сохраненных пользовательских настроек (расположение колонок, сохраненные отборы в формах списков), но полностью сохранит учетные данные (документы, справочники, проводки и регистры) и позволит восстановить нормальный вход в программу.
Если восстановить целостность конфигурации поврежденного файла невозможно, применим методику переноса данных: