--- name: form-edit description: Правка существующей управляемой формы 1С — элементы, реквизиты, команды и свойства самой формы. Используй, когда нужно точечно изменить готовую форму argument-hint: allowed-tools: - Bash - Read - Write - Glob --- # /form-edit — Правка формы Точечно меняет существующий `Form.xml` по описанию правок в JSON; остальное в файле не трогает. Перенесённый или изменённый элемент сохраняет свой id — обработчики и обращения из модуля продолжают работать. ## Команда | Параметр | Обязательный | Описание | |-----------|:------------:|--------------------------------| | FormPath | да | Путь к существующему Form.xml | | JsonPath | да | Путь к JSON с описанием правок | ```powershell powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/form-edit.ps1" -FormPath "<путь>" -JsonPath "<путь>" ``` ## Что можно править | Ключ | Правка | |------|--------| | `elements` | Элементы: добавить, перенести, изменить, удалить — список операций, по порядку | | `attributes` | Реквизиты: добавить; `{ "remove": "Имя" }` — удалить | | `commands` | Команды: добавить; `{ "remove": "Имя" }` — удалить | | `parameters` | Параметры формы: добавить; `{ "remove": "Имя" }` — удалить | | `title` | Заголовок формы (строка или `{ru, en}`); `null` — убрать | | `properties` | Свойства формы: `{ "windowOpeningMode": "LockOwnerWindow" }`; `null` у свойства — убрать (`references/form-properties.md`) | | `events` | Обработчики событий формы: `{ "OnOpen": "ПриОткрытии" }` | | `excludedCommands` | Исключить стандартные команды: `["Copy"]`; вернуть: `{ "remove": ["Copy"] }` | | `conditionalAppearance` | Добавить правила условного оформления (`references/appearance.md`) | | `commandInterface` | Добавить команды в панели формы (`references/command-interface.md`) | Все ключи необязательны, в одной правке можно сочетать любые. Имена элементов, реквизитов и команд — из `/form-info`. Процедуры обработчиков в модуле формы не создаются — их добавляют в `Module.bsl` отдельно. ## Элементы Операцию задаёт ключ: | Ключ | Операция | |------|----------| | тип элемента: `input`, `group`, `table`, … | Добавить новый элемент | | `move` | Перенести: имя или список имён (встают подряд в этом порядке) вместе с содержимым | | `set` | Изменить свойства: имя или список имён | | `remove` | Удалить: имя или список имён; группа, страница, таблица — вместе с содержимым | Куда встаёт добавляемый или переносимый элемент: | Ключи | Куда | |-------|------| | `after: "X"` / `before: "X"` | Рядом с X, в его группе | | `into: "G"` | В конец G — группы, страницы, таблицы, командной панели | | `into: "G", first: true` | В начало G | Новый элемент без позиции встаёт в конец формы; следующий без позиции — за ним. У `move` позиция обязательна. ```json { "attributes": [ { "name": "Срочно", "type": "boolean" } ], "elements": [ { "group": "alwaysHorizontal", "name": "ГруппаОтгрузка", "after": "Контрагент" }, { "move": ["Склад", "Организация"], "into": "ГруппаОтгрузка" }, { "check": "Срочно", "path": "Срочно", "into": "ГруппаОтгрузка" }, { "move": "ТоварыСумма", "before": "ТоварыЦена" }, { "set": "Ответственный", "visible": false }, { "set": "Контрагент", "title": "Покупатель", "events": { "OnChange": null } }, { "remove": "Комментарий" } ] } ``` ### Изменение (`set`) - Ключи — свойства элемента, те же, что при добавлении: заголовок, видимость, доступность, размеры, цвета и шрифт, кнопки поля, параметры выбора и т. д. (таблица ниже и справочники). - `null` возвращает свойству значение по умолчанию. - Строка в `title` меняет русский текст, переводы на другие языки остаются. - У группы ориентацию меняет `group`: `{ "set": "ГруппаШапка", "group": "vertical" }`. - `events` добавляет обработчики — как у нового элемента. - Имя, тип элемента, путь к данным и команду кнопки `set` не меняет: такой элемент удаляют и добавляют заново. ### Удаление вместе с реквизитом Поле и реквизит, к которому оно привязано, удаляются в одной правке: ```json { "elements": [ { "remove": "Срочно" } ], "attributes": [ { "remove": "Срочно" } ] } ``` ## Новый элемент Ключ — тип элемента, значение — имя; у `group` значение — ориентация, а имя задаётся в `name`. | Ключ | Элемент | Подробно | |------|---------|----------| | `input` | Поле ввода | `input-fields.md` | | `check` / `radio` | Флажок / переключатель | `input-fields.md` | | `labelField` | Поле-надпись (значение без редактирования) | `input-fields.md` | | `label` | Надпись, текст — в `title` | `tooltips-text.md` | | `group` | Группа: `vertical` / `horizontalIfPossible` / `alwaysHorizontal` | `groups-pages.md` | | `pages` / `page` | Страницы / страница | `groups-pages.md` | | `table` / `columnGroup` | Таблица / группа колонок | `table-advanced.md` | | `button` / `popup` / `buttonGroup` / `cmdBar` | Кнопка / подменю / группа кнопок / командная панель | `buttons-commands.md` | | `picture` / `picField` | Картинка / поле-картинка | `pictures.md` | Табличный документ, HTML, календарь, диаграммы и другие особые поля — по индексу ниже. | Ключ | Описание | |------|----------| | `name` | Имя, если отличается от значения ключа типа. Имена в форме уникальны | | `path` | Путь к данным: `"Объект.Склад"`, `"ИмяРеквизита"`; колонка таблицы — `"Объект.Товары.Сумма"` | | `title` / `tooltip` | Заголовок / подсказка (строка или `{ru, en}`) | | `visible: false` / `enabled: false` / `readOnly: true` | Скрыть / сделать недоступным / только чтение | | `events` | Обработчики: `{ "OnChange": "ИмяПроцедуры" }`; `null` вместо имени — имя по шаблону `<Элемент><Событие>` | | `children` / `columns` | Вложенные элементы группы или страницы / колонки таблицы | Поле на новом реквизите формы — реквизит и элемент в одной правке: ```json { "attributes": [ { "name": "СуммаИтого", "type": "decimal(15,2)" } ], "elements": [ { "input": "СуммаИтого", "path": "СуммаИтого", "readOnly": true, "after": "Контрагент" } ] } ``` Колонка в существующую таблицу — элемент рядом с другой колонкой или `into` таблицы: ```json { "input": "ТоварыСкидка", "path": "Объект.Товары.Скидка", "after": "ТоварыЦена" } ``` Кнопка — в командную панель формы (`ФормаКоманднаяПанель`) или таблицы (`ТоварыКоманднаяПанель`); `command` — команда формы, `stdCommand` — стандартная (`"Close"`, у таблицы — `"Товары.Add"`): ```json { "commands": [ { "name": "Пересчитать", "action": "ПересчитатьОбработка" } ], "elements": [ { "button": "Пересчитать", "command": "Пересчитать", "into": "ФормаКоманднаяПанель" } ] } ``` Свойства командной панели формы — операция `autoCmdBar`: `{ "autoCmdBar": "ФормаКоманднаяПанель", "autofill": false }` (без стандартных команд), `horizontalAlign`. ### События Имена регистрозависимы. **Форма:** `OnCreateAtServer`, `OnOpen`, `BeforeClose`, `OnClose`, `NotificationProcessing`, `ChoiceProcessing`, `OnReadAtServer`, `BeforeWriteAtServer`, `OnWriteAtServer`, `AfterWriteAtServer`, `BeforeWrite`, `AfterWrite`, `FillCheckProcessingAtServer`, `BeforeLoadDataFromSettingsAtServer`, `OnLoadDataFromSettingsAtServer`, `ExternalEvent`, `Opening` **input:** `OnChange`, `StartChoice`, `ChoiceProcessing`, `AutoComplete`, `TextEditEnd`, `Clearing`, `Creating`, `EditTextChange` **check / radio:** `OnChange` **table:** `OnStartEdit`, `OnEditEnd`, `OnChange`, `Selection`, `ValueChoice`, `BeforeAddRow`, `BeforeDeleteRow`, `AfterDeleteRow`, `BeforeRowChange`, `BeforeEditEnd`, `OnActivateRow`, `OnActivateCell` **label / labelField:** `Click`, `URLProcessing`; у `labelField` также `OnChange`, `StartChoice`, `ChoiceProcessing`, `Clearing` **picture / button:** `Click` **pages:** `OnCurrentPageChange` ### Реквизиты, команды, параметры ```json "attributes": [ { "name": "Итого", "type": "decimal(15,2)", "title": "Итого" }, { "name": "Данные", "type": "ValueTable", "columns": [ { "name": "Сумма", "type": "decimal(15,2)" } ] } ], "commands": [ { "name": "Загрузить", "action": "ЗагрузитьОбработка", "shortcut": "Ctrl+Enter" } ], "parameters": [ { "name": "Основание", "type": "DocumentRef.Заказ", "key": true } ] ``` Типы: `string`, `string(100)`, `decimal(15,2)`, `boolean`, `date`, `dateTime`, `CatalogRef.X`, `DocumentRef.X`, `EnumRef.X`, `ValueTable`, `ValueList`, `DynamicList`, `Тип1 | Тип2` — все типы в `references/type-system-advanced.md`. Остальные ключи реквизитов — `attributes-advanced.md`, команд — `buttons-commands.md`. ## Форма расширения Форма расширения (с ``) распознаётся сама. Свои элементы, реквизиты и команды расширения называют с префиксом расширения (`Расш1_Метка`) и задают им `title` — иначе заголовок возьмётся из имени вместе с префиксом. Обработчику указывают вид вызова — `callType`: `Before`, `After` или `Override`; без него — `Before`: ```json { "events": { "OnCreateAtServer": { "handler": "Расш1_ПриСозданииПосле", "callType": "After" } }, "elements": [ { "set": "Банк", "events": { "OnChange": { "handler": "Расш1_БанкПриИзменении", "callType": "Before" } } } ], "commands": [ { "name": "Подбор", "action": "Расш1_ПодборПосле", "callType": "After" }, { "name": "Запрос", "actions": [ { "handler": "Расш1_ЗапросПеред", "callType": "Before" }, { "handler": "Расш1_ЗапросПосле", "callType": "After" } ] } ] } ``` ## Задача → справочник Под задачу подгрузите файл из `references/`: | Задача | Справочник | |--------|-----------| | Поле ввода, флажок, переключатель: кнопки, список выбора, быстрый выбор, своя форма выбора, маска, формат, пароль, выключатель/тумблер, поле составного типа | `input-fields.md` | | Ограничить выбор отбором, связать поле с другим полем, связь по типу | `choice-params.md` | | Группа и страницы: ориентация, рамка, свёрнутая группа, интервалы, заголовок из данных, значок закладки, мастер по шагам | `groups-pages.md` | | Таблица: колонки и группы колонок, итоги в подвале, дерево, выделение строк, закрепление колонок, поиск, перетаскивание | `table-advanced.md` | | Форма списка: источник данных, запрос, отбор, сортировка, группировка, иерархия | `dynamic-list.md` | | Кнопки, подменю, команды: картинка кнопки, переключатель в панели, команды таблицы в группе кнопок, своё контекстное меню у поля, команда для текущей строки | `buttons-commands.md` | | Подсветить цветом, шрифт, рамка, условное оформление (в форме списка — `dynamic-list.md`) | `appearance.md` | | Расширенная подсказка под полем, надпись с выделением или ссылкой | `tooltips-text.md` | | Картинка, значок в колонке, иконка по значению | `pictures.md` | | Табличный документ (печатная форма, отчёт на форме) | `spreadsheet.md` | | HTML, текстовый документ, индикатор, ползунок, календарь, период | `special-fields.md` | | Диаграмма, диаграмма Ганта, планировщик | `charts.md` | | Свойства формы: модальность, размер, прокрутка, Enter, время и проведение документа | `form-properties.md` | | Форма отчёта (СКД) | `report-form.md` | | Реквизиты: сохранение в настройках, проверка заполнения, функциональные опции | `attributes-advanced.md` | | Типы реквизитов, составные типы и наборы | `type-system-advanced.md` | | Видимость и доступ по ролям | `roles-access.md` | | Командный интерфейс формы (переходы, важные команды) | `command-interface.md` | | Размеры, выравнивание, фокус по умолчанию, узкие экраны | `layout-advanced.md` | ## Workflow 1. `/form-info` — структура формы: имена элементов, реквизиты, команды. 2. Описать правки в JSON. 3. `/form-edit` — применить; в выводе — что добавлено, перенесено, изменено и удалено. 4. `/form-validate` — проверить форму.