При активной доработке типовых конфигураций, таких как Управление торговлей 11, ERP или Комплексная автоматизация, программисты часто сталкиваются с необходимостью управления жизненным циклом своих изменений. Просто внести код недостаточно — нужно информировать пользователей о новых функциях, корректно изменять структуру данных при обновлении и отслеживать текущую версию внедренных доработок. Библиотека стандартных подсистем (БСП) предоставляет для этого мощный механизм, который часто недооценивают.
В этой статье мы разберем, как интегрировать свои доработки в общую экосистему обновления БСП, чтобы ваши «допилки» имели свои номера версий, историю изменений и автоматические обработчики обновления.
Разберем главный миф: процесс обновления запускается не только при выходе нового релиза от «1С». Механизм ОбновлениеИнформационнойБазы срабатывает каждый раз, когда версия в метаданных конфигурации становится выше, чем версия, зафиксированная в информационной базе (в регистре сведений ВерсииПодсистем).
Чтобы БСП начала учитывать ваши изменения, мы должны зарегистрировать свою «виртуальную» или реальную подсистему. Рассмотрим шаги по регистрации:
ПодсистемыКонфигурацииПереопределяемый.ПриДобавленииПодсистем необходимо добавить описание вашей новой подсистемы.Проанализируем пример кода для регистрации:
Процедура ПриДобавленииПодсистем(СписокПодсистем)
Описание = СписокПодсистем.Добавить();
Описание.Имя = "МоиДоработки";
Описание.Версия = "1.0.2.15"; // Текущая версия ваших изменений
Описание.Основная = Ложь;
КонецПроцедуры
Здесь Описание.Имя — это идентификатор, который будет отображаться в регистре ВерсииПодсистем, а Описание.Версия — это строковое представление текущей версии вашего кода. Как только вы измените это число в коде и запустите систему, БСП поймет, что требуется обновление.
Предположим, в версии 1.0.2.15 вы добавили новый реквизит в справочник и его нужно заполнить данными на основании старых записей. Для этого используются обработчики обновления. Выясним, как их правильно зарегистрировать.
Нам потребуется создать собственный общий модуль, например, _ОбновлениеИнформационнойБазы (префикс подчеркивания помогает отделить свои объекты). В этом модуле должна быть процедура, которая передает сведения об обработчиках в БСП.
Пример регистрации обработчика для конкретной версии:
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "1.0.2.15";
Обработчик.Процедура = "_ОбновлениеИнформационнойБазы.ЗаполнитьНовыеРеквизиты";
Обработчик.ВыполнятьВСеансеАдминистрирования = Истина;
КонецПроцедуры
Теперь рассмотрим саму процедуру обновления. Она должна находиться в вашем модуле и иметь соответствующую структуру:
Процедура ЗаполнитьНовыеРеквизиты() Экспорт
// Здесь пишем логику обработки данных
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
// Обработка данных
КонецЦикла;
КонецПроцедуры
Важный момент: БСП автоматически отслеживает, какие обработчики уже выполнялись. Если пользователь находится на версии 1.0.1.1, а вы выпустили 1.0.2.15, система последовательно выполнит все промежуточные обработчики, которые вы когда-либо регистрировали для этого интервала.
Чтобы пользователи понимали, что именно изменилось в ваших доработках, проанализируем механизм Release Notes. БСП умеет собирать данные из макетов ОписаниеИзмененийСистемы.
Для реализации этого функционала:
О_ОписаниеИзмененийСистемы.При запуске после обновления версии, система сравнит номер версии и покажет пользователю окно с текстом из этого макета. Это позволяет профессионально презентовать результаты работы программиста заказчику или конечным пользователям.
Если ваши доработки вынесены в расширение (что является стандартом для современных версий УТ 11), процесс выглядит еще изящнее. В последних версиях БСП расширения могут иметь собственный жизненный цикл.
В модуле объекта расширения можно определить функцию СведенияООбновлении. Разберем, как это работает: при подключении расширения БСП считывает эти сведения и самостоятельно создает записи в регистре ВерсииПодсистем, привязываясь к имени расширения. Это позволяет обновлять логику расширения независимо от основной конфигурации.
Иногда при разработке нам нужно «прогнать» обновление несколько раз. Рассмотрим, как это сделать:
/C ЗапуститьОбновлениеИнформационнойБазы. Это заставит БСП игнорировать проверку версий и запустить процедуры обновления принудительно.Использование штатных механизмов БСП для версионирования своих доработок — это признак высокого качества разработки. Это гарантирует, что ваши данные всегда будут в актуальном состоянии, а пользователи будут вовремя узнавать о новых возможностях системы.