Skip to content
Development
Skill

/cfe-borrow

Заимствовать объект верхнего уровня или значение перечисления из конфигурации 1С в расширение и обновить ранее заимствованное, сохранив идентификаторы и локальные данные.

BOOST
From plugin
unica
22749 skills1 MCP
Install
$ npx -y skills add IngvarConsulting/unica --skill cfe-borrow --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/cfe-borrow

Context preview

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

Заимствовать объект верхнего уровня или значение перечисления из конфигурации 1С в расширение и обновить ранее заимствованное, сохранив идентификаторы и локальные данные.

SKILL.md

cfe-borrow.SKILL.md
name: cfe-borrow
description: Заимствовать объект верхнего уровня или значение перечисления из конфигурации 1С в расширение и обновить ранее заимствованное, сохранив идентификаторы и локальные данные.
argument-hint: <extension:Configuration> <parent:Kind.Name[.EnumValue.Name]>
allowed-tools:
  - Read
  - Glob

Заимствование объекта в расширение

MCP routing

Используй `unica.apply` с операцией `object.borrow`. В `at` укажи корень расширения, в `from` — проверенный адрес объекта родительской конфигурации. Имена наборов возьми из `unica.view {}` и прочитай родителя через `unica.view`. Родитель должен быть зарегистрирован в своей конфигурации и доступен для чтения. Одинаковое имя объекта само по себе не доказывает связь.

Сначала вызови `unica.apply` с `at` и `ops` для плана без записи. Проверь `changed`, `effects` и `data.borrowing`: там указаны родитель, адрес результата, создание или обновление, изменяемые свойства и защищённые перекрытия. Исполняй сохранённый план вызовом только с `executionToken` из `data.executionToken`, когда пользователь поручил внести эту правку. План сохраняет прочитанные входы расширения и родителя, а также ожидаемые изменения. Если эти входы изменились и получен `stale_revision`, нужен новый план; изменение файла вне входов плана не мешает исполнению.

Первое заимствование создаёт собственные идентификаторы объекта расширения и регистрирует его в корне. Явный повтор обновляет перенесённые свойства, сохраняет идентификаторы, локальное содержимое вне переносимых свойств и свойства с признаками перекрытия. Составное переносимое свойство, например `DefinedType.Type`, обновляется целиком, если оно не защищено перекрытием. Если изменений нет, файлы не переписываются. Повтор не меняет родителя и набор перекрытий; повреждённые идентификаторы требуют отдельного восстановления.

`from` выбирает родителя для этого вызова. Постоянную привязку наборов и автоматическую синхронизацию операция не создаёт. При нескольких копиях родителя с теми же идентификаторами последующее чтение может сообщить неоднозначность.

Предпросмотр и чтение

Пример использует наборы `parent` и `ext`; подставь имена своего проекта.

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.apply",
    "arguments": {
      "at": "ext:Configuration",
      "ops": [
        {"op": "object.borrow", "args": {"from": "parent:Catalog.Items"}}
      ]
    }
  }
}

После применения прочитай результат:

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.view",
    "arguments": {"at": "ext:Catalog.Items"}
  }
}

`props.belonging` различает свой и заимствованный объект. У заимствованного объекта `parentId` хранит идентификатор родителя; `extends` появляется только после проверки полного адреса, по которому родитель читается. `parentStatus` сообщает `resolved`, `not_found`, `ambiguous` или `unavailable`. Недоступный родитель не скрывает сведения об исправном объекте расширения. Корень расширения не является заимствованным объектом.

Список `overrides` показывает защищённые свойства. Если он не помещается в компактный ответ, `overridesComplete: false` и `overridesCount` сообщают неполноту и количество; отсутствие строки не означает отсутствие перекрытий.

Заимствованный общий модуль платформа может выгрузить без флагов свойств. Тогда в `props.commonModule` они равны `null`, а `compile.contexts` методов — `null`, если не записан хотя бы один флаг среды; фильтр `context` такой модуль отвергает. Значения смотри у родителя по `props.extends`, когда он разрешён.

Заимствованные роль, форму, макет объекта и пакет XDTO платформа может выгрузить без своего содержимого (`Rights.xml`, `Form.xml`, `Template.xml`, `Package.bin`). Тогда узел отвечает `props.content: "inherited"` без ветвей содержимого, вид макета — `null`, адрес внутри содержимого и модуль такой формы — `not_found`, а `check` — `readable`. Запись прав, элементов, модуля формы, тела макета и типов отказывает и ведёт к объекту расширения. Само содержимое читай у родителя по `props.extends` объекта расширения.

Перекрытия и границы

При первом заимствовании необязательный `args.overrides` задаёт имена свойств, которые нужно защитить от последующего обновления. Подтверждены выгрузкой платформы `Catalog.DescriptionLength` (`Extended`) и `CommonModule.Server` (`Notify`); например, `"overrides": ["DescriptionLength"]` для справочника. Начальное значение берётся у родителя, дальнейшая правка локального значения выполняется отдельно. Не копируй один XML-маркер на все свойства: платформа удаляет неподходящие сочетания, в частности `Synonym/Extended`.

Повтор сохраняет существующие состояния `Extended`, `Notify` и `MultiState`. Локальные `Comment` и `Synonym` не запрашиваются как контролируемые свойства. Неподдерживаемый профиль или повреждение приводят к отказу без записи; обходить отказ прямым вызовом внутреннего адаптера нельзя.

Операция переносит дескриптор объекта верхнего уровня или отдельное значение перечисления по адресу `parent:Enum.Operations.EnumValue.Costs`. Во втором случае она заимствует владельца, если его ещё нет, и добавляет только выбранное значение с собственным UUID и ссылкой на UUID исходного значения. Значение находится внутри `Enums/Operations.xml`; отдельного файла значения нет. Повтор сохраняет UUID значения, локальные соседние значения, `Synonym` и `Comment`, а при отсутствии изменений не переписывает файл. Начальное значение `Synonym` берётся у родителя; дальнейшие локальные изменения `Synonym` и `Comment` принадлежат расширению. План и исполнение проверяют те же входы; отсутствующее значение или собственное одноимённое значение расширения дают отказ без записи. `overrides` для заимствования значения не поддерживаются, в том числе пустой список.

Пример операции на корне расширения:

`{"op":"object.borrow","args":{"from":"parent:Enum.Operations.EnumValue.Costs"}}`

Заимствование форм вместе с их реквизитами и элементами остаётся в [задаче #937](http

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-исходников). Используй когда нужно начать новую конфигурацию с нуля