Skip to content
Development
Skill

/code-patch

Точечно вставить или заменить BSL-код в логически адресованном модуле XML-выгрузки Configuration или Extension 1С. Используй для одной проверяемой операции insert или replace.

BOOST
From plugin
unica
22749 skills1 MCP
Install
$ npx -y skills add IngvarConsulting/unica --skill code-patch --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/code-patch

Context preview

The summary Claude sees to decide when to auto-load this skill.

Точечно вставить или заменить BSL-код в логически адресованном модуле XML-выгрузки Configuration или Extension 1С. Используй для одной проверяемой операции insert или replace.

SKILL.md

code-patch.SKILL.md
name: code-patch
description: Точечно вставить или заменить BSL-код в логически адресованном модуле XML-выгрузки Configuration или Extension 1С. Используй для одной проверяемой операции insert или replace.
argument-hint: <at> <insert|replace> <text>
allowed-tools:
  - Read
  - Glob

/code-patch — безопасная вставка и замена BSL

MCP routing

  • Preferred path: use MCP `unica` tool `unica.apply` с операциями

`code.insert` и `code.replace`.

  • Do not call internal MCP/CLI adapters directly. They are hidden behind

`unica` and synchronized by the orchestrator.

  • Сначала вызови `unica.apply` с `at` и `ops`: это план без записи.

Когда пользователь поручил внести эту правку, вызови `unica.apply` только с `executionToken` из `data.executionToken` успешного плана.

`args.at` выбирает модуль или его содержимое. У объекта с несколькими модулями роль входит в адрес: `…Module.Object`, тело модуля — `…Module.Object.Body`. Общий модуль сам себе модуль: `CommonModule.<Имя>` и `CommonModule.<Имя>.Body`.

Для `code.insert` без `selector` допустим адрес модуля или его `.Body`: текст добавляется в конец модуля, `position` не передаётся. Вставка до или после метода адресуется самим методом `…Method.<Имя>` с обязательным `position: "before" | "after"`; `selector` при этом не передаётся. `selector.method` снят: такой вызов получает отказ `bad_value`, а `next` ведёт к адресу метода. Адрес `…Method.<Имя>.Body` вставку не адресует. Для вставки внутрь тела метода передай адрес самого модуля, `selector` с одним `anchor`, который однозначно находится внутри одного метода, и обязательный `position`. Совпадения вне методов не учитываются. `before` вставляет текст перед первой строкой anchor, `after` — после его последней строки; это границы строк, а не позиция подстроки. Вставка перед методом встаёт выше его документирующего комментария, аннотаций и директив; условие `#Если … #КонецЕсли`, обрамляющее только этот метод, она обходит целиком, а в условии с другими методами остаётся внутри него.

В тексте вставки отдели новый метод от соседнего пустой строкой. Автоматическую расстановку этих разделителей текущая операция ещё не делает.

`code.replace` принимает адрес тела модуля, метода или тела метода, например `CommonModule.<Имя>.Method.<Имя>.Body`. При таком адресе отдельный `selector` не передаётся. `unica.view` по адресу `…Method.<Имя>.Body` отдаёт текст метода с документирующим комментарием, директивой, объявлением и строкой окончания. Этот текст с правкой, переданный `code.replace` по тому же адресу, заменяет ровно прочитанный участок; текст без объявления метода заменяет только строки тела. Метод целиком заменяется только по адресу `…Method.<Имя>`: `selector.method` у замены получает отказ `bad_value`, а `next` ведёт к адресу метода. На адресе самого модуля замена принимает лишь `selector` с `anchor`. Сначала проверь выбранный адрес чтением.

Чтобы выделить метод, замени по адресу `…Method.<Имя>` весь метод текстом из него самого и новых helper-методов. Helpers встанут сразу после метода, а повтор той же замены ничего не запишет. Имена helpers должны быть новыми для модуля: метод, уже объявленный в модуле, вызывает отказ `bad_value` до записи. Одноимённые методы в ветвях `#Если … #Иначе` внутри текста замены или уже в модуле дубликатами не считаются.

