База 1С выдаёт ошибки или не открывается: от журнала до DBCC CHECKDB
Содержание
Чтобы исправить ошибки базы 1С, сначала сделайте её копию, затем найдите источник сбоя в журнале регистрации и только после этого запускайте лечение: для файловой базы — утилиту chdbfl.exe, для любой — Администрирование → Тестирование и исправление в Конфигураторе, для серверной — ещё и проверку средствами СУБД. Частая ошибка — сразу жать «Тестирование и исправление» со всеми галочками. Это долго, требует монопольного доступа и иногда лишь прячет настоящую причину: битый диск, переполненный журнал транзакций SQL или конфликт блокировок.
Диагностика всегда идёт по одной схеме: текст ошибки → журнал → проверка структуры → проверка данных. Схема одинакова для файлового и клиент-серверного варианта 1С:Предприятия 8.3.
Перед любым исправлением сделайте резервную копию базы. Для файловой — скопируйте каталог с файлом 1Cv8.1CD целиком, когда все пользователи вышли. Для серверной — бэкап средствами СУБД. Исправление может удалить объекты, и вернуть их будет не из чего.
1. Диагностика ошибок базы 1С: текст сообщения и журнал регистрации
Первое, что нужно, — точный текст ошибки. Попросите пользователя нажать «Подробно» в окне сообщения и прислать текст целиком, а не скриншот первой строки. Во второй половине обычно и есть суть: имя таблицы, модуль, номер строки.
Дальше — журнал регистрации. В пользовательском режиме БП 3.0, ЗУП 3.1 и УТ 11 он открывается через Администрирование → Обслуживание → Журнал регистрации. В Конфигураторе — Администрирование → Журнал регистрации.
Что смотреть в журнале:
- 🔴 уровень «Ошибка» — включите отбор по важности, чтобы не листать тысячи информационных строк;
- 👤 пользователя и компьютер — ошибка у одного человека и у всех лечится по-разному;
- 🕐 время первого появления — совпадает ли оно с обновлением, отключением света, установкой новой платформы;
- 📄 поле «Данные» — ссылка на документ или элемент справочника, на котором упало.
Физически журнал лежит в подкаталоге 1Cv8Log рядом с базой (для файловой) или в каталоге кластера на сервере. В новых версиях это один файл 1Cv8.lgd, в старом формате — набор файлов .lgp и .lgf. Если сам журнал не открывается или «пустой», это тоже симптом: файл мог повредиться при сбое.
Как классифицировать ошибку
| Признак в тексте | Что это скорее всего | Куда идти |
|---|---|---|
Файл базы данных поврежден, Ошибка формата потока при входе | Повреждение файла базы или кэша | Разделы 3 и 6 |
Упоминание Microsoft SQL Server, PostgreSQL, код ошибки СУБД | Проблема на уровне СУБД | Раздел 4 |
Конфликт блокировок, «превышено время ожидания блокировки» | Блокировки | Раздел 5 |
Ошибка при вызове метода контекста, номер строки модуля | Ошибка в коде конфигурации или в данных | Журнал + проверка ссылочной целостности |
Объект не найден и <Объект не найден> (123:...) в полях | Битые ссылки | Тестирование и исправление |
💡 Если ошибка возникает только на одном рабочем месте, а у остальных база работает, база почти наверняка цела. Начните с очистки локального кэша (раздел 6), а не с исправления базы.
2. Технологический журнал: когда журнала регистрации мало
Журнал регистрации пишет события прикладного уровня. Падения рабочих процессов, долгие запросы, таймауты блокировок и взаимоблокировки он показывает плохо. Для этого есть технологический журнал платформы.
Он включается файлом logcfg.xml в каталоге conf установленной платформы (например, C:\Program Files\1cv8\conf\). На сервере файл кладут на машине, где работает служба сервера 1С. Минимальная настройка для поиска ошибок и блокировок:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="D:\v8logs" history="24">
<event>
<eq property="name" value="EXCP"/>
</event>
<event>
<eq property="name" value="TDEADLOCK"/>
</event>
<event>
<eq property="name" value="TTIMEOUT"/>
</event>
<property name="all"/>
</log>
</config>
Что здесь важно:
location— каталог для логов на диске с запасом места. Не системный диск.history="24"— хранить логи 24 часа. Платформа сама удаляет старые.EXCP— исключения, в том числе аварийные завершения процессов.TDEADLOCKиTTIMEOUT— взаимоблокировки и таймауты управляемых блокировок.
Платформа подхватывает изменение файла сама, перезапуск службы не нужен. Логи появятся в подкаталогах с именами процессов (rphost_..., 1cv8_...), файлы называются по часам.
Свойство all на нагруженном сервере даёт гигабайты логов в час. Включайте журнал на время диагностики и отключайте, переименовав или удалив logcfg.xml, когда причина найдена.
3. Проверка и исправление базы 1С встроенными средствами
У платформы два инструмента. Они не заменяют друг друга: chdbfl.exe чинит физическую структуру файла базы, а «Тестирование и исправление» проверяет логику и ссылки внутри данных.
Утилита chdbfl.exe — только для файловой базы
Утилита лежит в каталоге bin установленной платформы: C:\Program Files\1cv8\8.3.xx.xxxx\bin\chdbfl.exe. Её запускают, когда база не открывается вовсе или выдаёт Файл базы данных поврежден.
- Попросите всех выйти из базы. Проверьте, что файл
1Cv8.1CDникем не занят. - Запустите
chdbfl.exeот имени администратора. - Укажите путь к файлу
1Cv8.1CD. - Сначала запустите проверку без галочки «Исправлять обнаруженные ошибки» — посмотрите масштаб.
- Если ошибки есть — поставьте галочку и запустите ещё раз.
На базе в 10–20 ГБ проверка идёт от нескольких минут до часа. Утилита работает с файлом напрямую, поэтому прерывать её нельзя.
Тестирование и исправление в Конфигураторе
Режим открывается через Конфигуратор → Администрирование → Тестирование и исправление. Нужен монопольный доступ: все сеансы, включая фоновые задания, должны быть завершены.
| Флажок | Что делает | Когда включать |
|---|---|---|
| Реиндексация таблиц информационной базы | Перестраивает индексы | Ошибки дублей, неверная сортировка, «зависшие» отборы |
| Проверка логической целостности | Ищет нарушения внутренней структуры | Почти всегда |
| Проверка ссылочной целостности | Ищет ссылки на несуществующие объекты | <Объект не найден> в документах |
| Пересчёт итогов | Пересчитывает итоги регистров | Неверные остатки в отчётах |
| Сжатие таблиц | Убирает пустое место | После массового удаления данных |
| Реструктуризация таблиц | Пересоздаёт таблицы целиком | Только когда остальное не помогло: самая долгая операция |
Для битых ссылок программа предлагает варианты: создавать объекты, очищать ссылки или не изменять. Выбирайте «Создавать объекты». Тогда на месте пропавшего элемента появится заглушка, и вы увидите, в каких документах она стоит. «Очищать ссылки» молча обнулит реквизиты, и восстановить, что там было, станет нельзя.
💡 Первый прогон делайте в режиме «Только тестирование». Протокол покажет объём проблем, а решение об исправлении вы примете, уже понимая масштаб.
Запуск из командной строки
На большой базе удобно запускать проверку ночью из планировщика. Пример для файловой базы:
"C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe" DESIGNER /F"D:\Bases\Buh" /N"Администратор" /P"пароль" /IBCheckAndRepair -LogAndRefsIntegrity -RecalcTotals -BadRefCreate /Out"D:\Logs\check.txt"
Для серверной базы вместо /F используют /S"сервер\имябазы". Ключ -TestOnly включает режим только проверки, -ReIndex — реиндексацию. Протокол пишется в файл из /Out.
4. Как исправить ошибки базы 1С на уровне СУБД
В клиент-серверном варианте данные хранит СУБД. Если она повреждена, «Тестирование и исправление» либо упадёт, либо выдаст ошибку СУБД с её собственным кодом. Тогда проверка идёт средствами самой СУБД.
Microsoft SQL Server
Проверка целостности:
DBCC CHECKDB ('Buh') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Пустой результат — база цела. Если есть ошибки, в конце вывода SQL Server подскажет минимальный уровень исправления.
- 🟢
REPAIR_REBUILD— перестраивает индексы, данные не теряет. - 🔴
REPAIR_ALLOW_DATA_LOSS— удаляет повреждённые страницы вместе с данными.
Исправление требует однопользовательского режима:
ALTER DATABASE Buh SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC CHECKDB ('Buh', REPAIR_REBUILD);
ALTER DATABASE Buh SET MULTI_USER;
WITH ROLLBACK IMMEDIATE обрывает все активные соединения, включая сеансы 1С. Делайте это вне рабочего времени, предупредив пользователей.
Если SQL Server требует REPAIR_ALLOW_DATA_LOSS, лучше сначала восстановиться из последнего целого бэкапа. После REPAIR_ALLOW_DATA_LOSS обязательно прогоните в Конфигураторе тестирование с проверкой ссылочной целостности и пересчётом итогов: СУБД удалила строки, ничего не зная о связях объектов 1С.
Ещё одна частая причина «ошибок базы» — не повреждение, а переполненный диск. Журнал транзакций в полной модели восстановления без регулярного бэкапа журнала растёт до размера диска, и 1С получает ошибку записи.
PostgreSQL
Аналога DBCC CHECKDB в PostgreSQL нет. Используют несколько приёмов:
- Расширение
amcheckи функциюbt_index_check— проверка индексов. REINDEX DATABASE— перестроение всех индексов, если проверка нашла ошибки.- Пробный
pg_dumpв/dev/nullили во временный файл: он читает все таблицы и падает на повреждённой строке. Так находят битую таблицу.
pg_dump -U postgres -d buh -f /tmp/test.dump
Если дамп прошёл без ошибок, данные читаются целиком — проблема не в физическом повреждении.
5. Блокировки и взаимоблокировки в базе 1С
Конфликты блокировок часто принимают за «ошибки базы», хотя данные целы. Симптомы: пользователь проводит документ, ждёт около 20 секунд и получает сообщение о конфликте блокировок или превышении времени ожидания. Взаимоблокировка — когда два сеанса ждут друг друга, и платформа отменяет транзакцию одного из них.
Что делать сразу
- Откройте консоль кластера серверов 1С, найдите базу и посмотрите список сеансов.
- Найдите сеанс с давно открытой транзакцией — обычно это фоновое задание, обмен или зависший отчёт.
- Завершите его, только убедившись, что это не проведение важной обработки.
Принудительное завершение сеанса откатывает его транзакцию. Пользователь потеряет несохранённые изменения.
Как найти причину
- 🔍 Включите в техжурнале события
TDEADLOCKиTTIMEOUT(раздел 2). В них видно, какие пространства блокировок и какие сеансы конфликтовали. - 🔍 Проверьте режим блокировок в свойствах конфигурации: «Режим управления блокировкой данных». У актуальных типовых — «Управляемый». Автоматический режим на серверной базе блокирует таблицы крупнее и чаще даёт конфликты.
- 🔍 Сопоставьте время конфликтов с расписанием регламентных заданий и обменов.
Типовые причины, которые решаются без программиста:
| Причина | Решение |
|---|---|
| Обмен с сайтом или филиалом идёт днём | Перенести расписание на ночь |
| Закрытие месяца при работающих пользователях | Проводить в нерабочее время |
| Массовое перепроведение документов | Делать частями или вне рабочего дня |
| Устаревшая статистика в MS SQL | Регламентное обновление статистики |
Если конфликты дают собственные доработки (код с длинными транзакциями, запросы внутри цикла), это работа для разработчика: исправление делается в коде, а не в базе.
6. Восстановление базы 1С после сбоя питания и аварии
Внезапное отключение особенно опасно для файловой базы: запись в 1Cv8.1CD обрывается на середине. Серверная база на MS SQL или PostgreSQL обычно поднимается сама — СУБД откатывает незавершённые транзакции по своему журналу.
Кэш сервера 1С
Если после аварии серверная база ведёт себя странно, а СУБД проверку проходит, причиной может быть сеансовый кэш сервера. Он хранится в каталоге кластера, папки snccntx... внутри srvinfo\reg_1541.
Порядок: остановить службу «Агент сервера 1С:Предприятия», удалить папки snccntx..., запустить службу.
Остановка службы разрывает сеансы всех пользователей всех баз этого сервера. Делайте это после рабочего дня или по согласованию. Удаляйте только snccntx..., а не весь каталог reg_1541: там лежит реестр кластера со списком баз.
Если исправление не помогло
Восстановитесь из резервной копии и перенесите в неё документы, введённые после бэкапа. Для серверной базы на MS SQL в полной модели восстановления можно откатиться на момент перед сбоем по журналу транзакций — если бэкапы журнала делались.
Выгрузка в .dt из повреждённой базы иногда проходит, когда сама база работает с ошибками. Загрузка такого файла в новую пустую базу пересобирает таблицы с нуля. Это не панацея: если повреждены данные, выгрузка упадёт на них.
7. Профилактика: как не доводить базу 1С до лечения
Большинство описанных выше аварий предсказуемы. Регламент на одну страницу снимает почти все.
Несколько наблюдений из практики:
- 💾 Файловая база по сети. Файловую базу в общей папке открывают десятки людей по Wi-Fi — и потом удивляются повреждениям. При 5–10 одновременных пользователях и выше думайте о клиент-серверном варианте или публикации на веб-сервере.
- 🧱 Антивирус. Сканирование
1Cv8.1CDна лету замедляет работу и в момент записи может мешать платформе. Исключение для каталога базы ставят в первую очередь. - 🔄 Обновления. Обновляйте конфигурацию только после свежего бэкапа. Прерванное обновление структуры — частая причина неработающей базы.
- 📊 Мониторинг диска. Уведомление при заполнении диска на 85% дешевле, чем ночь восстановления.
Проверку «Тестирование и исправление» не нужно гонять по расписанию «на всякий случай». Её запускают по симптомам. Плановой должна быть проверка бэкапов и регламент СУБД.
Частые вопросы
Можно ли запускать chdbfl.exe для серверной базы?
1Cv8.1CD файловой базы. Для серверной используйте проверку средствами СУБД и Тестирование и исправление в Конфигураторе.