При внедрении Библиотеки стандартных подсистем (БСП) в новую конфигурацию разработчики часто сталкиваются с критической ошибкой при первом запуске: «При построении очереди отложенных обработчиков обнаружены ошибки». Система сообщает о проблемах в таких объектах, как РегистрыСведений.ХранилищеФайлов, Справочники.Файлы и других, предлагая запустить конфигурацию с параметром ОтключитьЛогикуНачалаРаботыСистемы. В этой статье мы подробно разберем причины этой ситуации и пошагово реализуем правильный алгоритм внедрения, чтобы избежать подобных конфликтов.
Проанализируем ситуацию: почему в абсолютно пустой базе возникают ошибки «обновления»? Основная причина кроется в механизме работы БСП. Когда мы объединяем пустую конфигурацию с файлом .cf библиотеки, система инициализирует подсистемы. Если в коде конфигурации не указана явно текущая версия внедряемой библиотеки, БСП может воспринять запуск как обновление с «нулевой» или очень старой версии.
Ошибки в обработчиках подсистемы Работа с файлами возникают из-за того, что эти процедуры пытаются реструктуризировать или перенести данные, которых еще не существует, в то время как логика подсистемы требует наличия определенных настроек или уже выполненных ранее шагов обновления. Наша задача — правильно «представиться» системе и подтвердить, что мы устанавливаем конкретную версию БСП в новую базу.
Рассмотрим первый и самый важный этап настройки после сравнения и объединения метаданных. Многие разработчики забывают, что БСП требует обязательной настройки собственного модуля обновления для каждой конфигурации.
МояРазработка) и Синоним.1.0.1.1.ОбновлениеИнформационнойБазыБСП. Нам необходимо создать его аналог для нашей конфигурации. Скопируем его содержимое в новый общий модуль, назвав его, например, ОбновлениеИнформационнойБазыМР (где МР — префикс вашей конфигурации). Для быстрой подготовки каркаса процедур можно использовать консоль кода с ИИ-помощником.Разберем пример кода, который должен содержаться в этом модуле (в качестве подспорья можно использовать справочник по методам БСП с примерами). Нам нужно переопределить основные параметры регистрации:
Процедура ПриДобавленииПодсистем(ПереченьПодсистем) Экспорт
// Регистрация основной конфигурации
Подсистема = ПереченьПодсистем.Добавить();
Подсистема.Имя = "МояРазработка";
Подсистема.Версия = "1.0.1.1";
// Регистрация самой БСП - версия должна строго соответствовать релизу!
Подсистема = ПереченьПодсистем.Добавить();
Подсистема.Имя = "СтандартныеПодсистемы";
Подсистема.Версия = "3.1.11.299";
КонецПроцедуры
Важный момент: версия БСП (в примере 3.1.11.299) должна точно совпадать с версией дистрибутива, который вы внедряете. Это позволит системе понять, что обработчики для предыдущих версий запускать не требуется.
Проанализируем ситуацию далее. Чтобы созданный нами модуль заработал, его нужно подключить в общую цепочку вызовов БСП. Для этого перейдем в общий модуль ПодсистемыКонфигурацииПереопределяемый.
Найдем процедуру ПриДобавленииПодсистем (в навигации по экспортным процедурам поможет специальный MCP сервер) и вызовем в ней наш новый модуль:
Процедура ПриДобавленииПодсистем(ПереченьПодсистем) Экспорт
ОбновлениеИнформационнойБазыМР.ПриДобавленииПодсистем(ПереченьПодсистем);
КонецПроцедуры
После этого система при старте будет знать актуальные версии всех установленных компонентов.
Если вы уже запустили базу и получили ошибку, описанную автором темы, нам потребуется воспользоваться механизмом обхода блокировки. Рассмотрим, как это сделать правильно:
/C ОтключитьЛогикуНачалаРаботыСистемы.В открывшейся форме обработки нажмем кнопку Обновить или Перечитать. Это заставит систему заново просканировать метаданные и программный код. Часто после этой манипуляции «проблемные» обработчики, которые система пыталась запустить ошибочно, помечаются как выполненные или вовсе исчезают из очереди, так как система осознает текущую версию библиотеки.
Разберем еще один нюанс, упомянутый в обсуждении. При создании базы из шаблона БСП часто попадают «демо-модули» и лишние объекты. Это происходит, если разработчик выбирает демонстрационную конфигурацию вместо чистой библиотеки.
Правильный подход:
Для чистого внедрения в новую базу никогда не используйте файл 1Cv8.cf из корневой папки шаблона, если там указано «Demo». Ищите в поставке БСП папку ExtFiles\StandardSubsystems. Именно там лежит «эталонный» файл конфигурации без лишних справочников Товары, Контрагенты и прочих примеров, которые только увеличивают размер базы и создают лишний «шум» в коде.
Если после всех манипуляций база всё еще находится в состоянии «обновления» и не дает записывать данные, можно инициировать полное прохождение всех процедур. Для этого закройте приложение и запустите его с параметром:
/C ЗапуститьОбновлениеИнформационнойБазы
Это запустит процесс последовательного выполнения всех необходимых обработчиков (включая фоновые). Поскольку база пустая, процесс пройдет быстро, и все константы (включая СведенияОбОбновленииИнформационнойБазы) примут корректные значения.
Для успешного внедрения БСП на чистую базу без ошибок отложенных обработчиков необходимо:
.cf файл из поставки (не демо).ОтключитьЛогикуНачалаРаботыСистемы для доступа к обработке Описание обработчиков обновления.ПодсистемыКонфигурацииПереопределяемый прописаны ссылки на ваши модули.Соблюдение этого порядка действий гарантирует стабильный первый запуск системы и корректную работу всех механизмов Библиотеки стандартных подсистем.