Add form-add skill for modifying existing Form.xml

Adds elements, attributes, and commands to existing managed forms
via JSON input. Supports positional insertion (into/after), auto ID
allocation from correct pools, companion generation, and event handlers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-02-09 13:34:56 +03:00
parent a813c7fd46
commit 99f57a5ff2
4 changed files with 1098 additions and 9 deletions
+28 -8
View File
@@ -9,6 +9,7 @@
| `/form-info` | `<FormPath>` | Компактная сводка: дерево элементов, реквизиты, команды, события |
| `/form-compile` | `<JsonPath> <OutputPath>` | Генерация Form.xml из компактного JSON-определения |
| `/form-validate` | `<FormPath>` | Валидация: уникальность ID, companions, DataPath, команды |
| `/form-add` | `<FormPath> <JsonPath>` | Добавление элементов, реквизитов, команд в существующую форму |
## Сценарии использования
@@ -51,15 +52,32 @@ Commands:
Печать -> ПечатьДокумента [Ctrl+P]
```
### Добавление элемента на форму
### Добавление элементов в существующую форму
Чтобы добавить поле на форму, нужно знать структуру групп и ориентацию (горизонтальная/вертикальная). `/form-info` показывает это в дереве элементов.
`/form-add` добавляет элементы, реквизиты и команды в существующий Form.xml. Автоматически назначает ID, генерирует companion-элементы и обработчики событий.
```
> Добавь поле "Склад" в шапку формы документа
> Добавь поле "Склад" в шапку формы после "Контрагент"
```
Claude вызовет `/form-info`, увидит `[Group:AH] ГруппаШапка``[Group:V] ГруппаШапкаЛевая`, поймёт куда вставить элемент в XML.
Claude вызовет `/form-info` для анализа структуры, создаст JSON и вызовет `/form-add`:
```json
{
"into": "ГруппаШапка",
"after": "Контрагент",
"elements": [
{ "input": "Склад", "path": "Объект.Склад", "on": ["OnChange"] }
],
"attributes": [
{ "name": "Склад", "type": "CatalogRef.Склады" }
]
}
```
Позиционирование: `into` указывает группу-контейнер, `after` — элемент, после которого вставлять. Оба опциональны (по умолчанию — в конец корневого ChildItems).
Один вызов может содержать элементы, реквизиты и команды одновременно. Группы поддерживают `children` для вложенных элементов.
### Поиск обработчиков и привязок
@@ -173,6 +191,7 @@ Claude создаст JSON-определение и вызовет `/form-compi
> /form-info upload/acc_8.3.24/Documents/РеализацияТоваровУслуг/Forms/ФормаДокумента/Ext/Form.xml
> /form-info src/МояОбработка/Forms/Форма/Ext/Form.xml
> /form-compile src/form.json src/МояОбработка/Forms/Форма/Ext/Form.xml
> /form-add src/МояОбработка/Forms/Форма/Ext/Form.xml src/additions.json
> /form-validate src/МояОбработка/Forms/Форма/Ext/Form.xml
```
@@ -182,11 +201,12 @@ Claude создаст JSON-определение и вызовет `/form-compi
1. `/epf-add-form` — создать форму (каркас)
2. `/form-compile` — сгенерировать Form.xml из JSON-определения
3. `/form-validate` — проверить корректность
4. `/form-info` — проанализировать результат
5. `/epf-build` — собрать EPF
3. `/form-add` — добавить элементы/реквизиты/команды в существующую форму
4. `/form-validate` — проверить корректность
5. `/form-info` — проанализировать результат
6. `/epf-build` — собрать EPF
## Спецификации
- [Управляемая форма](1c-form-spec.md) — Form.xml, элементы, команды, реквизиты, система типов
- [Form DSL](form-dsl-spec.md) — JSON-формат описания формы для `/form-compile`
- [Form DSL](form-dsl-spec.md) — JSON-формат описания формы для `/form-compile` и `/form-add`