mcpField
F
form-edit

form-edit

github.com/nikolay-shirokov開発74162 回インストール今日更新
リポジトリ

form-edit について

`form-edit` は、JSON に記述した変更を既存の 1C `Form.xml` に適用するスキルです。要素の ID を維持しながら、画面要素やフォーム情報を編集でき、既存の参照やイベント処理を保ちたい開発者向けです。

主な機能

  1. 01JSON による要素の追加・削除・移動・変更
  2. 02フォーム属性・コマンド・パラメーターの管理
  3. 03イベントハンドラーと条件付き表示の設定
  4. 04拡張フォームとコマンドインターフェースへの対応
  5. 05後続の検証に使える変更内容の出力

活用シーン

  1. 01既存フォームへのフィールドやコマンドの追加
  2. 02ID を維持したフォーム要素の並べ替え
  3. 03フォームプロパティとイベント割り当ての変更

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/nikolay-shirokov/cc-1c-skills --skill form-edit

インストール後、Claude Code で/form-editを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
appearance.md
attributes-advanced.md
buttons-commands.md
charts.md
choice-params.md
command-interface.md
dynamic-list.md
form-properties.md
groups-pages.md
input-fields.md
layout-advanced.md
pictures.md
report-form.md
roles-access.md
special-fields.md
spreadsheet.md
table-advanced.md
tooltips-text.md
type-system-advanced.md
scripts/
form-edit.ps1
form-edit.py

README(原文)English

プロジェクトの README より

この README の日本語訳はまだありません。以下は英語の原文です。日本語の紹介はページ上部をご覧ください。

/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Надпись, текст — в titletooltips-text.md
groupГруппа: vertical / horizontalIfPossible / alwaysHorizontalgroups-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 — проверить форму.

コメント