framework_eng/skills/tool-usage/platform-data/xml-generation/form-dsl/SKILL.md
Use for generating 1C managed forms with UI elements, attributes, and commands through a JSON DSL. Helps describe the form structure and static properties for xml-gen form 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>
# Generate a form from the object's metadata
xml-gen form compile --from-object [--preset erp-standard] [--object <path>] <output.xml>
xml-gen form info <Form.xml>
Editing existing forms (add-attribute, add-element, move-element, etc.) - see xml-generation §3 Edit commands
The DSL covers the structure of the form and the static properties of elements (including static Visible: false). It intentionally does NOT generate:
УсловноеОформление.Элементы.Добавить() (Оформление/Отбор/ОформляемыеПоля). This is the recommended path for standard objects.Список.КомпоновкаДанных.Отбор) or in custom list settings.The absence of these keys is a design choice, not a tool defect; see rule no-manual-xml-edit.md § "What is done in code, and NOT through xml-gen". (Conditional formatting of a report is different: it lives in the Data Composition Schema, so use the skd DSL.)
--from-object modeGenerates Form.xml from the object's XML description. Coverage: Catalog (item/folder/list/choice), Document (item/list/choice), InformationRegister (record/list), AccumulationRegister (list), ChartOfCharacteristicTypes, ExchangePlan, ChartOfAccounts, DataProcessor/Report (skeleton).
Purpose is determined by the folder name: ФормаСписка->list, ФормаВыбора->choice, ФормаГруппы->folder, ФормаЗаписи->record, otherwise item.
The erp-standard preset is built in; it can be overridden by the file <project-root>/presets/skills/form/erp-standard.json.
Guardrails: ValueStorage attributes are skipped; FormDataStructure/Collection/Tree in an attribute -> FromObjectException.
Minimal form: {"attributes": [], "elements": []}
{"name": "ИмяРеквизита", "type": "тип", "title": "Заголовок"}
Types: string, string(N), number, number(D,F), boolean, date, uuid, CatalogRef.Name, DocumentRef.Name, ValueTable
Forbidden runtime types: FormDataStructure, FormDataCollection, FormDataTree - they do not exist in the XML schema and cause XDTO errors when loading (compiler: IllegalArgumentException; validator: FORM-114 ERROR). Use CatalogObject.X / DocumentObject.X / DataProcessorObject.X, ValueTable, ValueTree.
| DSL type | XML type | Description |
|----------|---------|----------|
| input | InputField | Input field |
| group | UsualGroup | Group ("group": "Vertical"/"Horizontal", children) |
| table | Table | Table (dataPath, columns) |
| button | Button | Button (commandName) |
| label | LabelDecoration | Label decoration |
| checkbox | CheckBoxField | Checkbox field |
| pages | Pages | Pages container |
| page | Page | Page (only inside pages) |
{"name": "Сохранить", "action": "Save", "title": "Сохранить"}
{"events": {"onCreateAtServer": "ПриСозданииНаСервере", "onOpen": "ПриОткрытии"}}
The DSL defines only the procedure name; set the compiler directive in the module manually: onCreateAtServer -> &НаСервере, onOpen/onClose/beforeClose -> &НаКлиенте. Mixing up contexts = compilation error or server objects being unavailable.
UUID, ID, ContextMenu, ExtendedTooltip are created automatically.
// ❌ dataPath does not match the attribute -> the element will not display data
{"attributes": [{"name": "Наименование", "type": "string(100)"}],
"elements": [{"type": "input", "name": "Поле1", "dataPath": "Поле1"}]}
// ✅ dataPath = attribute name (or the path to the tabular section field: Товары.Номенклатура)
{"elements": [{"type": "input", "name": "Наименование", "dataPath": "Наименование"}]}
// ❌ page without a pages parent - the platform will not load the form
{"elements": [{"type": "page", "name": "Страница1", "children": [...]}]}
// ✅ pages as a container
{"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.