Повреждение базы 1С 8.3: проверка, chdbfl, загрузка .cf и ремонт на SQL

· 10 мин

Содержание

Если 1С сообщает, что файл поврежден, сначала закройте все сеансы и скопируйте файл базы 1Cv8.1CD в другое место. Потом запустите утилиту chdbfl.exe из папки bin платформы, а если не помогла — тестирование и исправление в Конфигураторе. Восстановить базу чаще всего удаётся без потери данных, если не пытаться «чинить» оригинал без копии.

Типичная картина: утром бухгалтер открывает базу, а вместо рабочего стола видит Файл базы данных поврежден или Ошибка формата потока. Накануне выключали свет, или ноутбук ушёл в сон посреди записи документа. Действовать стоит от безопасных шагов к радикальным: сначала копия и диагностика, потом ремонт.

Как понять, что именно повреждено

Слово «поврежден» платформа выводит в разных ситуациях. От того, какой файл сломан, зависит способ лечения. Сначала определите источник.

🔍 Где 1С показывает проблему:

  • 🧱 Файл базы данных поврежден — сбой в самом файле 1Cv8.1CD файловой базы.
  • 📦 Ошибка формата потока — испорчен блок данных. Часто это кеш на компьютере пользователя, а не база.
  • 🧩 Нарушение целостности структуры конфигурации — повреждена конфигурация внутри базы.
  • 📄 Ошибка при загрузке .cf или .dt — сломан сам файл выгрузки, база может быть цела.
  • 🗄 Ошибка СУБД с текстом от MS SQL или PostgreSQL — проблема на стороне сервера баз данных.

Что посмотреть до любых исправлений

  1. Откройте журнал регистрации. В файловой базе он лежит в подпапке 1Cv8Log рядом с 1Cv8.1CD. Если база не открывается, просто убедитесь, что папка есть, и скопируйте её вместе с базой.
  2. Посмотрите время последних записей. Так видно, какой документ или обработка выполнялись в момент сбоя.
  3. Откройте «Просмотр событий» Windows (eventvwr.msc), журнал «Система». Ищите ошибки диска, контроллера, внезапное выключение.
  4. Проверьте свободное место на диске. Если места не осталось, запись в 1CD обрывается на середине.
  5. Попробуйте открыть базу с другого компьютера. Если там она работает — виноват кеш или профиль пользователя, а не файл.

Если базу на другом компьютере открыть удалось, очистите кеш на проблемном: закройте 1С и удалите папки с длинными именами-идентификаторами в %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8. Список баз (ibases.v8i) при этом не трогайте. Для одного запуска можно добавить параметр /ClearCache в строку запуска.

Ошибки диска в журнале Windows — повод остановиться. Каждая новая попытка записи на сбоящий диск уменьшает шанс вытащить данные. Сначала скопируйте базу на исправный носитель, работайте только с копией.

Диагностика: выберите симптом

Шаг 1. Утилита chdbfl.exe для файловой базы

Для файлового варианта главный инструмент — chdbfl.exe. Она входит в поставку платформы и проверяет физическую структуру файла 1CD: страницы, таблицы, индексы. Конфигуратор для этого не нужен, поэтому утилита работает, даже когда база не открывается вообще.

Перед запуском сделайте копию 1Cv8.1CD. Исправление необратимо.

Порядок работы

  1. Попросите всех выйти из базы. Убедитесь, что база не открыта ни на одном компьютере, включая фоновые задания и сеансы Конфигуратора.
  2. Скопируйте папку базы целиком в другое место, например на другой диск.
  3. Откройте каталог платформы: C:\Program Files\1cv8\<номер версии>\bin\. Для 32-разрядной платформы — C:\Program Files (x86)\1cv8\....
  4. Запустите chdbfl.exe. Лучше той же версии платформы, на которой работает база.
  5. В поле «Имя файла БД» укажите путь к 1Cv8.1CD.
  6. Сначала запустите проверку без флажка «Исправлять обнаруженные ошибки». Посмотрите, сколько ошибок и в каких таблицах.
  7. Затем включите флажок и запустите повторно. Дождитесь сообщения о завершении.
  8. Запустите проверку ещё раз без исправления. Ошибок быть не должно.

