$npx -y skills add Nikolay-Shirokov/cc-1c-skills --skill form-editДобавление элементов, реквизитов и команд в существующую управляемую форму 1С. Используй когда нужно точечно модифицировать готовую форму
| 1 | # /form-edit — Редактирование формы |
| 2 | |
| 3 | Добавляет элементы, реквизиты и/или команды в существующий Form.xml. Автоматически выделяет ID из правильного пула, генерирует companion-элементы (ContextMenu, ExtendedTooltip, и др.) и обработчики событий. |
| 4 | |
| 5 | ## Использование |
| 6 | |
| 7 | ``` |
| 8 | /form-edit <FormPath> <JsonPath> |
| 9 | ``` |
| 10 | |
| 11 | ## Параметры |
| 12 | |
| 13 | | Параметр | Обязательный | Описание | |
| 14 | |-----------|:------------:|----------------------------------| |
| 15 | | FormPath | да | Путь к существующему Form.xml | |
| 16 | | JsonPath | да | Путь к JSON с описанием добавлений | |
| 17 | |
| 18 | ## Команда |
| 19 | |
| 20 | ```powershell |
| 21 | powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/form-edit.ps1" -FormPath "<путь>" -JsonPath "<путь>" |
| 22 | ``` |
| 23 | |
| 24 | ## JSON формат |
| 25 | |
| 26 | ```json |
| 27 | { |
| 28 | "into": "ГруппаШапка", |
| 29 | "after": "Контрагент", |
| 30 | "elements": [ |
| 31 | { "input": "Склад", "path": "Объект.Склад", "on": ["OnChange"] } |
| 32 | ], |
| 33 | "attributes": [ |
| 34 | { "name": "СуммаИтого", "type": "decimal(15,2)" } |
| 35 | ], |
| 36 | "commands": [ |
| 37 | { "name": "Рассчитать", "action": "РассчитатьОбработка" } |
| 38 | ] |
| 39 | } |
| 40 | ``` |
| 41 | |
| 42 | ### Расширения (extension-формы) |
| 43 | |
| 44 | Для заимствованных форм (с `<BaseForm>`) автоматически активируется extension-режим: ID начинаются с 1000000+. Доступны дополнительные секции: |
| 45 | |
| 46 | ```json |
| 47 | { |
| 48 | "formEvents": [ |
| 49 | { "name": "OnCreateAtServer", "handler": "Расш1_ПриСозданииПосле", "callType": "After" }, |
| 50 | { "name": "OnOpen", "handler": "Расш1_ПриОткрытии", "callType": "Before" } |
| 51 | ], |
| 52 | "elementEvents": [ |
| 53 | { "element": "Банк", "name": "OnChange", "handler": "Расш1_БанкПриИзменении", "callType": "Before" } |
| 54 | ], |
| 55 | "commands": [ |
| 56 | { "name": "Подбор", "action": "Расш1_ПодборПосле", "callType": "After" }, |
| 57 | { "name": "Запрос", "actions": [ |
| 58 | { "callType": "Before", "handler": "Расш1_ЗапросПеред" }, |
| 59 | { "callType": "After", "handler": "Расш1_ЗапросПосле" } |
| 60 | ]} |
| 61 | ], |
| 62 | "elements": [ |
| 63 | { "input": "Поле", "path": "Объект.Поле", "on": [{ "event": "OnChange", "callType": "After" }] } |
| 64 | ] |
| 65 | } |
| 66 | ``` |
| 67 | |
| 68 | ### Позиционирование элементов |
| 69 | |
| 70 | | Ключ | По умолчанию | Описание | |
| 71 | |------|-------------|----------| |
| 72 | | `into` | корневой ChildItems | Имя группы/таблицы/страницы, куда вставлять | |
| 73 | | `after` | в конец | Имя элемента, после которого вставлять | |
| 74 | |
| 75 | ### Типы элементов |
| 76 | |
| 77 | Те же DSL-ключи, что в `/form-compile`: |
| 78 | |
| 79 | | Ключ | XML тег | Companions | |
| 80 | |------|---------|------------| |
| 81 | | `input` | InputField | ContextMenu, ExtendedTooltip | |
| 82 | | `check` | CheckBoxField | ContextMenu, ExtendedTooltip | |
| 83 | | `label` | LabelDecoration | ContextMenu, ExtendedTooltip | |
| 84 | | `labelField` | LabelField | ContextMenu, ExtendedTooltip | |
| 85 | | `group` | UsualGroup | ExtendedTooltip | |
| 86 | | `table` | Table | ContextMenu, AutoCommandBar, Search*, ViewStatus* | |
| 87 | | `pages` | Pages | ExtendedTooltip | |
| 88 | | `page` | Page | ExtendedTooltip | |
| 89 | | `button` | Button | ExtendedTooltip | |
| 90 | |
| 91 | Группы и таблицы поддерживают `children`/`columns` для вложенных элементов. |
| 92 | |
| 93 | ### Кнопки: command и stdCommand |
| 94 | |
| 95 | - `"command": "ИмяКоманды"` → `Form.Command.ИмяКоманды` |
| 96 | - `"stdCommand": "Close"` → `Form.StandardCommand.Close` |
| 97 | - `"stdCommand": "Товары.Add"` → `Form.Item.Товары.StandardCommand.Add` (стандартная команда элемента) |
| 98 | |
| 99 | ### Допустимые события (`on`) |
| 100 | |
| 101 | Компилятор предупреждает об ошибках в именах событий. Основные: |
| 102 | |
| 103 | - **input**: `OnChange`, `StartChoice`, `ChoiceProcessing`, `Clearing`, `AutoComplete`, `TextEditEnd` |
| 104 | - **check**: `OnChange` |
| 105 | - **table**: `OnStartEdit`, `OnEditEnd`, `OnChange`, `Selection`, `BeforeAddRow`, `BeforeDeleteRow`, `OnActivateRow` |
| 106 | - **label/picture**: `Click`, `URLProcessing` |
| 107 | - **pages**: `OnCurrentPageChange` |
| 108 | - **button**: `Click` |
| 109 | |
| 110 | ### Система типов (для attributes) |
| 111 | |
| 112 | `string`, `string(100)`, `decimal(15,2)`, `boolean`, `date`, `dateTime`, `CatalogRef.XXX`, `DocumentObject.XXX`, `ValueTable`, `DynamicList`, `Type1 | Type2` (составной). |
| 113 | |
| 114 | ### Секции расширений |
| 115 | |
| 116 | | Секция | Назначение | |
| 117 | |--------|-----------| |
| 118 | | `formEvents` | События уровня формы с `callType` (Before/After/Override) | |
| 119 | | `elementEvents` | События на существующих элементах заимствованной формы | |
| 120 | | `callType` на `commands` | callType на Action команды | |
| 121 | | `callType` на `on` | callType на событиях новых элементов (объектный формат) | |
| 122 | |
| 123 | Все extension-секции опциональны — без них навык работает как с обычными формами. |
| 124 | |
| 125 | ## Workflow |
| 126 | |
| 127 | 1. `/form-info` — посмотреть текущую структуру формы |
| 128 | 2. Создать JSON с описанием добавлений |
| 129 | 3. `/form-edit` — добавить в форму |
| 130 | 4. `/form-validate` — проверить корректность |
| 131 | 5. `/form-info` — убедиться что добавилось правильно |