База 1С сбоит: как найти повреждение и вернуть её в рабочее состояние

· 11 мин

Содержание

Лечение базы 1С начинается с копии и диагностики, а не с кнопки «Исправить». Порядок такой: сделать копию каталога или выгрузку .dt, для файловой базы прогнать утилиту chdbfl.exe, затем запустить в Конфигураторе Администрирование → Тестирование и исправление. Для клиент-серверной базы сначала проверяют саму СУБД (DBCC CHECKDB в MS SQL), и только потом — средствами 1С.

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

Диагностика базы 1С: что говорят симптомы

Первое, что нужно сделать, — понять, повреждены ли данные на самом деле. Часто «больная база» на деле страдает от испорченного кэша клиента, зависшего сеанса или нехватки места на диске.

Соберите факты до любых действий:

  • 🖥️ Где ошибка — у одного пользователя или у всех. Если у одного, почти наверняка виноват локальный кэш или профиль.
  • 📄 Точный текст сообщения — скопируйте его целиком, включая строку после «по причине:».
  • 🕒 Когда началось — после обновления конфигурации, отключения света, переноса базы на другой диск.
  • 📂 Тип базы — файловая (каталог с 1Cv8.1CD) или клиент-серверная (на сервере 1С и СУБД).
  • 💾 Свободное место — на диске с базой, на диске с временными файлами и на сервере СУБД.

Таблица «симптом → вероятная причина»

СимптомГде искать причинуС чего начать
Ошибка формата потока при открытии формы или отчётаКэш клиента, реже — повреждённые данные конфигурацииЗапуск с /ClearCache, затем тестирование
Файл базы данных поврежденСтраницы файла 1Cv8.1CDchdbfl.exe с исправлением
Нарушение целостности структуры конфигурацииСбой при сохранении или обновлении конфигурацииВосстановление из копии, .cf поставщика
Отчёт показывает остатки, которых нет в документахИтоги регистровПересчёт итогов
Конфликт блокировок при выполнении транзакцииДолгая транзакция другого сеансаЖурнал регистрации, список сеансов
База открывается очень долго у всехНехватка ресурсов, разросшиеся таблицы, статистика СУБДПрофилактика, обслуживание СУБД

Сначала исключите кэш

Если ошибка у одного пользователя, очистите кэш, прежде чем трогать базу. Самый быстрый способ — добавить параметр /ClearCache в строку запуска или в поле «Дополнительные параметры запуска» в настройках базы в окне выбора информационных баз.

Радикальный вариант — закрыть все окна 1С на этом компьютере и удалить папки с именами-идентификаторами (вида GUID) внутри:

%APPDATA%\1C\1cv8
%LOCALAPPDATA%\1C\1cv8

Файлы ibases.v8i и папки, которые не похожи на GUID, не трогайте: в первом хранится список баз пользователя.

Подготовка к лечению: копия и монопольный режим

Любое исправление начинается с резервной копии. Тестирование в режиме исправления удаляет или очищает «битые» объекты, и откатить это без копии невозможно.

Что подготовить:

  1. Предупредите пользователей и назначьте окно, когда в базе никто не работает . Для тестирования и исправления нужен монопольный доступ, то есть все сеансы должны быть завершены.
  2. Для файловой базы скопируйте весь каталог с файлом 1Cv8.1CD в другое место. Если база открывается — дополнительно сделайте выгрузку: в Конфигураторе Администрирование → Выгрузить информационную базу.
  3. Для клиент-серверной базы сделайте полный бэкап средствами СУБД (в MS SQL — BACKUP DATABASE, в PostgreSQL — pg_dump).
  4. Проверьте свободное место. Тестирование со сжатием и реструктуризацией временно требует места, сопоставимого с размером базы.

Завершение чужих сеансов обрывает работу людей: несохранённый документ пропадёт. В типовых конфигурациях на БСП удобнее сначала установить блокировку через Администрирование → Обслуживание → Блокировка работы пользователей с понятным сообщением и временем начала.

Для клиент-серверной базы сеансы видны и в консоли администрирования кластера: узел базы → «Сеансы». Там же можно поставить блокировку начала сеансов в свойствах информационной базы.

Встроенные утилиты для лечения базы 1С

У платформы два инструмента. Они делают разную работу и дополняют друг друга.

ИнструментДля каких базЧто лечитКогда запускать
chdbfl.exeТолько файловыеФизическую структуру файла 1Cv8.1CDПервым, если база не открывается или ругается на повреждение файла
Тестирование и исправление в КонфигуратореФайловые и клиент-серверныеЛогическую и ссылочную целостность, индексы, итогиПосле chdbfl или сразу, если файл цел
Средства СУБДКлиент-серверныеСтраницы и индексы на уровне MS SQL / PostgreSQLДо тестирования средствами 1С

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