Если в ходе исправления утилита удаляет записи, они не возвращаются. Поэтому первый проход — только проверка: так вы заранее увидите масштаб и решите, не лучше ли поднять резервную копию.

Что делать после chdbfl

Утилита чинит физический уровень. Логические связи (ссылки документов на справочники, итоги регистров) она не восстанавливает. Поэтому сразу после неё переходите к тестированию в Конфигураторе.

Шаг 2. Тестирование и исправление в Конфигураторе

Этот режим работает и для файловых, и для клиент-серверных баз. Нужен монопольный доступ: пользователи должны выйти.

Путь в Конфигураторе: Администрирование → Тестирование и исправление.

Какие флажки ставить

ПроверкаЧто делаетКогда включать
Реиндексация таблицПерестраивает индексыПочти всегда
Проверка логической целостностиИщет нарушения внутренней структурыВсегда
Проверка ссылочной целостностиИщет «битые» ссылки на удалённые объектыВсегда после сбоя
Пересчёт итоговПересчитывает итоги регистровЕсли отчёты показывают странные остатки
Сжатие таблицУбирает удалённые записиПо желанию, долго на больших базах
Реструктуризация таблицПересоздаёт таблицыТолько если остальное не помогло, работает дольше всего

Ниже флажков есть настройки на случай найденных проблем. Для битых ссылок безопаснее выбрать «Создавать объекты»: платформа создаст объекты-заглушки, и вы потом увидите, какие документы ссылались на пропавшие данные. «Очищать ссылки» и «Удалять объекты» стирают следы, восстановить по ним уже не получится.

Сначала запустите режим «Тестирование» (без исправления), прочитайте отчёт. Затем — «Тестирование и исправление».

Запуск из командной строки

Если Конфигуратор падает при открытии формы, тот же набор проверок запускается пакетно:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /F"D:\Bases\Buh" /N"Администратор" /P"" /IBCheckAndRepair -ReIndex -LogAndRefsIntegrity -RecalcTotals -BadRefCreate -BadDataCreate /Out"D:\Bases\check.log"

Номер версии в пути подставьте свой. Результат проверки окажется в файле check.log. Чтобы только проверить без исправления, добавьте ключ -TestOnly.

Шаг 3. Восстановление конфигурации из файла .cf

Если ошибка указывает на конфигурацию («нарушение целостности структуры конфигурации», падение при открытии дерева метаданных), данные обычно целы. Чинить нужно саму конфигурацию.

Варианты по нарастающей

  1. Вернуться к конфигурации базы данных. Если сбой произошёл во время правки основной конфигурации, в Конфигураторе выберите Конфигурация → Конфигурация базы данных → Вернуться к конфигурации БД. Несохранённые изменения пропадут, рабочая версия останется.
  2. Загрузить сохранённый .cf. Меню Конфигурация → Загрузить конфигурацию из файла. Данные пользователей при этом остаются, меняется только конфигурация. Затем платформа предложит обновить конфигурацию базы данных.
  3. Взять .cf из шаблонов поставки. Для типовой конфигурации без доработок подойдёт файл 1Cv8.cf из каталога шаблонов, по умолчанию %APPDATA%\1C\1cv8\tmplts\. Релиз должен совпадать с тем, что стоял в базе, иначе загрузка обновит базу на другой релиз.

Если в конфигурации были доработки, загрузка «чистого» типового .cf их сотрёт. Внешние обработки и расширения не затрагиваются, но правки в основной конфигурации пропадут. Сначала найдите свой .cf с доработками или выгрузку из хранилища.

Если сломан сам файл .cf или .dt

