Повреждение базы 1С 8.3: проверка, chdbfl, загрузка .cf и ремонт на SQL
Содержание
Если 1С сообщает, что файл поврежден, сначала закройте все сеансы и скопируйте файл базы 1Cv8.1CD в другое место. Потом запустите утилиту chdbfl.exe из папки bin платформы, а если не помогла — тестирование и исправление в Конфигураторе. Восстановить базу чаще всего удаётся без потери данных, если не пытаться «чинить» оригинал без копии.
Типичная картина: утром бухгалтер открывает базу, а вместо рабочего стола видит Файл базы данных поврежден или Ошибка формата потока. Накануне выключали свет, или ноутбук ушёл в сон посреди записи документа. Действовать стоит от безопасных шагов к радикальным: сначала копия и диагностика, потом ремонт.
Как понять, что именно повреждено
Слово «поврежден» платформа выводит в разных ситуациях. От того, какой файл сломан, зависит способ лечения. Сначала определите источник.
🔍 Где 1С показывает проблему:
- 🧱
Файл базы данных поврежден— сбой в самом файле1Cv8.1CDфайловой базы. - 📦
Ошибка формата потока— испорчен блок данных. Часто это кеш на компьютере пользователя, а не база. - 🧩
Нарушение целостности структуры конфигурации— повреждена конфигурация внутри базы. - 📄 Ошибка при загрузке
.cfили.dt— сломан сам файл выгрузки, база может быть цела. - 🗄
Ошибка СУБДс текстом от MS SQL или PostgreSQL — проблема на стороне сервера баз данных.
Что посмотреть до любых исправлений
- Откройте журнал регистрации. В файловой базе он лежит в подпапке
1Cv8Logрядом с1Cv8.1CD. Если база не открывается, просто убедитесь, что папка есть, и скопируйте её вместе с базой. - Посмотрите время последних записей. Так видно, какой документ или обработка выполнялись в момент сбоя.
- Откройте «Просмотр событий» Windows (
eventvwr.msc), журнал «Система». Ищите ошибки диска, контроллера, внезапное выключение. - Проверьте свободное место на диске. Если места не осталось, запись в 1CD обрывается на середине.
- Попробуйте открыть базу с другого компьютера. Если там она работает — виноват кеш или профиль пользователя, а не файл.
Если базу на другом компьютере открыть удалось, очистите кеш на проблемном: закройте 1С и удалите папки с длинными именами-идентификаторами в %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8. Список баз (ibases.v8i) при этом не трогайте. Для одного запуска можно добавить параметр /ClearCache в строку запуска.
Ошибки диска в журнале Windows — повод остановиться. Каждая новая попытка записи на сбоящий диск уменьшает шанс вытащить данные. Сначала скопируйте базу на исправный носитель, работайте только с копией.
Шаг 1. Утилита chdbfl.exe для файловой базы
Для файлового варианта главный инструмент — chdbfl.exe. Она входит в поставку платформы и проверяет физическую структуру файла 1CD: страницы, таблицы, индексы. Конфигуратор для этого не нужен, поэтому утилита работает, даже когда база не открывается вообще.
Перед запуском сделайте копию 1Cv8.1CD. Исправление необратимо.
Порядок работы
- Попросите всех выйти из базы. Убедитесь, что база не открыта ни на одном компьютере, включая фоновые задания и сеансы Конфигуратора.
- Скопируйте папку базы целиком в другое место, например на другой диск.
- Откройте каталог платформы:
C:\Program Files\1cv8\<номер версии>\bin\. Для 32-разрядной платформы —C:\Program Files (x86)\1cv8\.... - Запустите
chdbfl.exe. Лучше той же версии платформы, на которой работает база. - В поле «Имя файла БД» укажите путь к
1Cv8.1CD. - Сначала запустите проверку без флажка «Исправлять обнаруженные ошибки». Посмотрите, сколько ошибок и в каких таблицах.
- Затем включите флажок и запустите повторно. Дождитесь сообщения о завершении.
- Запустите проверку ещё раз без исправления. Ошибок быть не должно.
Если в ходе исправления утилита удаляет записи, они не возвращаются. Поэтому первый проход — только проверка: так вы заранее увидите масштаб и решите, не лучше ли поднять резервную копию.
Что делать после 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
Если ошибка указывает на конфигурацию («нарушение целостности структуры конфигурации», падение при открытии дерева метаданных), данные обычно целы. Чинить нужно саму конфигурацию.
Варианты по нарастающей
- Вернуться к конфигурации базы данных. Если сбой произошёл во время правки основной конфигурации, в Конфигураторе выберите
Конфигурация → Конфигурация базы данных → Вернуться к конфигурации БД. Несохранённые изменения пропадут, рабочая версия останется. - Загрузить сохранённый .cf. Меню
Конфигурация → Загрузить конфигурацию из файла. Данные пользователей при этом остаются, меняется только конфигурация. Затем платформа предложит обновить конфигурацию базы данных. - Взять .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.
Что с ними делать:
- Найдите, какая обработка или узел обмена работает с этим файлом. Путь к каталогу обмена указан в её настройках.
- Скопируйте файл в сторону, а в каталоге обмена удалите его или переименуйте. Сделайте это, когда обмен не запущен.
- Повторите выгрузку на стороне-источнике. Обработка создаст таблицу заново.
- Если файл нужен как источник данных, откройте его любой программой просмотра 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"
Пользователи к этому времени должны выйти из базы, иначе выгрузка не начнётся. Раз в месяц пробуйте развернуть копию в тестовую базу: непроверенный бэкап может оказаться таким же повреждённым файлом.
Когда восстановить базу самому не получится
Есть ситуации, где дальнейшие попытки только вредят. Остановитесь и привлеките специалиста по 1С или по восстановлению данных, если:
- 🛑
chdbfl.exeзавершается аварийно или после исправления ошибок становится больше; - 🛑 размер
1Cv8.1CDвдруг стал нулевым или в разы меньше обычного; - 🛑 в журнале Windows ошибки чтения диска, диск щёлкает или пропадает из системы;
- 🛑 тестирование удаляет объекты целыми таблицами, а свежей копии нет;
- 🛑 повреждена база на SQL, а резервных копий СУБД нет.
Что подготовить к обращению:
- Нетронутую копию повреждённого файла или базы СУБД.
- Последнюю удачную выгрузку
.dtи.cf, даже старую: из неё можно взять справочники. - Журнал регистрации (
1Cv8Log) и отчёты проверок. - Номер платформы и релиз конфигурации.
Если есть старая копия и повреждённая база, частично читаемая после ремонта, данные за последние дни переносят между ними обработками обмена или выгрузкой объектов. Это быстрее, чем вводить документы заново.