cfe-borrow — скилл для Claude Code: заимствование объектов 1С
Скилл переносит объекты основной конфигурации 1С в расширение CFE. Пригодится, когда нужно изменить форму, добавить реквизит или перехватить метод.
/plugin marketplace add Nikolay-Shirokov/cc-1c-skills
/plugin install 1c-skills@cc-1c-skillsЧто делает cfe-borrow
Скилл создаёт XML-описания заимствованных объектов и регистрирует их в расширении. Можно выбрать объект, форму, реквизит или табличную часть; родительский объект для дочернего заимствуется автоматически. Для пакетной обработки укажите объекты через ;;.
Для формы можно задать -BorrowMainAttribute Form, чтобы сохранить привязки к реквизитам, уже выведенным на неё. Вариант All захватывает все реквизиты и табличные части. Затем новый реквизит добавляют через /meta-edit, а на форму выводят через /form-edit.
Сначала создайте расширение командой /cfe-init и проверьте, что в нём есть корректный Configuration.xml. Повторный вызов сохраняет собственные реквизиты и код модулей. У некоторых видов объектов платформа не примет собственные реквизиты табличной части; для бизнес-процессов и задач это ограничение действует до платформы 8.3.25.
Какие задачи решает
- заимствовать объект конфигурации в расширение
- сохранить привязки реквизитов при заимствовании формы
- добавить реквизит в табличную часть расширения
- заимствовать несколько объектов за один вызов
Примеры запросов агенту
- Заимствуй форму объекта и сохрани привязки к реквизитам через
-BorrowMainAttribute Form. - Добавь в расширение табличную часть документа, чтобы затем создать в ней собственный реквизит.
- Заимствуй несколько объектов конфигурации одним вызовом, разделив их через
;;.
Как установить cfe-borrow
1Через маркетплейс плагинов
/plugin marketplace add Nikolay-Shirokov/cc-1c-skills/plugin install 1c-skills@cc-1c-skillsКоманда ставит плагин 1c-skills целиком, со всеми его скиллами
2Через Skills CLI (Vercel)
npx skills add Nikolay-Shirokov/cc-1c-skills --skill cfe-borrow -a claude-code3Вручную: положить файлы
~/.claude/skills/cfe-borrow/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/cfe-borrow/
1Через Skills CLI (Vercel)
npx skills add Nikolay-Shirokov/cc-1c-skills --skill cfe-borrow -a codex2Вручную: положить файлы
.agents/skills/cfe-borrow/SKILL.mdДля всех проектов — ~/.agents/skills/
Вручную: положить файлы
.cursor/skills/cfe-borrow/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install Nikolay-Shirokov/cc-1c-skills cfe-borrow2Вручную: положить файлы
.github/skills/cfe-borrow/SKILL.mdКомандой платформы
gemini skills install https://github.com/Nikolay-Shirokov/cc-1c-skills --path .claude/skills/cfe-borrowВручную: положить файлы
.devin/skills/cfe-borrow/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Claude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о cfe-borrow
Как установить cfe-borrow в Claude Code?
В Claude Code добавьте маркетплейс командой /plugin marketplace add Nikolay-Shirokov/cc-1c-skills, затем установите плагин командой /plugin install 1c-skills@cc-1c-skills.
Что делает cfe-borrow?
Скилл заимствует объекты основной конфигурации 1С в расширение CFE и создаёт для них XML-описания. Он также умеет переносить формы с привязками к реквизитам.
Что нужно подготовить перед запуском cfe-borrow?
Расширение должно быть создано через /cfe-init и содержать корректный Configuration.xml. Для заимствования также нужны пути к расширению и конфигурации-источнику.
Исходный текст
SKILL.md · MIT
---
name: cfe-borrow
description: Заимствование объектов из конфигурации 1С в расширение (CFE). Используй когда нужно перехватить метод, изменить форму или добавить реквизит к существующему объекту конфигурации
argument-hint: -ExtensionPath <path> -ConfigPath <path> -Object "Catalog.Контрагенты.Form.ФормаЭлемента" -BorrowMainAttribute Form
allowed-tools:
- Bash
- Read
- Glob
---
# /cfe-borrow — Заимствование объектов из конфигурации
Заимствует объекты из основной конфигурации в расширение. Создаёт XML-файлы с `ObjectBelonging=Adopted` и `ExtendedConfigurationObject`, добавляет запись в ChildObjects расширения.
## Предусловие
Расширение должно быть создано (`/cfe-init`) и содержать валидный `Configuration.xml`.
### Авто-определение ConfigPath
Если пользователь не указал `-ConfigPath` — попробуй определить автоматически:
1. Прочитай `.v8-project.json` из корня проекта
2. Разреши целевую базу (по имени, ветке или `default` — алгоритм из `/db-list`)
3. Если у базы есть поле `configSrc` — используй как `-ConfigPath`
4. Если `configSrc` нет — спроси у пользователя
## Параметры
| Параметр | Описание |
|----------|----------|
| `ExtensionPath` | Путь к каталогу расширения (обязат.) |
| `ConfigPath` | Путь к конфигурации-источнику (обязат.) |
| `Object` | Что заимствовать (обязат.), batch через `;;` |
| `Module` | Создать пустые модули объекта: `ObjectModule`, `ManagerModule`, `RecordSetModule`, `ValueManagerModule` (через запятую) или `None`. У типов с единственным модулем (`CommonModule`, `HTTPService`, `WebService`) он создаётся и без параметра |
| `BorrowMainAttribute` | Заимствовать основной реквизит формы: `Form` — реквизиты, используемые на форме, `All` — все реквизиты объекта. Не указан — не заимствует. Требует форму в -Object |
## Формат -Object
- `Catalog.Контрагенты` — справочник
- `CommonModule.РаботаСФайлами` — общий модуль
- `Document.РеализацияТоваров` — документ
- `Enum.ВидыОплат` — перечисление
- `Catalog.Контрагенты.Form.ФормаЭлемента` — форма объекта (заимствование формы)
- `CommonForm.ВыборПериода` — общая форма, вместе с содержимым (как форма объекта). С `-BorrowMainAttribute` владелец берётся из типа основного реквизита: объект (`DataProcessorObject.X` и т.п.), основная таблица динамического списка или константы набора констант
- `Document.ЗаказКлиента.TabularSection.Товары`, `Document.ЗаказКлиента.Attribute.Комментарий`, `Document.ЗаказКлиента.TabularSection.Товары.Attribute.Цена`, `InformationRegister.Цены.Dimension.Номенклатура` — отдельный дочерний объект (реквизит, табличная часть, реквизит табличной части, измерение…), без формы. Виды: `Attribute`, `TabularSection`, `Dimension`, `Resource`, `AddressingAttribute`, `AccountingFlag`
- `Catalog.X ;; CommonModule.Y ;; Enum.Z` — несколько объектов
### Заимствование форм
Формат `Тип.Имя.Form.ИмяФормы` заимствует форму конкретного объекта. Если родительский объект ещё не заимствован — он будет заимствован автоматически.
Создаётся:
1. **Метаданные формы** — `Forms/ИмяФормы.xml` с `ObjectBelonging=Adopted`, `FormType=Managed`
2. **Form.xml** — `Forms/ИмяФормы/Ext/Form.xml` с копией исходной формы + `<BaseForm>` (начальное состояние)
3. **Module.bsl** — пустой файл `Forms/ИмяФормы/Ext/Form/Module.bsl`
4. **Регистрация** — `<Form>` в ChildObjects родительского объекта
### Заимствование основного реквизита формы (-BorrowMainAttribute)
**Когда нужно**: пользователь хочет добавить новый реквизит в существующий объект конфигурации и вывести его на заимствованную форму. Без `-BorrowMainAttribute` форма заимствуется "пустой" — только визуальные элементы, без привязки к данным объекта. С `-BorrowMainAttribute` форма сохраняет привязки к реквизитам объекта (DataPath), что позволяет затем добавить на неё новые элементы через `/form-edit`.
**Два режима**:
- `Form` — заимствует только те реквизиты объекта, которые уже выведены на форму. Оптимальный выбор для большинства случаев
- `All` — заимствует все реквизиты и табличные части объекта. Используй если планируешь выводить на форму реквизиты, которых на ней ещё нет
Объект, чьи реквизиты заимствуются, — тот, что в типе основного реквизита формы. Обычно это владелец формы; если другой (форма обработки с основным реквизитом `DocumentObject.X`), заимствуется он сам и его реквизиты.
**Типовой сценарий** (добавление реквизита + вывод на форму):
1. `/cfe-borrow` с `-BorrowMainAttribute` — заимствовать форму с реквизитами
2. `/meta-edit` — добавить новый реквизит в объект расширения
3. `/form-edit` — вывести реквизит на заимствованную форму
**Защита существующих данных**: уже заимствованный объект не перезаписывается — добавляется только недостающее. Повторный вызов безопасен: собственные реквизиты расширения, заимствованные дочерние объекты и код в модулях сохраняются.
### Заимствование реквизитов и табличных частей без формы
Формат `Тип.Имя.<Вид>.<Имя>` (и `Тип.Имя.TabularSection.<ТЧ>.Attribute.<Реквизит>`) заимствует один дочерний объект — реквизит, табличную часть, реквизит табличной части, измерение и т.п.:
- родительский объект заимствуется автоматически, для реквизита табличной части — и сама табличная часть
- табличная часть приходит без реквизитов. Форма, заимствованная позже с `-BorrowMainAttribute`, дозаимствует в неё недостающие реквизиты, собственные реквизиты сохраняются
- объект из ссылочного типа реквизита (`CatalogRef.Номенклатура`) заимствуется оболочкой — пустым, без реквизитов и форм
- вид не из списка или дочерний объект, которого нет в источнике, — ошибка, расширение не меняется
Коду модулей расширения реквизиты источника доступны и без заимствования — заимствуй их, только когда табличная часть нужна под собственные реквизиты или реквизит выводит своя форма расширения.
**Собственный реквизит табличной части** — когда форма не нужна (например, реквизит использует только код):
1. `/cfe-borrow -Object "Document.ЗаказКлиента.TabularSection.Товары"`
2. `/meta-edit` на `Documents/ЗаказКлиента.xml` расширения: `-Operation add-ts-attribute -Value "Товары.пд_Скидка: Number(15,2)"`
У плана видов характеристик, плана счетов и плана видов расчёта собственный реквизит в заимствованную табличную часть платформа не примет (отказ при обновлении конфигурации БД), у бизнес-процесса и задачи — только с платформы 8.3.25. Навык такую табличную часть заимствует, но выводит `[WARN]` — собственных реквизитов в неё не добавляй.
**Своя форма расширения** видит только заимствованные реквизиты объекта: путь `Объект.Склад` к незаимствованному реквизиту — «Неверный путь к данным». Заимствуй выводимые реквизиты по одному (`Document.ЗаказКлиента.Attribute.Склад ;; Document.ЗаказКлиента.TabularSection.Товары.Attribute.Цена`), саму форму создай через `/form-add` и `/form-compile`.
## Команда
```powershell
powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/cfe-borrow.ps1" -ExtensionPath src\cfe\extname -ConfigPath src\cf -Object "Catalog.Контрагенты"
```
## Примеры
```powershell
# Заимствовать один объект
... -ExtensionPath src\cfe\extname -ConfigPath src\cf -Object "Catalog.Контрагенты"
# Заимствовать справочник вместе с модулями объекта и менеджера
... -ExtensionPath src\cfe\extname -ConfigPath src\cf -Object "Catalog.Контрагенты" -Module ObjectModule,ManagerModule
# Общий модуль без файла модуля
... -ExtensionPath src\cfe\extname -ConfigPath src\cf -Object "CommonModule.РаботаСФайлами" -Module None
# Заимствовать форму (автоматически заимствует родительский объект)
... -ExtensionPath src\cfe\extname -ConfigPath src\cf -Object "Catalog.Контрагенты.Form.ФормаЭлемента"
# Несколько объектов за раз
... -ExtensionPath src\cfe\extname -ConfigPath src\cf -Object "Catalog.Контрагенты ;; CommonModule.ОбщийМодуль ;; Enum.ВидыОплат"
# Заимствовать форму с основным реквизитом (реквизиты по DataPath формы)
... -ExtensionPath src\cfe\extname -ConfigPath src\cf -Object "Catalog.Номенклатура.Form.ФормаЭлемента" -BorrowMainAttribute Form
# Заимствовать форму с ВСЕМИ реквизитами объекта
... -ExtensionPath src\cfe\extname -ConfigPath src\cf -Object "Catalog.Номенклатура.Form.ФормаЭлемента" -BorrowMainAttribute All
# Табличная часть без формы — под собственные реквизиты
... -ExtensionPath src\cfe\extname -ConfigPath src\cf -Object "Document.ЗаказКлиента.TabularSection.Товары"
# Реквизит документа и реквизит табличной части — для своей формы расширения
... -ExtensionPath src\cfe\extname -ConfigPath src\cf -Object "Document.ЗаказКлиента.Attribute.Склад ;; Document.ЗаказКлиента.TabularSection.Товары.Attribute.Цена"
```
## Верификация
```
/cfe-validate <ExtensionPath> -ConfigPath <ConfigPath>
```
Конфигурацию-источник передавай и валидатору: заимствованные формы он проверяет по ней.
© Nikolay Shirokov · MIT · Nikolay-Shirokov/cc-1c-skills