framework/skills/tool-usage/platform-data/xml-generation/form-dsl/SKILL.md
xml-gen managed form DSL: compile/edit
npx skillsauth add steelmorgan/1c-agent-based-dev-framework form-dslInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
xml-gen form compile [--format designer|edt] <input.json> <output.xml>
# Генерация формы по метаданным объекта
xml-gen form compile --from-object [--preset erp-standard] [--object <path>] <output.xml>
xml-gen form info <Form.xml>
xml-gen form decompile <Form.xml> [output.json]
Редактирование существующих форм (add-attribute, add-element, move-element и др.) — см. xml-generation §3 Edit-команды
form decompile выдаёт черновой JSON для scaffold по образцу. Это не lossless round-trip: точечные правки готовой формы делай через form edit, а не через цикл decompile → compile.
DSL покрывает структуру формы и статические свойства элементов (включая статическую Visible: false). Намеренно НЕ генерирует:
УсловноеОформление.Элементы.Добавить() (Оформление/Отбор/ОформляемыеПоля). Это рекомендуемый путь для типовых объектов.Список.КомпоновкаДанных.Отбор) или в собственных настройках списка.Отсутствие этих ключей — дизайн, а не дефект инструмента, см. правило no-manual-xml-edit.md § «Что делается кодом, а НЕ через xml-gen». (Условное оформление отчёта — другое: оно живёт в схеме СКД → используй skd DSL.)
--from-objectГенерирует Form.xml по XML-описанию объекта. Покрытие: Catalog (item/folder/list/choice), Document (item/list/choice), InformationRegister (record/list), AccumulationRegister (list), ChartOfCharacteristicTypes, ExchangePlan, ChartOfAccounts, DataProcessor/Report (заготовка).
Purpose определяется по имени папки: ФормаСписка→list, ФормаВыбора→choice, ФормаГруппы→folder, ФормаЗаписи→record, иначе item.
Пресет erp-standard встроен; переопределяется файлом <project-root>/presets/skills/form/erp-standard.json.
Guardrails: ValueStorage-атрибуты скипаются; FormDataStructure/Collection/Tree в атрибуте → FromObjectException.
Минимальная форма: {"attributes": [], "elements": []}
{"name": "ИмяРеквизита", "type": "тип", "title": "Заголовок"}
Типы: string, string(N), number, number(D,F), boolean, date, uuid, CatalogRef.Name, DocumentRef.Name, ValueTable
Запрещённые runtime-типы: FormDataStructure, FormDataCollection, FormDataTree — не существуют в XML-схеме, вызывают XDTO-ошибку при загрузке (компилятор: IllegalArgumentException; валидатор: FORM-114 ERROR). Используй CatalogObject.X / DocumentObject.X / DataProcessorObject.X, ValueTable, ValueTree.
| DSL type | XML тип | Описание |
|----------|---------|----------|
| input | InputField | Поле ввода |
| group | UsualGroup | Группа ("group": "Vertical"/"Horizontal", children) |
| columnGroup | ColumnGroup | Группа колонок |
| buttonGroup | ButtonGroup | Группа кнопок, children |
| table | Table | Таблица (dataPath, columns) |
| button | Button | Кнопка (commandName) |
| label | LabelDecoration | Декорация-надпись |
| checkbox | CheckBoxField | Поле флажка |
| radio | RadioButtonField | Радиокнопки, choices |
| pages | Pages | Контейнер страниц |
| page | Page | Страница (только внутри pages) |
| picture, picField, calendar | PictureDecoration/PictureField/CalendarField | Базовые поля/декорации |
| spreadsheet, html, textDoc, formattedDoc | document fields | Поля документов |
| progressBar, trackBar, periodField, graphicalSchema | special fields | Простые спецполя без Chart/Gantt/Planner settings |
input дополнительно поддерживает статические choiceList, choiceParameters, choiceParameterLinks, typeLink. Большие настройки диаграмм/планировщика/условного оформления намеренно не переносим в DSL: их проще и безопаснее создавать кодом формы.
{"name": "Сохранить", "action": "Save", "title": "Сохранить"}
{"events": {"onCreateAtServer": "ПриСозданииНаСервере", "onOpen": "ПриОткрытии"}}
DSL задаёт только имя процедуры; директиву компилятора ставить в модуле вручную: onCreateAtServer → &НаСервере, onOpen/onClose/beforeClose → &НаКлиенте. Перепутать контексты = ошибка компиляции или недоступность серверных объектов.
UUID, ID, ContextMenu, ExtendedTooltip создаются автоматически.
// ❌ dataPath не совпадает с реквизитом → элемент не отобразит данные
{"attributes": [{"name": "Наименование", "type": "string(100)"}],
"elements": [{"type": "input", "name": "Поле1", "dataPath": "Поле1"}]}
// ✅ dataPath = name реквизита (или путь к полю ТЧ: Товары.Номенклатура)
{"elements": [{"type": "input", "name": "Наименование", "dataPath": "Наименование"}]}
// ❌ page без родителя pages — платформа не загрузит форму
{"elements": [{"type": "page", "name": "Страница1", "children": [...]}]}
// ✅ pages как контейнер
{"elements": [{"type": "pages", "name": "Страницы", "children": [{"type": "page", ...}]}]}
development
1C server maintenance webhooks: container restart and external component cache cleanup
development
Interactive DAP debugging of a single BSL procedure
tools
Rules for using RLM tools for project search and navigation in 1C/BSL
development
Creates web applications and routes on Winow (a web server on OneScript and Autumn). Use when working with a web server on OneScript, routing, or Winow controllers.