Работа с расширениями в среде 1С:Предприятие — это мощный инструмент, однако на определенных релизах платформы и конфигураций (особенно использующих старые версии БСП) разработчики сталкиваются с критическими ошибками. Ситуация, когда после добавления новых справочников в расширение база начинает «вылетать» без записей в журнале регистрации, а обновление информационной базы завершается аварийно, является классической для связки платформ 8.3.13–8.3.18 и режима совместимости 8.3.12.
В этой статье мы разберем причины такого поведения системы и пошагово пройдем по пути исправления ошибок, связанных с полнотекстовым поиском и механизмами Библиотеки стандартных подсистем (БСП).
Когда база данных «падает» (процесс 1cv8.exe или rphost завершается аварийно), система зачастую не успевает зафиксировать ошибку в штатном журнале регистрации 1С. В таких случаях мы имеем дело с ошибкой на уровне ядра платформы — чаще всего это Access Violation (нарушение прав доступа к памяти). Чтобы подтвердить это, проанализируем «Журнал событий Windows» (Event Viewer), раздел «Приложение». Там можно обнаружить ошибки модулей backbas.dll или wbase.dll. Основными виновниками в нашем случае выступают два механизма: Полнотекстовый поиск (ППД) и справочник идентификаторов метаданных.
Как показывает практика, база часто вылетает именно в момент работы регламентного задания «Обновление индекса полнотекстового поиска». При добавлении нового справочника в расширение поисковый движок платформы пытается индексировать новые данные, но из-за несоответствия структуры метаданных в расширении и основного индекса происходит критический сбой.
Рассмотрим порядок действий для устранения этой причины:
ПолнотекстовыйПоиск.ОчиститьИндекс();
ПолнотекстовыйПоиск.УстановитьРежимПереиндексации(РежимПереиндексацииПолнотекстовогоПоиска.НеСоздаватьИндекс);
Если программный метод не помогает, выполним физическую очистку:
1Cv8FTxt из каталога информационной базы.C:\Program Files\1cv8\srvinfo\reg_1541\<GUID базы>\1Cv8FTxt).Библиотека стандартных подсистем (БСП) использует справочник ИдентификаторыОбъектовМетаданных для хранения связей между объектами конфигурации и программным кодом. В старых редакциях УНФ (например, 1.6.10) механизмы БСП не всегда корректно обрабатывают объекты из расширений.
Выясним, как принудительно обновить этот справочник. Если стандартное обновление информационной базы через параметр /С ЗапуститьОбновлениеИнформационнойБазы не проходит, нам поможет прямой вызов методов БСП. Воспользуемся внешней обработкой или консолью кода:
// Принудительное обновление данных справочника идентификаторов
ПараметрыОбновления = Справочники.ИдентификаторыОбъектовМетаданных.ПараметрыОбновитьДанныеСправочника();
ПараметрыОбновления.ИдентификаторПотока = "ОбновлениеРасширения";
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Истина);
Важный момент: использование параметров (Истина, Истина) позволяет принудительно перезаписать существующие идентификаторы и добавить новые, включая те, что пришли из расширений. После выполнения этого кода убедимся, что в справочнике появились записи с префиксом вашего расширения.
Проанализируем настройки самих справочников, добавленных в расширение. В режиме совместимости 8.3.12 платформа очень чувствительна к правам доступа и режимам безопасности.
ИспользоватьПолнотекстовыйПоиск в значение Не использовать. Это позволит избежать падения базы при автоматическом старте индексации.Использовать основные роли для всех пользователей.Запуск обновления с параметром /С ЗапуститьОбновлениеИнформационнойБазы критически важен, но он требует отсутствия активных сеансов и фоновых заданий. Разберем правильный алгоритм запуска на тестовой базе:
Автор темы упоминал внесение изменений в модули проведения документов ЗаказПокупателя и РасходнаяНакладная. Если в этих модулях происходит обращение к новым справочникам из расширения до того, как они были зарегистрированы в ИдентификаторыОбъектовМетаданных, это может вызвать рекурсивную ошибку при старте системы.
Рекомендация: на время обновления временно закомментируйте новый код в модулях менеджера и проведения в расширении. Сначала добейтесь успешного принятия изменений структуры данных и обновления БСП, а затем поочередно возвращайте программную логику.
Для решения проблемы «вылета» базы при обновлении расширения мы выполнили следующие действия:
Такой комплексный подход позволяет обойти ограничения старых версий БСП и успешно внедрить функционал через расширения даже на специфических релизах платформы 1С.