api-design
Проектирование и ревью API 1С: публичный программный интерфейс, служебный интерфейс, переопределяемые модули, совместимость,…
Заимствовать объект верхнего уровня или значение перечисления из конфигурации 1С в расширение и обновить ранее заимствованное, сохранив идентификаторы и локальные данные.
$ npx -y skills add IngvarConsulting/unica --skill cfe-borrow --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/cfe-borrowContext preview
The summary Claude sees to decide when to auto-load this skill.
Заимствовать объект верхнего уровня или значение перечисления из конфигурации 1С в расширение и обновить ранее заимствованное, сохранив идентификаторы и локальные данные.
name: cfe-borrow description: Заимствовать объект верхнего уровня или значение перечисления из конфигурации 1С в расширение и обновить ранее заимствованное, сохранив идентификаторы и локальные данные. argument-hint: <extension:Configuration> <parent:Kind.Name[.EnumValue.Name]> allowed-tools: - Read - Glob
Используй `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
Unica (Ю́ника) — плагин для Codex, Claude Code и ZCode для разработки на 1С:Предприятии.
Проектирование и ревью API 1С: публичный программный интерфейс, служебный интерфейс, переопределяемые модули, совместимость,…
Автономный сервер отладки 1С. Используй когда нужно развернуть или проанализировать локальный автономный контур для отладки…
Фоновые и регламентные задания 1С. Используй когда нужно спроектировать, проверить или диагностировать background jobs,…
Поиск и применение паттернов БСП. Используй когда задача про длительные операции, профили групп доступа, безопасное хранение,…
Точечное редактирование конфигурации 1С. Используй когда нужно изменить свойства конфигурации, добавить или удалить объект из…
Создать пустую конфигурацию 1С (scaffold XML-исходников). Используй когда нужно начать новую конфигурацию с нуля