Как настроить версионирование собственной подсистемы и запустить обновление информационной базы в 1С

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

При активном развитии и доработке типовых конфигураций (таких как 1С:ERP Управление предприятием, 1С:Комплексная автоматизация или 1С:Управление торговлей) разработчики часто выделяют новый функционал в отдельные подсистемы. С ростом сложности встает задача автоматического выполнения обработчиков обновления данных при переходе на новую версию своей подсистемы без изменения номера версии основной конфигурации.

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

Принцип работы механизма обновления в Библиотеке стандартных подсистем

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

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

Регистрация собственной подсистемы в БСП

Рассмотрим по шагам, как корректно встроить свою подсистему в типовой механизм обновления.

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

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

  2. Создание модуля обновления подсистемы.
    Создадим серверный общий модуль с именем, указанным при регистрации (в нашем примере — ОбновлениеИнформационнойБазыМояПодсистема). В этом модуле обязательно создадим экспортную процедуру ПриДобавленииОбработчиковОбновления:
    
    Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
        
        Обработчик = Обработчики.Добавить();
        Обработчик.Версия = "1.0.1.5";
        Обработчик.Процедура = "ОбновлениеИнформационнойБазыМояПодсистема.ЗаполнитьНовыеРеквизиты";
        Обработчик.НачальноеЗаполнение = Истина;
        
    КонецПроцедуры
    

    В этом же модуле опишем саму процедуру обновления данных ЗаполнитьНовыеРеквизиты(), которая выполнит требуемые действия при первом старте после изменения версии подсистемы.

Почему версия в регистре не обновляется или обработчики не стартуют

Выясним типичные причины, с которыми сталкиваются разработчики при отладке:

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

Программный запуск проверки и обновления

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


// Проверим необходимость обновления версий подсистем
Если ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда
    // Запуск выполнения процедур обновления
    ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы();
КонецЕсли;

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

← На главную