Как убрать зависшее сальдо по битой ссылке из ОСВ и исправить ошибку dbeng8

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Внезапное завершение работы сервера или аварийное отключение питания компьютеров пользователей часто приводит к нарушению целостности данных в файловых базах 1С. В результате бухгалтеры сталкиваются с тем, что в оборотно-сальдовой ведомости (ОСВ) появляется некорректный остаток по договору или контрагенту, а при детализации отчета вместо документа отображается пустая строка вида «Объект не найден» с длинным идентификатором (GUID). Попытки перепровести документы или выполнить стандартное тестирование нередко завершаются ошибкой: «Ошибка СУБД: Внутренняя ошибка компоненты dbeng8» или сообщениями о неверных значениях в таблицах журнала документов. Разберем по шагам, почему возникает эта неполадка и как восстановить целостность базы и учетных регистров.

Причины сбоя и ошибки dbeng8

Компонента dbeng8 отвечает за работу внутреннего файлового движка базы данных 1С (файла 1Cv8.1CD). Ошибки в ее работе обычно вызываются следующими факторами:

  1. Нестабильный сетевой доступ при работе по локальной сети: работа с файловой базой через общий сетевой ресурс крайне чувствительна к кэшированию Windows (механизмы SMB2/SMB3, OpLocks). Любой кратковременный обрыв связи во время записи транзакции приводит к повреждению внутренних таблиц и индексов.
  2. Блокировка антивирусами или теневым копированием: сканирование файла базы антивирусом «на лету» или создание моментальных снимков VSS в момент активной работы пользователей нарушает монопольный доступ движка к страницам файла.
  3. Аварийное прерывание транзакции: если сервер или компьютер выключился в момент записи движений регистра, записи в таблицах регистров бухгалтерии успевают зафиксироваться, а сам документ-регистратор из таблицы документов физически теряется или повреждается. Так образуется «битая ссылка».

Шаг 1. Создание резервной копии и физическое восстановление базы

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

Выполним восстановление по следующему алгоритму:

  1. Обязательно создадим резервную копию: скопируем файл 1Cv8.1CD в надежное место. Все дальнейшие действия производятся только при наличии архивной копии.
  2. Запустим утилиту проверки физической целостности: в каталоге установки платформы 1С (обычно C:\Program Files\1cv8\номер_версии\bin\ или C:\Program Files (x86)\1cv8\номер_версии\bin\) найдем и запустим исполняемый файл chdbfl.exe.
  3. В окне утилиты укажем путь к файлу нашей информационной базы, установим флаг «Исправлять обнаруженные ошибки» и нажмем кнопку «Выполнить». В зависимости от объема базы процесс может занять от нескольких минут до нескольких часов.
  4. Выполним тестирование и исправление через Конфигуратор: после успешного завершения работы утилиты chdbfl.exe откроем базу в режиме «Конфигуратор», перейдем в меню «Администрирование» — «Тестирование и исправление...». Отметим проверки логической и ссылочной целостности, реиндексацию таблиц и пересчет итогов.

Шаг 2. Программное удаление «битых» движений без создания документа

Когда база физически восстановлена, нам необходимо убрать зависшие остатки в оборотно-сальдовой ведомости. Сальдо формируется записями в регистрах, у которых в поле Регистратор записана битая ссылка. Самый чистый и быстрый способ убрать такие движения — очистить набор записей регистра по отбору, не создавая лишних фиктивных документов.

Посмотрим на пример внешней обработки, очищающей движения регистра бухгалтерии по известному уникальному идентификатору (GUID) утерянного документа:


// Получаем УИД из строки "Объект не найден [<...>]"
ГУИД = Новый УникальныйИдентификатор("e1c8d622-4912-11ee-80d4-00155d014b02");

// Получаем ссылку на несуществующий объект нужного типа
БитаяСсылка = Документы.ПоступлениеТоваровУслуг.ПолучитьСсылку(ГУИД);

// Создаем набор записей типового регистра бухгалтерии
НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();

// Устанавливаем отбор по нашему несуществующему регистратору
НаборЗаписей.Отбор.Регистратор.Установить(БитаяСсылка);

// Записываем пустой набор с флагом очистки (Истина)
// Это действие полностью удалит зависшие движения из ОСВ
НаборЗаписей.Записать(Истина);

Аналогичным образом можно очистить движения в любых регистрах накопления, если документ формировал записи и по другим подсистемам (например, по взаиморасчетам или учету НДС).

Шаг 3. Альтернативный метод: воссоздание документа по GUID

Если требуется не просто убрать сальдо, а восстановить сам документ с тем же самым идентификатором, чтобы корректно перепровести операцию вручную, разберем метод подстановки ссылки.

Рассмотрим пример создания документа с сохранением исходной ссылки:


ГУИД = Новый УникальныйИдентификатор("e1c8d622-4912-11ee-80d4-00155d014b02");
СсылкаНаОбъект = Документы.ПоступлениеТоваровУслуг.ПолучитьСсылку(ГУИД);

НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
НовыйДокумент.УстановитьСсылкуНового(СсылкаНаОбъект);

// Заполняем основные реквизиты
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию("Наша Организация");
НовыйДокумент.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("Поставщик");

// Если документ требуется просто записать без реального проведения,
// но пометить как проведенный для корректной отмены движений:
НовыйДокумент.Проведен = Истина;
НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);

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

Шаг 4. Решение проблемы с таблицами журналов (DocumentJournal)

Иногда при тестировании и исправлении конфигуратор выдает ошибку вида: «Проверка таблицы ссылочного типа DocumentJournal: неверные значения в колонках». Это говорит о повреждении системной таблицы журнала документов. Проанализируем способы устранения этой неисправности:

  1. Выгрузка и загрузка базы: выполним через меню конфигуратора команду «Администрирование» — «Выгрузить информационную базу...» в файл .dt. Затем создадим новую пустую информационную базу и выполним операцию «Загрузить информационную базу...». В процессе загрузки все системные таблицы и журналы конструируются платформой заново, устраняя логические повреждения структуры.
  2. Переформирование состава журнала в конфигураторе: если конфигурация находится на поддержке с возможностью изменения, найдем указанный журнал документов, временно снимем выделение одного из типов документов, нажмем клавишу F7 (обновить конфигурацию базы данных), а затем вернем состав обратно и обновим базу повторно. Это заставит платформу пересоздать физическую таблицу журнала.

Меры профилактики повторных повреждений

Чтобы исключить повторение ошибок целостности базы и появления битых ссылок в дальнейшем, рекомендуем выполнить следующие настройки инфраструктуры:

  1. Исключить прямой сетевой доступ к файловой базе: никогда не открывайте файл 1Cv8.1CD по сети через общую папку (SMB-шару) несколькими пользователями одновременно. Переведите пользователей на работу через терминальный сервер (RDP) или опубликуйте базу на веб-сервере (IIS или Apache).
  2. Настроить исключения антивируса: добавьте каталог с информационной базой и временными файлами пользователей в белый список антивирусного монитора.
  3. Рассмотреть переход на клиент-серверный вариант (SQL): для баз с активным документооборотом клиент-серверная архитектура (PostgreSQL, MS SQL) исключает появление ошибок компоненты dbeng8 и защищает данные транзакционными логами даже при сбоях питания.
← На главную