form-edit

Добавление элементов, реквизитов и команд в существующую управляемую форму 1С. Используй когда нужно точечно модифицировать готовую форму

SKILL.md

GitHub

/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

  1. /form-info — структура формы: имена элементов, реквизиты, команды.
  2. Описать правки в JSON.
  3. /form-edit — применить; в выводе — что добавлено, перенесено, изменено и удалено.
  4. /form-validate — проверить форму.