Ошибка формата потока при загрузке выгрузки говорит, что файл не дочитан до конца. Причины: обрыв копирования, сбойная флешка, выгрузка, сделанная из уже повреждённой базы.

  • 📁 Возьмите предыдущую копию из архива.
  • 🔁 Если исходная база ещё открывается — выгрузите заново: Конфигурация → Сохранить конфигурацию в файл или Администрирование → Выгрузить информационную базу.
  • 🔢 Сравните размер файла с размером прошлых выгрузок: обрезанный файл заметно меньше.

Загрузка .dt в новую пустую базу — сама по себе хороший способ ремонта. Таблицы создаются заново, мелкие дефекты структуры исчезают. Но если база слишком повреждена, выгрузка .dt прерывается ошибкой: тогда сначала chdbfl и тестирование, потом выгрузка.

DBF-таблицы обмена: CorrExchange.dbf и похожие

Иногда в тексте ошибки фигурирует не 1CD, а файл .dbf — например, CorrExchange.dbf. Такие таблицы не входят в файловую базу 1С 8.3. Их создают обработки обмена с внешними программами или со старыми базами на 7.7, которые хранят данные в формате DBF.

Что с ними делать:

  1. Найдите, какая обработка или узел обмена работает с этим файлом. Путь к каталогу обмена указан в её настройках.
  2. Скопируйте файл в сторону, а в каталоге обмена удалите его или переименуйте. Сделайте это, когда обмен не запущен.
  3. Повторите выгрузку на стороне-источнике. Обработка создаст таблицу заново.
  4. Если файл нужен как источник данных, откройте его любой программой просмотра DBF. Часто испорчен только заголовок с числом записей, а сами строки читаются.

💡 Данные обмена вторичны: они всегда есть в базе-источнике. Поэтому DBF-файл проще пересоздать, чем чинить.

Клиент-серверные базы на MS SQL и PostgreSQL

В клиент-серверном варианте файла 1CD нет, и chdbfl.exe здесь не применяется. Данные хранит СУБД, у неё свои инструменты проверки.

MS SQL Server

Проверка базы выполняется командой:

DBCC CHECKDB ('buh_base') WITH NO_INFOMSGS, ALL_ERRORMSGS;

Если ошибок нет — повреждения на уровне СУБД нет, и дальше работает тестирование и исправление в Конфигураторе. Если ошибки есть, лучший путь — восстановить базу из резервной копии SQL. При полной модели восстановления и наличии копий журнала транзакций можно откатиться на момент перед сбоем.

Параметр REPAIR_ALLOW_DATA_LOSS у DBCC CHECKDB удаляет повреждённые страницы вместе с данными. Он требует однопользовательского режима базы, то есть все сеансы 1С будут прерваны. Это крайняя мера, только на копии и только когда резервной копии нет.

PostgreSQL

У PostgreSQL нет прямого аналога CHECKDB. Практичная проверка — сделать полный дамп pg_dump: если он проходит без ошибок, все таблицы читаются. Ошибка дампа покажет таблицу, на которой чтение ломается. Расширение amcheck проверяет индексы. Дальше — восстановление из резервной копии или тестирование и исправление в Конфигураторе.

Кеш сервера 1С

Ошибка формата потока в клиент-серверной базе иногда вызывает не СУБД, а испорченный сеансовый кеш сервера 1С. Его очищают при остановленной службе агента сервера, удаляя временные данные сеансов в каталоге кластера.

Остановка службы сервера 1С обрывает работу всех пользователей всех баз на этом сервере. Делайте это вечером или по согласованию, предупредив людей заранее.

Как не допустить повторного повреждения базы

Восстановить базу один раз — полдела. Важнее понять, почему она сломалась, и убрать причину.

