Как исправить ошибку отложенных обработчиков при установке БСП на чистую базу?

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

При внедрении Библиотеки стандартных подсистем (БСП) в новую, чистую конфигурацию разработчики часто сталкиваются с ситуацией, когда после успешного объединения метаданных система отказывается запускаться в обычном режиме. Вместо рабочего стола пользователь видит сообщение о критической ошибке: «При построении очереди отложенных обработчиков обнаружены ошибки». Чаще всего проблема затрагивает подсистему работы с файлами, а именно регистры ХранилищеФайлов, НаличиеФайлов и справочники Файлы, ВерсииФайлов. В этой статье мы подробно разберем, почему это происходит и как правильно инициализировать базу данных.

Выясним причину возникновения ошибки

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

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

Шаг 1. Проверка версии конфигурации и регистрация подсистем

Прежде всего, проверим свойства корневого объекта конфигурации. Откроем конфигуратор и убедимся, что в поле «Версия» указано корректное значение (например, 1.0.0.1). Если версия не указана, БСП не сможет сопоставить данные в ИБ с текущим состоянием метаданных.

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


Процедура ПриДобавленииПодсистемы(Описание) Экспорт
    Описание.Имя = "МояКонфигурация";
    Описание.Версия = "1.0.0.1";
    // Важно: версия здесь должна совпадать с версией в свойствах конфигурации
КонецПроцедуры

Если версии различаются, БСП будет постоянно пытаться запустить обработчики обновления, считая, что структура базы данных устарела.

Шаг 2. Использование параметров командной строки для принудительного обновления

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

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

  1. Закроем все сеансы с базой данных.
  2. В списке баз 1С выберем нашу базу и нажмем «Изменить».
  3. Перейдем на последнюю закладку и в поле «Дополнительные параметры запуска» впишем: /C ЗапуститьОбновлениеИнформационнойБазы.
  4. Запустим базу в режиме «1С:Предприятие» (в этом поможет помощник оператора обновления конфигурации базы данных).

В этом режиме система попытается выполнить все обработчики (включая проблемные) в монопольном режиме, игнорируя некоторые пользовательские блокировки. Для пустой базы это часто является «волшебной таблеткой».

Шаг 3. Инициализация констант подсистемы работы с файлами

Посмотрим на список проблемных объектов: ХранилищеФайлов, НаличиеФайлов. Ошибки в этих обработчиках часто связаны с тем, что система не знает, где хранить файлы: в томах на диске или непосредственно в базе данных. Проанализируем состояние констант.

Если нам удалось зайти в базу с параметром ОтключитьЛогикуНачалаРаботыСистемы, необходимо через «Функции для технического специалиста» найти и проверить следующие настройки:

Шаг 4. Программное управление очередью обновлений

Если стандартные методы не помогают и база действительно пустая (в ней нет пользовательских данных, которые нужно сохранять), мы можем принудительно пометить эти обработчики как выполненные. Рассмотрим, как это сделать программно. Создадим внешнюю обработку или воспользуемся встроенным инструментом «Описание обработчиков обновления» (запущенным с отключенной логикой начала работы).

Проанализируем код, который можно выполнить в контексте сервера для «обнуления» проблемных обработчиков:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ОчередьОбновления.ИмяОбработчика КАК ИмяОбработчика
    |ИЗ
    |	РегистрСведений.ОчередьОбновления КАК ОчередьОбновления
    |ГДЕ
    |	ОчередьОбновления.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбработчиковОбновления.Ошибка)";

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл
    МенеджерЗаписи = РегистрыСведений.ОчередьОбновления.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.ИмяОбработчика = Выборка.ИмяОбработчика;
    МенеджерЗаписи.Прочитать();
    Если МенеджерЗаписи.Выбран() Тогда
        МенеджерЗаписи.Статус = Перечисления.СтатусыОбработчиковОбновления.Выполнен;
        МенеджерЗаписи.Записать();
    КонецЕсли;
КонецЦикла;

Важно: этот метод применим только для пустой базы на этапе разработки. В «живой» базе с данными это может привести к потере целостности файлового хранилища.

Шаг 5. Особенности внедрения подсистем-зависимостей

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

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

Резюме решения

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

  1. Укажем версию конфигурации в метаданных и в модуле ОбновлениеИнформационнойБазыБСП.
  2. Запустим систему с параметром /C ЗапуститьОбновлениеИнформационнойБазы для принудительного прохождения всех этапов.
  3. Если ошибка сохраняется — проверим журнал регистрации, найдем конкретную строку кода, где происходит Отказ, и убедимся, что все зависимые подсистемы (включая «Анкетирование», если нужно) перенесены корректно.
  4. В крайнем случае, для пустой базы, воспользуемся программной установкой статуса Выполнен в регистре ОчередьОбновления.

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

← На главную