mcpField
C
cfe-borrow

cfe-borrow

github.com/nikolay-shirokovDevelopment74157 installsUpdated today
Repository

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

  1. 01Adopts configuration and child objects
  2. 02Adopts forms and data attributes
  3. 03Creates selected object modules
  4. 04Accepts batches of objects
  5. 05Can resolve the source path automatically
  6. 06Preserves existing extension content

Use cases

  1. 01Adding base-configuration objects to an extension
  2. 02Adopting a form with its data bindings
  3. 03Adding extension attributes to a table section
  4. 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-borrow

After 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 — попробуй определить автоматически:

  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.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>

Конфигурацию-источник передавай и валидатору: заимствованные формы он проверяет по ней.

Comments

Markdown supported