Правится модуль существующего объекта метаданных в допущенном наборе исходников формата платформы. Физический путь к `*Module.bsl` остаётся внутренней деталью: наружу его отдаёт только аварийный `unica.resolve`, и в обычном ходе работы он не нужен. Создать объект метаданных, удалить модуль целиком, править EDT или внешние файлы, синхронизировать исходники с базой этим путём нельзя.

Если правку нельзя выразить одной безопасной операцией, остановись: прочитай предмет через `unica.view {at}` на узле модуля — ветвь `Method` перечисляет методы, ветвь `Body` отдаёт исходный текст модуля отдельным текстовым блоком ответа — и вернись с более узкой операцией. Текст сверх бюджета ответа клиента (по умолчанию 16 КиБ) не отдаётся: отказ `result_too_large` ведёт к `Region` и `Method`, читай по методам.

Операции

| Операция | Что делает | `args` | |---|---|---| | `code.insert` | Добавляет текст в конец модуля, до/после метода или якоря | `at`, `text`; у метода — `position`; у якоря — `selector.anchor`, `position` | | `code.replace` | Заменяет содержимое узла по адресу | `at`, `text` |

Несколько операций одного вызова применяются как одна правка: либо все, либо ни одной.

У заимствованного объекта расширения запись BSL также подключает модуль: недостающее состояние `PropertyState` добавляется в дескриптор той же транзакцией. Предпросмотр показывает обе правки. Уже установленное состояние сохраняется; несовместимое состояние вызывает отказ до записи. После применения проверь расширение через `unica.check {at: "ext:Configuration"}`, подставив имя своего набора исходников.

Порядок

1. Найди адрес: `unica.search {corpus: "names"}` по имени объекта, затем `unica.view {at}` вниз по ветвям `Module` и `Method`. 2. Прочти предмет: `unica.view {at}` на узле метода даёт подпись, контекст компиляции и собственные строки, `…Method.<Имя>.Body` — его текст. 3. Предпросмотр: `unica.apply` с `at` и `ops`. Ответ несёт план правки и токен `data.executionToken`. Для точного просмотра вызови `unica.diff` с этим `executionToken`: `data.chunks` содержит исходные и итоговые диапазоны с контекстом. Отступы, BOM и переводы строк сохранены. При `truncated: true` продолжи с `cursor` и тем же `limit` до конца. Чтение не меняет файлы и не расходует токен. 4. Применение: вызов только с `executionToken` из успешного плана. Исполнитель использует сохранённую транзакцию и проверяет её входы. После `stale_revision` получи новый план; изменение файла вне входов плана не мешает исполнению. 5. Проверка: `unica.check {at}` на модуле. Новые находки важности `error` блокируют.

MCP examples

Вставить строку внутрь обработчика

Сначала прочитай тело метод

Read more
Ships withunica

Unica (Ю&#x301;ника) — плагин для Codex, Claude Code и ZCode для разработки на 1С:Предприятии.

Get the whole plugin

Other skills on unica.

api-design
Skill

api-design

Проектирование и ревью API 1С: публичный программный интерфейс, служебный интерфейс, переопределяемые модули, совместимость,…

autonomous-server
Skill

autonomous-server

Автономный сервер отладки 1С. Используй когда нужно развернуть или проанализировать локальный автономный контур для отладки…

background-jobs
Skill

background-jobs

Фоновые и регламентные задания 1С. Используй когда нужно спроектировать, проверить или диагностировать background jobs,…

bsp-patterns
Skill

bsp-patterns

Поиск и применение паттернов БСП. Используй когда задача про длительные операции, профили групп доступа, безопасное хранение,…

cf-edit
Skill

cf-edit

Точечное редактирование конфигурации 1С. Используй когда нужно изменить свойства конфигурации, добавить или удалить объект из…

cf-init
Skill

cf-init

Создать пустую конфигурацию 1С (scaffold XML-исходников). Используй когда нужно начать новую конфигурацию с нуля