mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-10 16:14:54 +03:00
f7695a9534
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>
203 lines
11 KiB
Markdown
203 lines
11 KiB
Markdown
# Расширения конфигурации (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`):
|
|
```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)
|