About cfe-borrow
cfe-borrow is a command-line skill for 1C extension development that adopts objects and child objects from a base configuration. It handles forms and attributes while preserving existing extension content across repeat runs.
Key features
- 01Adopts configuration and child objects
- 02Adopts forms and data attributes
- 03Creates selected object modules
- 04Accepts batches of objects
- 05Can resolve the source path automatically
- 06Preserves existing extension content
Use cases
- 01Adding base-configuration objects to an extension
- 02Adopting a form with its data bindings
- 03Adding extension attributes to a table section
- 04Repeating adoption without overwriting existing work
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ nikolay-shirokov/ cc-1c-skills --skill cfe-borrowAfter installing, type/cfe-borrowin Claude Code to confirm it loaded.
Bundled filesscripts/cfe-borrow.ps1scripts/cfe-borrow.py
Details
From the project README/cfe-borrow — Заимствование объектов из конфигурации
Заимствует объекты из основной конфигурации в расширение. Создаёт XML-файлы с ObjectBelonging=Adopted и ExtendedConfigurationObject, добавляет запись в ChildObjects расширения.
Предусловие
Расширение должно быть создано (/cfe-init) и содержать валидный Configuration.xml.
Авто-определение ConfigPath
Если пользователь не указал -ConfigPath — попробуй определить автоматически:
- Прочитай
.v8-project.jsonиз корня проекта - Разреши целевую базу (по имени, ветке или
default— алгоритм из/db-list) - Если у базы есть поле
configSrc— используй как-ConfigPath - Если
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,AccountingFlagCatalog.X ;; CommonModule.Y ;; Enum.Z— несколько объектов
Заимствование форм
Формат Тип.Имя.Form.ИмяФормы заимствует форму конкретного объекта. Если родительский объект ещё не заимствован — он будет заимствован автоматически.
Создаётся:
- Метаданные формы —
Forms/ИмяФормы.xmlсObjectBelonging=Adopted,FormType=Managed - Form.xml —
Forms/ИмяФормы/Ext/Form.xmlс копией исходной формы +<BaseForm>(начальное состояние) - Module.bsl — пустой файл
Forms/ИмяФормы/Ext/Form/Module.bsl - Регистрация —
<Form>в ChildObjects родительского объекта
Заимствование основного реквизита формы (-BorrowMainAttribute)
Когда нужно: пользователь хочет добавить новый реквизит в существующий объект конфигурации и вывести его на заимствованную форму. Без -BorrowMainAttribute форма заимствуется "пустой" — только визуальные элементы, без привязки к данным объекта. С -BorrowMainAttribute форма сохраняет привязки к реквизитам объекта (DataPath), что позволяет затем добавить на неё новые элементы через /form-edit.
Два режима:
Form— заимствует только те реквизиты объекта, которые уже выведены на форму. Оптимальный выбор для большинства случаевAll— заимствует все реквизиты и табличные части объекта. Используй если планируешь выводить на форму реквизиты, которых на ней ещё нет
Объект, чьи реквизиты заимствуются, — тот, что в типе основного реквизита формы. Обычно это владелец формы; если другой (форма обработки с основным реквизитом DocumentObject.X), заимствуется он сам и его реквизиты.
Типовой сценарий (добавление реквизита + вывод на форму):
/cfe-borrowс-BorrowMainAttribute— заимствовать форму с реквизитами/meta-edit— добавить новый реквизит в объект расширения/form-edit— вывести реквизит на заимствованную форму
Защита существующих данных: уже заимствованный объект не перезаписывается — добавляется только недостающее. Повторный вызов безопасен: собственные реквизиты расширения, заимствованные дочерние объекты и код в модулях сохраняются.
Заимствование реквизитов и табличных частей без формы
Формат Тип.Имя.<Вид>.<Имя> (и Тип.Имя.TabularSection.<ТЧ>.Attribute.<Реквизит>) заимствует один дочерний объект — реквизит, табличную часть, реквизит табличной части, измерение и т.п.:
- родительский объект заимствуется автоматически, для реквизита табличной части — и сама табличная часть
- табличная часть приходит без реквизитов. Форма, заимствованная позже с
-BorrowMainAttribute, дозаимствует в неё недостающие реквизиты, собственные реквизиты сохраняются - объект из ссылочного типа реквизита (
CatalogRef.Номенклатура) заимствуется оболочкой — пустым, без реквизитов и форм - вид не из списка или дочерний объект, которого нет в источнике, — ошибка, расширение не меняется
Коду модулей расширения реквизиты источника доступны и без заимствования — заимствуй их, только когда табличная часть нужна под собственные реквизиты или реквизит выводит своя форма расширения.
Собственный реквизит табличной части — когда форма не нужна (например, реквизит использует только код):
/cfe-borrow -Object "Document.ЗаказКлиента.TabularSection.Товары"/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.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/cfe-borrow.ps1" -ExtensionPath src\cfe\extname -ConfigPath src\cf -Object "Catalog.Контрагенты"
Примеры
# Заимствовать один объект
... -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>
Конфигурацию-источник передавай и валидатору: заимствованные формы он проверяет по ней.