subsystem-update

star 68

Use for инициализации обновления подсистемы БСП: блокировка сеансов, запуск обработчиков обновления, проверка через ЖР и регистр ВерсииПодсистем.

SteelMorgan By SteelMorgan schedule Updated 6/5/2026

name: subsystem-update description: "Use for инициализации обновления подсистемы БСП: блокировка сеансов, запуск обработчиков обновления, проверка через ЖР и регистр ВерсииПодсистем."

Обновление подсистемы БСП

Когда применять

Триггер Действие
Добавлен обработчик обновления с новой версией Выполнить полный цикл обновления
Нужно повторно запустить обработчик Сбросить версию в регистре, затем полный цикл
Обновление не сработало Диагностика через ЖР

Предусловия

  1. Обработчик зарегистрирован в модуле обновления подсистемы (например ОбновлениеИнформационнойБазыXXX)
  2. Модуль подсистемы зарегистрирован в ИнтеграцияПодсистемБСП.ПриДобавленииПодсистем
  3. Проект собран (v8-runner build) — изменения в коде загружены в БД

Полный цикл обновления

Шаг 1. Проверить текущую версию

ВЫБРАТЬ ИмяПодсистемы, Версия
ИЗ РегистрСведений.ВерсииПодсистем
ГДЕ ИмяПодсистемы = "ИМЯ_ПОДСИСТЕМЫ"

БСП выполнит обработчик, только если версия в регистре < версии обработчика.

Шаг 2. Заблокировать базу

Обработчики с МонопольныйРежим = Истина требуют отсутствия других сеансов.

# Данные подключения: <project_root>/configs/yaxunit-runner.yml → app.connection
# cluster_uuid и infobase_uuid: <project_root>/configs/cluster_map.yaml

# Заблокировать новые сеансы и регламентные задания
rac infobase update \
  --cluster=<cluster_uuid> \
  --infobase=<infobase_uuid> \
  --infobase-user=<user> --infobase-pwd=<pwd> \
  --sessions-deny=on \
  --scheduled-jobs-deny=on \
  --denied-message="Обновление ИБ" \
  --permission-code=UpdateIB \
  <ras_host>:<ras_port>

# Завершить все оставшиеся сеансы
rac session list --cluster=<cluster_uuid> --infobase=<infobase_uuid> <ras_host>:<ras_port>

# Для каждого сеанса:
rac session terminate --cluster=<cluster_uuid> --session=<session_uuid> <ras_host>:<ras_port>

Шаг 3. Запустить обновление

/opt/1cv8/current/1cv8c ENTERPRISE \
  /S"<server>/<infobase>" \
  /N"<user>" /P"<password>" \
  /C"ЗапуститьОбновлениеИнформационнойБазы" \
  /UC"UpdateIB" \
  /DisableStartupDialogs

Параметр /UC"UpdateIB" — код разрешения, совпадающий с --permission-code из шага 2.

Ожидание: процесс завершится автоматически (30–120 сек в зависимости от объёма данных).

Шаг 4. Снять блокировку

rac infobase update \
  --cluster=<cluster_uuid> \
  --infobase=<infobase_uuid> \
  --infobase-user=<user> --infobase-pwd=<pwd> \
  --sessions-deny=off \
  --scheduled-jobs-deny=off \
  --denied-message="" \
  --permission-code="" \
  <ras_host>:<ras_port>

Шаг 5. Проверить результат

  1. Версия в регистре — должна обновиться до целевой:
ВЫБРАТЬ ИмяПодсистемы, Версия
ИЗ РегистрСведений.ВерсииПодсистем
ГДЕ ИмяПодсистемы = "ИМЯ_ПОДСИСТЕМЫ"
  1. ЖР — проверить ошибки за время обновления:
    • logc_get_event_log(level='Error', from=<время_запуска>) — не должно быть ошибок Обновление информационной базы
    • logc_get_event_log(level='Information', from=<время_запуска>) — искать записи вашего обработчика

Повторный запуск обработчика

Если обработчик уже выполнился (версия в регистре >= версии обработчика), БСП его пропустит.

Варианты повторного запуска:

  • Увеличить версию обработчика (1.0.0.1 → 1.0.0.2) — рекомендуемый способ
  • Сбросить версию в регистре через прямой SQL к СУБД — только для отладки

Типичные ошибки

Ошибка Причина Решение
Невозможно установить монопольный режим Активные сеансы в базе Шаг 2: заблокировать + завершить все сеансы
Обновление уже выполняется Зависший сеанс от предыдущей попытки Завершить зависший сеанс через rac session terminate
Метод объекта не обнаружен (ПередОбновлениемИнформационнойБазы) Модуль подсистемы не содержит обязательных callback-процедур Добавить 6 обязательных процедур-заглушек (см. шаблон ниже)
Обработчик не вызвался (версия не изменилась) Версия в регистре >= версии обработчика Проверить текущую версию запросом, при необходимости увеличить
Конфигурация обновлена, но обработчик не выполнился Обработчик зарегистрирован дважды или не в той подсистеме Проверить grep по имени процедуры во всех модулях

Шаблон модуля обновления подсистемы

Минимальный набор обязательных процедур для модуля ОбновлениеИнформационнойБазыXXX:

#Область ПрограммныйИнтерфейс

#Область ДляВызоваИзДругихПодсистем

// СтандартныеПодсистемы.БазоваяФункциональность
Процедура ПриДобавленииПодсистем(МодулиПодсистем) Экспорт
    МодулиПодсистем.Добавить("ОбновлениеИнформационнойБазыXXX");
КонецПроцедуры

// СтандартныеПодсистемы.ОбновлениеВерсииИБ
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
    Описание.Имя    = "ИМЯ_ПОДСИСТЕМЫ";
    Описание.Версия = "1.0.0.1";
    Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы");
КонецПроцедуры

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

//@skip-warning
Процедура ПередОбновлениемИнформационнойБазы() Экспорт
КонецПроцедуры

//@skip-warning
Процедура ПослеОбновленияИнформационнойБазы(Знач ПредыдущаяВерсияИБ, Знач ТекущаяВерсияИБ,
        Знач ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим) Экспорт
КонецПроцедуры

//@skip-warning
Процедура ПриПодготовкеМакетаОписанияОбновлений(Знач Макет) Экспорт
КонецПроцедуры

//@skip-warning
Процедура ПриОпределенииРежимаОбновленияДанных(РежимОбновленияДанных, СтандартнаяОбработка) Экспорт
КонецПроцедуры

//@skip-warning
Процедура ПриДобавленииОбработчиковПереходаСДругойПрограммы(Обработчики) Экспорт
КонецПроцедуры

//@skip-warning
Процедура ПриЗавершенииПереходаСДругойПрограммы(Знач ПредыдущееИмяКонфигурации,
        Знач ПредыдущаяВерсияКонфигурации, Параметры) Экспорт
КонецПроцедуры

#КонецОбласти
#КонецОбласти

Регистрация в ИнтеграцияПодсистемБСП.ПриДобавленииПодсистем:

МодулиПодсистем.Добавить("ОбновлениеИнформационнойБазыXXX");

depends_on: - framework/skills/tool-usage/platform-admin/rac-use/SKILL.md requires: - tools

Install via CLI
npx skills add https://github.com/SteelMorgan/1c-agent-based-dev-framework --skill subsystem-update
Repository Details
star Stars 68
call_split Forks 12
navigation Branch main
article Path SKILL.md
More from Creator