Утилита лежит в каталоге bin установленной платформы, например C:\Program Files\1cv8\8.3.24.1548\bin\chdbfl.exe. Номер в пути — ваша версия платформы.

  1. Закройте все сеансы базы.
  2. Запустите chdbfl.exe от имени администратора.
  3. В поле «Имя файла БД» укажите путь к 1Cv8.1CD.
  4. Сначала запустите проверку без галочки «Исправлять обнаруженные ошибки» — так вы увидите масштаб повреждений.
  5. Если ошибки найдены, сделайте ещё одну копию файла и запустите проверку с этой галочкой.

Утилита работает только с файлом, который никто не держит открытым. Если она сообщает, что файл занят, проверьте, не висит ли процесс 1cv8.exe в диспетчере задач, в том числе у других пользователей терминального сервера.

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

Путь: Конфигуратор → Администрирование → Тестирование и исправление…. В окне отмечаются проверки и выбирается режим.

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

Ниже выбирается режим: «Тестирование» (только отчёт) или «Тестирование и исправление». Для второго режима важны две настройки.

При наличии ссылок на несуществующие объекты:

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

При частичной потере данных объектов: «Создавать объекты» или «Удалять объекты». Удаление необратимо.

Начинайте с режима «Тестирование» и полного набора проверок. Отчёт подскажет, есть ли смысл в исправлении и какие объекты пострадали. Заглушки, созданные при исправлении, обычно получают наименование вида «Объект не найден» с идентификатором — их легко найти поиском по списку.

Пакетный запуск по расписанию или для большой базы

На больших базах удобно запускать тестирование без интерфейса — из командной строки или bat-файла с выводом в журнал:

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

Для клиент-серверной базы вместо /F"путь" укажите /S"сервер\имя_базы". Ключ -TestOnly включает режим только проверки, без исправлений: с него и стоит начинать.

Журнал регистрации и блокировки: найти виновника

Повреждения данных редко появляются сами. Журнал регистрации показывает, кто и когда менял объект, и помогает отделить сбой базы от ошибки пользователя или обработки.

Где открыть:

  • в пользовательском режиме типовых конфигураций — Администрирование → Обслуживание → Журнал регистрации;
  • в Конфигураторе — Администрирование → Журнал регистрации.

Что смотреть:

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

Ошибки блокировок

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

Что делать:

  • в клиент-серверной базе откройте в консоли кластера узел базы → «Блокировки» и посмотрите, какой сеанс держит блокировку;
  • проверьте, нет ли параллельно тяжёлой операции: закрытия месяца, групповой перепроводки, обмена с другой базой;
  • перенесите тяжёлые операции на нерабочее время и разнесите их по времени.

Принудительное завершение сеанса в консоли откатывает его незавершённую транзакцию. Если это было закрытие месяца или загрузка обмена, операцию придётся запускать заново.

Если блокировки возникают в файловой базе при 10–15 одновременных пользователях, это предел файлового варианта, а не болезнь. Лечится переводом на клиент-серверный вариант.

Восстановление базы 1С после сбоев оборудования и СУБД

Отключение питания, сбой диска или переполнение тома — главные причины физического повреждения. Здесь важен порядок: сначала спасаем носитель, потом файл, потом данные 1С.

Файловая база после сбоя диска или питания

  1. Не запускайте 1С повторно, пока не проверили диск. Каждое открытие повреждённой базы может дописать мусор.
  2. Скопируйте 1Cv8.1CD на заведомо исправный диск и работайте только с копией.
  3. Проверьте исходный диск: chkdsk D: /f (буква — ваша), посмотрите SMART-показатели.
  4. Прогоните chdbfl.exe на копии, затем тестирование и исправление в Конфигураторе.
  5. Если база открылась — сделайте выгрузку .dt и загрузите её в новую пустую базу. Это пересоздаёт файл с нуля и убирает остаточные повреждения.

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

Сначала проверьте базу средствами СУБД:

DBCC CHECKDB ('Buh') WITH NO_INFOMSGS;

Если CHECKDB нашёл ошибки, лучший путь — восстановление из последнего полного бэкапа плюс журналов транзакций (при полной модели восстановления). Режим REPAIR_ALLOW_DATA_LOSS удаляет повреждённые страницы вместе с данными: применяйте его только к копии и только когда бэкапа нет.

После восстановления на уровне СУБД запустите тестирование средствами 1С, хотя бы реиндексацию и проверку ссылочной целостности.

PostgreSQL

Для PostgreSQL первым делом смотрят журнал сервера СУБД на ошибки чтения страниц. Восстановление — из pg_dump или физической копии. Регулярное обслуживание — VACUUM ANALYZE и при необходимости REINDEX в нерабочее время.

