api-design
Проектирование и ревью API 1С: публичный программный интерфейс, служебный интерфейс, переопределяемые модули, совместимость,…
Точечно вставить или заменить BSL-код в логически адресованном модуле XML-выгрузки Configuration или Extension 1С. Используй для одной проверяемой операции insert или replace.
$ npx -y skills add IngvarConsulting/unica --skill code-patch --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/code-patchContext preview
The summary Claude sees to decide when to auto-load this skill.
Точечно вставить или заменить BSL-код в логически адресованном модуле XML-выгрузки Configuration или Extension 1С. Используй для одной проверяемой операции insert или replace.
name: code-patch description: Точечно вставить или заменить BSL-код в логически адресованном модуле XML-выгрузки Configuration или Extension 1С. Используй для одной проверяемой операции insert или replace. argument-hint: <at> <insert|replace> <text> allowed-tools: - Read - Glob
`code.insert` и `code.replace`.
`unica` and synchronized by the orchestrator.
Когда пользователь поручил внести эту правку, вызови `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` блокируют.
Сначала прочитай тело метод
Unica (Ю́ника) — плагин для Codex, Claude Code и ZCode для разработки на 1С:Предприятии.
Проектирование и ревью API 1С: публичный программный интерфейс, служебный интерфейс, переопределяемые модули, совместимость,…
Автономный сервер отладки 1С. Используй когда нужно развернуть или проанализировать локальный автономный контур для отладки…
Фоновые и регламентные задания 1С. Используй когда нужно спроектировать, проверить или диагностировать background jobs,…
Поиск и применение паттернов БСП. Используй когда задача про длительные операции, профили групп доступа, безопасное хранение,…
Точечное редактирование конфигурации 1С. Используй когда нужно изменить свойства конфигурации, добавить или удалить объект из…
Создать пустую конфигурацию 1С (scaffold XML-исходников). Используй когда нужно начать новую конфигурацию с нуля