framework/skills/tool-usage/platform-admin/subsystem-update/SKILL.md
Use for инициализации обновления подсистемы БСП: блокировка сеансов, запуск обработчиков обновления, проверка через ЖР и регистр ВерсииПодсистем.
npx skillsauth add steelmorgan/1c-agent-based-dev-framework subsystem-updateInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Триггер | Действие | |---------|----------| | Добавлен обработчик обновления с новой версией | Выполнить полный цикл обновления | | Нужно повторно запустить обработчик | Сбросить версию в регистре, затем полный цикл | | Обновление не сработало | Диагностика через ЖР |
ОбновлениеИнформационнойБазыXXX)ИнтеграцияПодсистемБСП.ПриДобавленииПодсистемv8-runner build) — изменения в коде загружены в БДВЫБРАТЬ ИмяПодсистемы, Версия
ИЗ РегистрСведений.ВерсииПодсистем
ГДЕ ИмяПодсистемы = "ИМЯ_ПОДСИСТЕМЫ"
БСП выполнит обработчик, только если версия в регистре < версии обработчика.
Обработчики с МонопольныйРежим = Истина требуют отсутствия других сеансов.
# Данные подключения: <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>
/opt/1cv8/current/1cv8c ENTERPRISE \
/S"<server>/<infobase>" \
/N"<user>" /P"<password>" \
/C"ЗапуститьОбновлениеИнформационнойБазы" \
/UC"UpdateIB" \
/DisableStartupDialogs
Параметр /UC"UpdateIB" — код разрешения, совпадающий с --permission-code из шага 2.
Ожидание: процесс завершится автоматически (30–120 сек в зависимости от объёма данных).
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>
ВЫБРАТЬ ИмяПодсистемы, Версия
ИЗ РегистрСведений.ВерсииПодсистем
ГДЕ ИмяПодсистемы = "ИМЯ_ПОДСИСТЕМЫ"
logc_get_event_log(level='Error', from=<время_запуска>) — не должно быть ошибок Обновление информационной базыlogc_get_event_log(level='Information', from=<время_запуска>) — искать записи вашего обработчикаЕсли обработчик уже выполнился (версия в регистре >= версии обработчика), БСП его пропустит.
Варианты повторного запуска:
| Ошибка | Причина | Решение |
|--------|---------|---------|
| Невозможно установить монопольный режим | Активные сеансы в базе | Шаг 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:
testing
MUST use BEFORE making a judgment about the cause of a conflict, a test failure, or an artifact dispute. Defines the end-to-end verification method L1→L6 and the classification of the first broken link.
development
MUST use AFTER a work cycle with ≥2 iterations (wrote → error → fixed → success). Provides the retrospective procedure and the format for recording practice/anti-patterns in references/learned-patterns.md or {project}/.context/learned-patterns.md.
tools
MUST use WHEN you are writing reusable knowledge into RLM (pattern / architectural decision / stable domain fact) OR reading it before a non-trivial task/solution in the domain. Provides the breakdown of native-push vs RLM-pull, tools for writing and reading RLM, H-MEM levels, and hygiene.
testing
MUST use WHEN the task is classified as simple (< 20 lines, 1 file, no new metadata objects, no architectural decisions). Provides a short cycle of 3 steps with a guard on the self path and mandatory verify.