Частые причины и что с ними делать

  • ⚡ Отключение питания во время записи. Поставьте ИБП на компьютер или сервер, где лежит база.
  • 🌐 Файловая база в общей сетевой папке на нестабильной сети. Обрыв Wi-Fi посреди проведения документа портит файл. Для 5 и более активных пользователей разумнее веб-публикация или клиент-серверный вариант.
  • 🛡 Антивирус проверяет 1CD во время работы. Добавьте каталог базы в исключения.
  • 💾 Изношенный диск. Следите за S.M.A.R.T., при первых ошибках переносите базу.
  • 📉 Нехватка места. Держите на диске запас хотя бы в размер двух файлов базы: он нужен и для работы, и для тестирования.

Резервное копирование

Схема, которая выручает в реальных авариях:

Что копироватьКак частоГде хранить
Выгрузка .dtЕжедневно, ночьюНа другом диске и вне офиса
Копия 1Cv8.1CD при закрытой базеЕжедневноНа другом диске
.cf с доработкамиПосле каждой правкиРядом с выгрузками
Бэкап СУБД (для SQL)Полный раз в сутки, журнал — чащеНа отдельном сервере

Ночную выгрузку файловой базы можно поставить в Планировщик заданий Windows:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /F"D:\Bases\Buh" /N"Администратор" /P"" /DumpIB"E:\Backup\buh_%date:~-4%%date:~3,2%%date:~0,2%.dt" /Out"E:\Backup\dump.log"

Пользователи к этому времени должны выйти из базы, иначе выгрузка не начнётся. Раз в месяц пробуйте развернуть копию в тестовую базу: непроверенный бэкап может оказаться таким же повреждённым файлом.

Проверка резервного копирования
Выполнено: 0 / 6

Когда восстановить базу самому не получится

Есть ситуации, где дальнейшие попытки только вредят. Остановитесь и привлеките специалиста по 1С или по восстановлению данных, если:

  • 🛑 chdbfl.exe завершается аварийно или после исправления ошибок становится больше;
  • 🛑 размер 1Cv8.1CD вдруг стал нулевым или в разы меньше обычного;
  • 🛑 в журнале Windows ошибки чтения диска, диск щёлкает или пропадает из системы;
  • 🛑 тестирование удаляет объекты целыми таблицами, а свежей копии нет;
  • 🛑 повреждена база на SQL, а резервных копий СУБД нет.

Что подготовить к обращению:

  1. Нетронутую копию повреждённого файла или базы СУБД.
  2. Последнюю удачную выгрузку .dt и .cf, даже старую: из неё можно взять справочники.
  3. Журнал регистрации (1Cv8Log) и отчёты проверок.
  4. Номер платформы и релиз конфигурации.

Если есть старая копия и повреждённая база, частично читаемая после ремонта, данные за последние дни переносят между ними обработками обмена или выгрузкой объектов. Это быстрее, чем вводить документы заново.

Частые вопросы

Можно ли работать в базе после chdbfl, если ошибок больше нет?
Да, но сначала выполните тестирование и исправление в Конфигураторе и проверьте ключевые отчёты: оборотно-сальдовую ведомость, остатки по складам. Утилита не проверяет логические связи данных.
Почему ошибка формата потока появляется только у одного пользователя?
Почти всегда это кеш на его компьютере. Очистите кеш платформы в профиле пользователя или запустите 1С с параметром /ClearCache.
Помогает ли обновление платформы при повреждении базы?
Само по себе нет. Но если база создана старой версией, а chdbfl той же версии не справляется, утилита из актуальной платформы иногда исправляет больше ошибок. Работайте только с копией.
Сколько длится тестирование и исправление?
Зависит от размера базы и выбранных флажков. База на несколько гигабайт с реиндексацией и проверкой ссылок проверяется от десятков минут до нескольких часов. Реструктуризация добавляет время.
Что лучше: чинить базу или поднять вчерашнюю копию?
Если копия свежая, а работы за день немного — быстрее и надёжнее поднять копию и ввести документы заново. Ремонт оправдан, когда копии старые или за день проведено много операций.