Сеансовые данные сервера 1С

Если ошибка возникает у всех пользователей клиент-серверной базы после аварийной перезагрузки сервера, а СУБД чистая, виноваты бывают временные файлы кластера в каталоге srvinfo\reg_1541. Чистка этих файлов выполняется только при остановленной службе «Агент сервера 1С:Предприятия».

Остановка службы отключает всех пользователей всех баз на этом сервере. Делайте это вне рабочего времени. Файлы реестра кластера (1CV8Clst.lst) не удаляйте: без них кластер потеряет список баз.

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

Профилактика: обслуживание базы 1С по графику

Базу, за которой ухаживают, лечить приходится редко. Минимальный регламент для небольшой организации:

ЗадачаПериодичностьЧем делать
Резервная копияЕжедневноВыгрузка .dt или копия каталога (файловая), бэкап СУБД (клиент-серверная)
Проверка, что копия восстанавливаетсяРаз в кварталЗагрузка копии в тестовую базу
Реиндексация и проверка логической целостностиРаз в месяцПакетный запуск /IBCheckAndRepair
Обновление статистики и обслуживание индексов СУБДЕженедельноПлан обслуживания MS SQL, VACUUM ANALYZE в PostgreSQL
Удаление помеченных объектовРаз в месяц–кварталАдминистрирование → Обслуживание → Удаление помеченных объектов
Контроль свободного местаПостоянноМониторинг сервера

Что ещё снижает риск:

  • 🔌 ИБП на сервере и на компьютере с файловой базой. Отключение питания во время записи — классический путь к Файл базы данных поврежден.
  • 🌐 Не держать файловую базу на сетевом диске через Wi-Fi. Обрыв связи в момент записи повреждает файл.
  • 🧹 Чистить журнал регистрации. Многолетний журнал замедляет работу; его можно сократить в Конфигураторе, предварительно сохранив старые записи в файл.
  • 📈 Следить за итогами. В типовых конфигурациях есть обработка управления итогами и агрегатами в разделе Администрирование → Обслуживание: там задаётся период рассчитанных итогов, и отчёты по прошлым периодам работают быстрее.
  • 🔄 Обновлять платформу и конфигурацию с копией перед каждым обновлением. Сбой в середине обновления — частая причина нарушения структуры конфигурации.

Регулярное сжатие таблиц уменьшает файл 1Cv8.1CD после удаления большого объёма данных, например после свёртки базы. Без такого события сжимать каждую неделю смысла нет.

Когда лечение базы 1С лучше доверить специалисту

Самостоятельное лечение оправдано, пока у вас есть свежая копия и ошибка укладывается в типовые сценарии выше. Специалист нужен, если:

  • ❌ chdbfl.exe завершается с ошибкой или после исправления база всё равно не открывается;
  • ❌ резервной копии нет, а тестирование предлагает удалить сотни объектов;
  • ❌ DBCC CHECKDB находит ошибки, а бэкапа с чистой базой нет;
  • ❌ повреждена конфигурация с большими доработками, и поставщика .cf нет;
  • ❌ диск физически неисправен, а данные на нём единственные.

В таких случаях каждое неудачное действие уменьшает шанс спасти данные. Специалисты по восстановлению работают с посекционным разбором файла 1Cv8.1CD, извлекают таблицы из повреждённых страниц и собирают из них новую базу. Например, известная сообществу утилита Tool_1CD позволяет читать таблицы файла без запуска платформы. Применять её к единственному экземпляру базы нельзя — только к копии.

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

Частые вопросы о лечении базы

Сколько длится тестирование и исправление базы?
Для файловой базы на 2–3 ГБ — обычно от нескольких минут до часа. Клиент-серверные базы на десятки гигабайт с пересчётом итогов и реструктуризацией могут обрабатываться несколько часов, поэтому их запускают на ночь.
Можно ли лечить базу, пока в ней работают пользователи?
Нет. Тестирование и исправление требует монопольного доступа, chdbfl.exe — свободного файла. Работать в базе во время проверки не получится.
Почему после исправления в справочниках появились элементы «Объект не найден»?
Это заглушки, которые программа создала вместо потерянных объектов при варианте «Создавать объекты». Найдите документы, которые на них ссылаются, и замените ссылки на правильные элементы, после чего заглушки можно пометить на удаление.
Помогает ли выгрузка и загрузка .dt при повреждениях?
Да, если база открывается в Конфигураторе. Загрузка в новую базу пересоздаёт все таблицы. Если выгрузка падает с ошибкой, сначала нужно тестирование и исправление.
Нужно ли лечить базу регулярно, если ошибок нет?
Полное исправление без причины не нужно. Достаточно резервных копий, ежемесячной реиндексации с проверкой логической целостности и обслуживания СУБД.