Почему вылетает база 1С при обновлении расширения и как исправить ошибку обновления

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

Работа с расширениями в среде 1С:Предприятие — это мощный инструмент, однако на определенных релизах платформы и конфигураций (особенно использующих старые версии БСП) разработчики сталкиваются с критическими ошибками. Ситуация, когда после добавления новых справочников в расширение база начинает «вылетать» без записей в журнале регистрации, а обновление информационной базы завершается аварийно, является классической для связки платформ 8.3.13–8.3.18 и режима совместимости 8.3.12.

В этой статье мы разберем причины такого поведения системы и пошагово пройдем по пути исправления ошибок, связанных с полнотекстовым поиском и механизмами Библиотеки стандартных подсистем (БСП).

Проанализируем ситуацию: почему нет записей в журнале регистрации?

Когда база данных «падает» (процесс 1cv8.exe или rphost завершается аварийно), система зачастую не успевает зафиксировать ошибку в штатном журнале регистрации 1С. В таких случаях мы имеем дело с ошибкой на уровне ядра платформы — чаще всего это Access Violation (нарушение прав доступа к памяти). Чтобы подтвердить это, проанализируем «Журнал событий Windows» (Event Viewer), раздел «Приложение». Там можно обнаружить ошибки модулей backbas.dll или wbase.dll. Основными виновниками в нашем случае выступают два механизма: Полнотекстовый поиск (ППД) и справочник идентификаторов метаданных.

Шаг 1. Нейтрализация влияния полнотекстового поиска (ППД)

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

Рассмотрим порядок действий для устранения этой причины:

  1. Отключим регламентные задания. На время проведения обновления и отладки необходимо полностью заблокировать выполнение фоновых и регламентных заданий. Это можно сделать через консоль администрирования серверов 1С или в параметрах блокировки информационной базы.
  2. Очистим индекс ППД. Простого отключения задания недостаточно, так как поврежденные файлы индекса могут вызывать сбои и при обычных запросах. Проанализируем программный способ очистки:

ПолнотекстовыйПоиск.ОчиститьИндекс();
ПолнотекстовыйПоиск.УстановитьРежимПереиндексации(РежимПереиндексацииПолнотекстовогоПоиска.НеСоздаватьИндекс);

Если программный метод не помогает, выполним физическую очистку:

Шаг 2. Исправление справочника «Идентификаторы объектов метаданных»

Библиотека стандартных подсистем (БСП) использует справочник ИдентификаторыОбъектовМетаданных для хранения связей между объектами конфигурации и программным кодом. В старых редакциях УНФ (например, 1.6.10) механизмы БСП не всегда корректно обрабатывают объекты из расширений.

Выясним, как принудительно обновить этот справочник. Если стандартное обновление информационной базы через параметр /С ЗапуститьОбновлениеИнформационнойБазы не проходит, нам поможет прямой вызов методов БСП. Воспользуемся внешней обработкой или консолью кода:


// Принудительное обновление данных справочника идентификаторов
ПараметрыОбновления = Справочники.ИдентификаторыОбъектовМетаданных.ПараметрыОбновитьДанныеСправочника();
ПараметрыОбновления.ИдентификаторПотока = "ОбновлениеРасширения";
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Истина);

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

Шаг 3. Правильная настройка свойств объектов в расширении

Проанализируем настройки самих справочников, добавленных в расширение. В режиме совместимости 8.3.12 платформа очень чувствительна к правам доступа и режимам безопасности.

  1. Полнотекстовый поиск в свойствах. Для новых справочников в расширении установим свойство ИспользоватьПолнотекстовыйПоиск в значение Не использовать. Это позволит избежать падения базы при автоматическом старте индексации.
  2. Безопасный режим. Несмотря на снятую галочку «Безопасный режим» в свойствах расширения, убедимся, что расширение имеет доступ к критическим операциям. В некоторых случаях помогает временное включение свойства Использовать основные роли для всех пользователей.
  3. Проверка прав. Новые объекты в расширении должны быть явно добавлены в соответствующие роли или профили групп доступа БСП, иначе механизмы обновления могут «спотыкаться» при попытке обращения к ним под правами системы.

Шаг 4. Монопольное обновление информационной базы

Запуск обновления с параметром /С ЗапуститьОбновлениеИнформационнойБазы критически важен, но он требует отсутствия активных сеансов и фоновых заданий. Разберем правильный алгоритм запуска на тестовой базе:

  1. Завершим все сеансы пользователей (включая конфигуратор).
  2. Заблокируем регламентные задания.
  3. Запустим базу из командной строки с ключом обновления.
  4. Дождемся окончания процесса. Если база снова «вылетает», значит, проблема осталась либо в физических файлах индекса (см. Шаг 1), либо в коде модулей проведения, которые вы изменили в расширении.

Разберем возможные ошибки в модулях проведения

Автор темы упоминал внесение изменений в модули проведения документов ЗаказПокупателя и РасходнаяНакладная. Если в этих модулях происходит обращение к новым справочникам из расширения до того, как они были зарегистрированы в ИдентификаторыОбъектовМетаданных, это может вызвать рекурсивную ошибку при старте системы.

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

Подведем итоги

Для решения проблемы «вылета» базы при обновлении расширения мы выполнили следующие действия:

Такой комплексный подход позволяет обойти ограничения старых версий БСП и успешно внедрить функционал через расширения даже на специфических релизах платформы 1С.

← На главную