Files
Nick Shirokov f7695a9534 feat(cfe-borrow): add -BorrowMainAttribute for borrowing object attributes with form
When adding a new attribute to a borrowed form, -BorrowMainAttribute
borrows the form's main attribute ("Объект") and all referenced object
attributes, tabular sections, and their transitive type dependencies.

Two modes: Form (default — only attributes referenced by form DataPath)
and All (all object attributes). Deep paths like Объект.A.B are resolved
transitively. Already-borrowed objects are not overwritten.

Also fixed: CommonPicture auto-borrow from AutoCommandBar, form-attribute
DataPath stripping (keep only Объект.* paths).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 19:56:26 +03:00

11 KiB

Расширения конфигурации (CFE)

Навыки группы /cfe-* позволяют создавать, заимствовать объекты, перехватывать методы, проверять и анализировать расширения конфигурации 1С.

Навыки

Навык Параметры Описание
/cfe-init <Name> [-Purpose Patch|Customization|AddOn] [-CompatibilityMode] Создание расширения (scaffold XML-исходников)
/cfe-borrow -ExtensionPath <path> -ConfigPath <path> -Object "Type.Name" [-BorrowMainAttribute] Заимствование объектов из конфигурации
/cfe-patch-method -ExtensionPath <path> -ModulePath "Type.Name.Module" -MethodName "X" -InterceptorType Before Генерация перехватчика метода
/cfe-validate <ExtensionPath> [-MaxErrors 30] Валидация структурной корректности (9 проверок)
/cfe-diff -ExtensionPath <path> -ConfigPath <path> [-Mode A|B] Анализ расширения и проверка переноса

Рабочий цикл

cf-info (версия, совместимость)
    ↓
/cfe-init → scaffold расширения
    ↓
/cfe-borrow → заимствование объектов из конфигурации
    ↓
/cfe-patch-method → перехват методов
    ↓
/cfe-validate → проверка корректности
    ↓
/cfe-diff Mode A → обзор изменений

Типичные сценарии

Создание расширения для исправления бага

> Создай расширение для исправления бага в справочнике Контрагенты,
  конфигурация ERP в C:\cfsrc\erp

Claude выполнит:

  1. /cf-info C:\cfsrc\erp -Mode brief — получить версию и режим совместимости
  2. /cfe-init — создать расширение с нужным CompatibilityMode
  3. /cfe-borrow — заимствовать Catalog.Контрагенты
  4. /cfe-patch-method — создать перехватчик нужного метода
  5. /cfe-validate — проверить результат

Добавление реквизита в объект и вывод на форму

> Добавь реквизит "ОсновнойПоставщик" (тип СправочникСсылка.Партнеры)
  в справочник Номенклатура и выведи на форму элемента.
  Конфигурация ERP в C:\cfsrc\erp

Claude выполнит:

  1. /cfe-init — создать расширение
  2. /cfe-borrow -Object "Catalog.Номенклатура.Form.ФормаЭлемента" -BorrowMainAttribute — заимствовать форму с реквизитами объекта
  3. /meta-edit — добавить новый реквизит Расш1_ОсновнойПоставщик в Номенклатура
  4. /form-edit — вывести реквизит на форму
  5. /cfe-validate — проверить результат

Анализ существующего расширения

> Покажи что изменено в расширении src/

Claude вызовет /cfe-diff -Mode A и покажет: заимствованные объекты, перехватчики, собственные объекты.

Проверка переноса изменений

> Проверь, все ли изменения из расширения перенесены в конфигурацию

Claude вызовет /cfe-diff -Mode B — найдёт блоки #Вставка и проверит их наличие в конфигурации.

cfe-init — создание расширения

Параметры:

Параметр Описание По умолчанию
Name Имя расширения (обязат.)
Synonym Синоним = Name
NamePrefix Префикс собственных объектов = Name + "_"
OutputDir Каталог src
Purpose Назначение Customization
Version Версия
Vendor Поставщик
CompatibilityMode Режим совместимости Version8_3_24
NoRole Без основной роли false

Создаёт:

<OutputDir>/
├── Configuration.xml         # Свойства расширения
├── Languages/
│   └── Русский.xml           # Язык (Adopted)
└── Roles/                    # Если не -NoRole
    └── <Prefix>ОсновнаяРоль.xml

