Add /form-add skill for configuration objects

Create forms (metadata XML + Form.xml + Module.bsl) for Document,
Catalog, InformationRegister and other configuration object types.
Supports Object/List/Choice/Record purposes with automatic
ChildObjects registration and DefaultForm setup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-02-09 22:53:13 +03:00
co-authored by Claude Opus 4.6
parent 89f0788585
commit 6681758121
5 changed files with 707 additions and 2 deletions
+151
View File
@@ -5,6 +5,157 @@
---
## 0. Файловая структура и регистрация
### Файлы формы
Каждая форма объекта конфигурации состоит из 3 файлов:
```
<Объект>/Forms/
ИмяФормы.xml ← метаданные (UUID, имя, синоним, FormType)
ИмяФормы/
Ext/
Form.xml ← определение формы (описано в разделах 1–17)
Form/
Module.bsl ← модуль формы (1С-код)
```
Общие формы (CommonForm) — аналогично, но на верхнем уровне конфигурации:
```
CommonForms/
ИмяФормы.xml ← метаданные (тег <CommonForm>)
ИмяФормы/
Ext/
Form.xml
Form/
Module.bsl
```
### Метаданные формы — шаблон
#### Форма объекта (Document, Catalog, DataProcessor, Report, ...)
```xml
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses"
xmlns:app="http://v8.1c.ru/8.2/managed-application/core"
xmlns:v8="http://v8.1c.ru/8.1/data/core"
xmlns:xr="http://v8.1c.ru/8.3/xcf/readable"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.17">
<Form uuid="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX">
<Properties>
<Name>ИмяФормы</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Отображаемое имя</v8:content>
</v8:item>
</Synonym>
<Comment/>
<FormType>Managed</FormType>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
<v8:Value xsi:type="app:ApplicationUsePurpose">MobilePlatformApplication</v8:Value>
</UsePurposes>
</Properties>
</Form>
</MetaDataObject>
```
#### CommonForm
```xml
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses"
xmlns:app="http://v8.1c.ru/8.2/managed-application/core"
xmlns:v8="http://v8.1c.ru/8.1/data/core"
xmlns:xr="http://v8.1c.ru/8.3/xcf/readable"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.17">
<CommonForm uuid="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX">
<Properties>
<Name>ИмяФормы</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Отображаемое имя</v8:content>
</v8:item>
</Synonym>
<Comment/>
<FormType>Managed</FormType>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UseStandardCommands>false</UseStandardCommands>
<ExtendedPresentation/>
<Explanation/>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
<v8:Value xsi:type="app:ApplicationUsePurpose">MobilePlatformApplication</v8:Value>
</UsePurposes>
</Properties>
</CommonForm>
</MetaDataObject>
```
### Регистрация формы
#### В ChildObjects родительского объекта
```xml
<!-- В файле Documents/АвансовыйОтчет.xml (или Catalogs/Контрагенты.xml и т.д.) -->
<ChildObjects>
<Form>ФормаДокумента</Form>
<Form>ФормаСписка</Form>
...
</ChildObjects>
```
CommonForms регистрируются в `Configuration.xml`:
```xml
<ChildObjects>
<CommonForm>ИмяФормы</CommonForm>
...
</ChildObjects>
```
#### DefaultForm в Properties родительского объекта
Формат значения: `ТипОбъекта.ИмяОбъекта.Form.ИмяФормы`
```xml
<Properties>
<DefaultObjectForm>Document.АвансовыйОтчет.Form.ФормаДокумента</DefaultObjectForm>
<DefaultListForm>Document.АвансовыйОтчет.Form.ФормаСписка</DefaultListForm>
<DefaultChoiceForm>Document.АвансовыйОтчет.Form.ФормаВыбора</DefaultChoiceForm>
</Properties>
```
#### Свойства DefaultForm по типам объектов
| Тип объекта | Свойства DefaultForm |
|-------------|---------------------|
| Document | DefaultObjectForm, DefaultListForm, DefaultChoiceForm |
| Catalog | DefaultObjectForm, DefaultFolderForm, DefaultListForm, DefaultChoiceForm, DefaultFolderChoiceForm |
| ChartOfCharacteristicTypes | DefaultObjectForm, DefaultFolderForm, DefaultListForm, DefaultChoiceForm, DefaultFolderChoiceForm |
| ChartOfAccounts | DefaultObjectForm, DefaultListForm, DefaultChoiceForm |
| DataProcessor | DefaultForm |
| Report | DefaultForm |
| InformationRegister | DefaultRecordForm, DefaultListForm |
| ExchangePlan | DefaultObjectForm, DefaultListForm, DefaultChoiceForm |
| BusinessProcess | DefaultObjectForm, DefaultListForm, DefaultChoiceForm |
| Task | DefaultObjectForm, DefaultListForm, DefaultChoiceForm |
| CommonForm | — (регистрируется в Configuration.xml, нет DefaultForm) |
> Report.DefaultForm может указывать на общую форму: `CommonForm.ФормаОтчета`.
---
## 1. Корневой элемент
```xml
+28 -1
View File
@@ -6,6 +6,7 @@
| Навык | Параметры | Описание |
|-------|-----------|----------|
| `/form-add` | `<ObjectPath> <FormName> [Purpose]` | Добавление формы к объекту конфигурации (Document, Catalog и др.) |
| `/form-info` | `<FormPath>` | Компактная сводка: дерево элементов, реквизиты, команды, события |
| `/form-compile` | `<JsonPath> <OutputPath>` | Генерация Form.xml из компактного JSON-определения |
| `/form-validate` | `<FormPath>` | Валидация: уникальность ID, companions, DataPath, команды |
@@ -14,6 +15,23 @@
## Сценарии использования
### Добавление новой формы к объекту конфигурации
`/form-add` создаёт каркас управляемой формы (metadata XML + Form.xml + Module.bsl) и регистрирует её в объекте конфигурации. Поддерживает Document, Catalog, DataProcessor, Report, InformationRegister и другие типы.
```
> Добавь форму документа к Documents/АвансовыйОтчет.xml
```
Claude вызовет `/form-add` с нужными параметрами. Назначение формы (Purpose) определяет структуру: Object — форма объекта с реквизитом «Объект», List/Choice — форма списка с DynamicList, Record — форма записи регистра.
Типичный workflow:
1. `/form-add` — создать каркас (metadata + Form.xml + Module.bsl)
2. `/form-compile` или `/form-edit` — наполнить Form.xml элементами
3. `/form-validate` — проверить корректность
4. `/form-info` — проанализировать результат
### Анализ формы перед модификацией
Файлы Form.xml содержат от сотен до десятков тысяч строк XML. 80% объёма — визуальный шум (цвета, шрифты, размеры, автогенерированные подсказки). `/form-info` извлекает суть.
@@ -199,7 +217,16 @@ Claude создаст JSON-определение и вызовет `/form-compi
## Связь с EPF-навыками
Навыки `/form-*` работают с формами из любых источников — конфигурации и внешних обработок. При работе с обработками:
Навыки `/form-*` работают с формами из любых источников — конфигурации и внешних обработок.
При работе с объектами конфигурации:
1. `/form-add` — создать форму (каркас + регистрация в объекте)
2. `/form-compile` или `/form-edit` — наполнить Form.xml элементами
3. `/form-validate` — проверить корректность
4. `/form-info` — проанализировать результат
При работе с внешними обработками:
1. `/epf-add-form` — создать форму (каркас)
2. `/form-compile` — сгенерировать Form.xml из JSON-определения