# Расширения конфигурации (CFE) Навыки группы `/cfe-*` позволяют создавать, заимствовать объекты, перехватывать методы, проверять и анализировать расширения конфигурации 1С. ## Навыки | Навык | Параметры | Описание | |-------|-----------|----------| | `/cfe-init` | ` [-Purpose Patch\|Customization\|AddOn] [-CompatibilityMode]` | Создание расширения (scaffold XML-исходников) | | `/cfe-borrow` | `-ExtensionPath -ConfigPath -Object "Type.Name" [-BorrowMainAttribute]` | Заимствование объектов из конфигурации | | `/cfe-patch-method` | `-ExtensionPath -ModulePath "Type.Name.Module" -MethodName "X" -InterceptorType Before` | Генерация перехватчика метода | | `/cfe-validate` | ` [-MaxErrors 30]` | Валидация структурной корректности (9 проверок) | | `/cfe-diff` | `-ExtensionPath -ConfigPath [-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 | Создаёт: ``` / ├── Configuration.xml # Свойства расширения ├── Languages/ │ └── Русский.xml # Язык (Adopted) └── Roles/ # Если не -NoRole └── ОсновнаяРоль.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`): ```bsl &НаСервере &Перед("ПриЗаписи") Процедура Расш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](1c-extension-spec.md) — XML-формат выгрузки расширений конфигурации (CFE)