Внезапное завершение работы сервера или аварийное отключение питания компьютеров пользователей часто приводит к нарушению целостности данных в файловых базах 1С. В результате бухгалтеры сталкиваются с тем, что в оборотно-сальдовой ведомости (ОСВ) появляется некорректный остаток по договору или контрагенту, а при детализации отчета вместо документа отображается пустая строка вида «Объект не найден» с длинным идентификатором (GUID). Попытки перепровести документы или выполнить стандартное тестирование нередко завершаются ошибкой: «Ошибка СУБД: Внутренняя ошибка компоненты dbeng8» или сообщениями о неверных значениях в таблицах журнала документов. Разберем по шагам, почему возникает эта неполадка и как восстановить целостность базы и учетных регистров.
Компонента dbeng8 отвечает за работу внутреннего файлового движка базы данных 1С (файла 1Cv8.1CD). Ошибки в ее работе обычно вызываются следующими факторами:
Прежде чем выполнять любые манипуляции со ссылками и регистрами, необходимо устранить физические повреждения файла базы данных. Если структура повреждена, программная запись новых объектов или удаление движений будет вызывать исключение внутренней компоненты.
Выполним восстановление по следующему алгоритму:
1Cv8.1CD в надежное место. Все дальнейшие действия производятся только при наличии архивной копии.C:\Program Files\1cv8\номер_версии\bin\ или C:\Program Files (x86)\1cv8\номер_версии\bin\) найдем и запустим исполняемый файл chdbfl.exe.chdbfl.exe откроем базу в режиме «Конфигуратор», перейдем в меню «Администрирование» — «Тестирование и исправление...». Отметим проверки логической и ссылочной целостности, реиндексацию таблиц и пересчет итогов.Когда база физически восстановлена, нам необходимо убрать зависшие остатки в оборотно-сальдовой ведомости. Сальдо формируется записями в регистрах, у которых в поле Регистратор записана битая ссылка. Самый чистый и быстрый способ убрать такие движения — очистить набор записей регистра по отбору, не создавая лишних фиктивных документов.
Посмотрим на пример внешней обработки, очищающей движения регистра бухгалтерии по известному уникальному идентификатору (GUID) утерянного документа:
// Получаем УИД из строки "Объект не найден [<...>]"
ГУИД = Новый УникальныйИдентификатор("e1c8d622-4912-11ee-80d4-00155d014b02");
// Получаем ссылку на несуществующий объект нужного типа
БитаяСсылка = Документы.ПоступлениеТоваровУслуг.ПолучитьСсылку(ГУИД);
// Создаем набор записей типового регистра бухгалтерии
НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
// Устанавливаем отбор по нашему несуществующему регистратору
НаборЗаписей.Отбор.Регистратор.Установить(БитаяСсылка);
// Записываем пустой набор с флагом очистки (Истина)
// Это действие полностью удалит зависшие движения из ОСВ
НаборЗаписей.Записать(Истина);
Аналогичным образом можно очистить движения в любых регистрах накопления, если документ формировал записи и по другим подсистемам (например, по взаиморасчетам или учету НДС).
Если требуется не просто убрать сальдо, а восстановить сам документ с тем же самым идентификатором, чтобы корректно перепровести операцию вручную, разберем метод подстановки ссылки.
Рассмотрим пример создания документа с сохранением исходной ссылки:
ГУИД = Новый УникальныйИдентификатор("e1c8d622-4912-11ee-80d4-00155d014b02");
СсылкаНаОбъект = Документы.ПоступлениеТоваровУслуг.ПолучитьСсылку(ГУИД);
НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
НовыйДокумент.УстановитьСсылкуНового(СсылкаНаОбъект);
// Заполняем основные реквизиты
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию("Наша Организация");
НовыйДокумент.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("Поставщик");
// Если документ требуется просто записать без реального проведения,
// но пометить как проведенный для корректной отмены движений:
НовыйДокумент.Проведен = Истина;
НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);
После создания такого документа он заменит собой надпись «Объект не найден» в интерфейсе. Теперь пользователь может открыть документ, проверить данные или стандартным образом отменить его проведение, что автоматически снимет лишние движения с регистров.
Иногда при тестировании и исправлении конфигуратор выдает ошибку вида: «Проверка таблицы ссылочного типа DocumentJournal: неверные значения в колонках». Это говорит о повреждении системной таблицы журнала документов. Проанализируем способы устранения этой неисправности:
.dt. Затем создадим новую пустую информационную базу и выполним операцию «Загрузить информационную базу...». В процессе загрузки все системные таблицы и журналы конструируются платформой заново, устраняя логические повреждения структуры.F7 (обновить конфигурацию базы данных), а затем вернем состав обратно и обновим базу повторно. Это заставит платформу пересоздать физическую таблицу журнала.Чтобы исключить повторение ошибок целостности базы и появления битых ссылок в дальнейшем, рекомендуем выполнить следующие настройки инфраструктуры:
1Cv8.1CD по сети через общую папку (SMB-шару) несколькими пользователями одновременно. Переведите пользователей на работу через терминальный сервер (RDP) или опубликуйте базу на веб-сервере (IIS или Apache).dbeng8 и защищает данные транзакционными логами даже при сбоях питания.