/form-edit — Правка формы
Точечно меняет существующий Form.xml по описанию правок в JSON; остальное в файле не трогает. Перенесённый или изменённый элемент сохраняет свой id — обработчики и обращения из модуля продолжают работать.
Команда
| Параметр | Обязательный | Описание |
|---|
| FormPath | да | Путь к существующему Form.xml |
| JsonPath | да | Путь к JSON с описанием правок |
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 позиция обязательна.
{
"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 не меняет: такой элемент удаляют и добавляют заново.
Удаление вместе с реквизитом
Поле и реквизит, к которому оно привязано, удаляются в одной правке:
{
"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 | Вложенные элементы группы или страницы / колонки таблицы |
Поле на новом реквизите формы — реквизит и элемент в одной правке:
{
"attributes": [ { "name": "СуммаИтого", "type": "decimal(15,2)" } ],
"elements": [ { "input": "СуммаИтого", "path": "СуммаИтого", "readOnly": true, "after": "Контрагент" } ]
}
Колонка в существующую таблицу — элемент рядом с другой колонкой или into таблицы:
{ "input": "ТоварыСкидка", "path": "Объект.Товары.Скидка", "after": "ТоварыЦена" }
Кнопка — в командную панель формы (ФормаКоманднаяПанель) или таблицы (ТоварыКоманднаяПанель); command — команда формы, stdCommand — стандартная ("Close", у таблицы — "Товары.Add"):
{
"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
Реквизиты, команды, параметры
"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.
Форма расширения
Форма расширения (с <BaseForm>) распознаётся сама. Свои элементы, реквизиты и команды расширения называют с префиксом расширения (Расш1_Метка) и задают им title — иначе заголовок возьмётся из имени вместе с префиксом. Обработчику указывают вид вызова — callType: Before, After или Override; без него — Before:
{
"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
/form-info — структура формы: имена элементов, реквизиты, команды.
- Описать правки в JSON.
/form-edit — применить; в выводе — что добавлено, перенесено, изменено и удалено.
/form-validate — проверить форму.