Назначение расширения (Purpose):

  • Patch — исправление ошибок (минимальные изменения, только перехватчики)
  • Customization — доработка (реквизиты, формы, модули)
  • AddOn — дополнение (полноценный функционал)

cfe-borrow — заимствование объектов

Заимствует объекты из основной конфигурации в расширение. Создаёт минимальные XML-файлы с ObjectBelonging=Adopted и ExtendedConfigurationObject.

Формат -Object:

  • Catalog.Контрагенты — справочник
  • CommonModule.РаботаСФайлами — общий модуль
  • Enum.ВидыОплат — перечисление
  • Document.Заказ ;; Catalog.Товары — несколько объектов через ;;

Поддерживаемые типы: Catalog, Document, Enum, CommonModule, Report, DataProcessor, ExchangePlan, InformationRegister, AccumulationRegister, AccountingRegister, CalculationRegister, ChartOfAccounts, ChartOfCharacteristicTypes, ChartOfCalculationTypes, BusinessProcess, Task, и другие (44 типа).

Заимствование формы с реквизитами объекта (-BorrowMainAttribute)

При добавлении нового реквизита на заимствованную форму нужна опция -BorrowMainAttribute:

  • Без неё форма заимствуется "пустой" — только визуальные элементы, без привязки к данным
  • С ней — форма сохраняет DataPath привязки к реквизитам объекта (Объект.XXX)

Два режима:

  • Form (по умолчанию) — заимствует только реквизиты, выведенные на форму
  • All — заимствует все реквизиты объекта (включая не выведенные на форму)

Каскадно заимствует зависимые объекты по типам реквизитов (справочники, перечисления, определяемые типы) как оболочки. Если зависимый объект уже заимствован с содержимым — не перезаписывает его.

cfe-patch-method — перехват методов

Генерирует .bsl файл с декоратором перехвата для заимствованного объекта.

Параметры:

Параметр Описание
ModulePath Catalog.X.ObjectModule, CommonModule.Y, Catalog.X.Form.Z
MethodName Имя перехватываемого метода
InterceptorType Before / After / ModificationAndControl
Context НаСервере / НаКлиенте / НаСервереБезКонтекста
IsFunction Добавить Возврат

Типы перехватчиков:

Тип Декоратор Когда использовать
Before &Перед Выполнить код до вызова оригинального метода
After &После Выполнить код после вызова оригинального метода
ModificationAndControl &ИзменениеИКонтроль Полная замена тела метода с маркерами #Вставка/#Удаление

Пример генерируемого кода (Before):

&НаСервере
&Перед("ПриЗаписи")
Процедура Расш1_ПриЗаписи()
	// TODO: код перед вызовом оригинального метода
КонецПроцедуры

cfe-validate — проверки

# Проверка Уровень
1 XML well-formedness, MetaDataObject/Configuration, version ERROR
2 InternalInfo: 7 ContainedObject, валидные ClassId ERROR
3 Extension properties: ObjectBelonging=Adopted, Name, Purpose, NamePrefix, KeepMapping ERROR
4 Enum-значения (4 свойства) ERROR
5 ChildObjects: валидные типы, нет дубликатов, порядок ERROR/WARN
6 DefaultLanguage ссылается на существующий Language ERROR
7 Файлы языков существуют WARN
8 Каталоги объектов существуют WARN
9 Заимствованные объекты: ObjectBelonging=Adopted, ExtendedConfigurationObject UUID ERROR/WARN

cfe-diff — режимы

Mode A — обзор расширения

Для каждого объекта показывает:

  • [BORROWED] — заимствованный: перехватчики, собственные реквизиты/формы
  • [OWN] — собственный: количество реквизитов, ТЧ, форм

Mode B — проверка переноса

Для каждого &ИзменениеИКонтроль проверяет, перенесены ли блоки #Вставка в конфигурацию:

  • [TRANSFERRED] — код найден в конфигурации
  • [NOT_TRANSFERRED] — код не найден
  • [NEEDS_REVIEW] — нет блоков #Вставка или модуль конфигурации не найден

Связь с другими навыками

  • /cf-info — получение версии и совместимости конфигурации перед cfe-init
  • /meta-compile — создание собственных объектов расширения (реквизиты, ТЧ)
  • /form-compile, /form-edit — создание и модификация форм расширения
  • /cfe-validate — всегда проверяйте расширение после изменений

Спецификации

  • 1c-extension-spec.md — XML-формат выгрузки расширений конфигурации (CFE)