framework/skills/tool-usage/platform-data/xml-generation/form-dsl/SKILL.md
Use for генерации управляемых форм 1С с UI-элементами, реквизитами и командами через JSON DSL. Helps описать структуру и статические свойства формы для 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>
# Генерация формы по метаданным объекта
xml-gen form compile --from-object [--preset erp-standard] [--object <path>] <output.xml>
xml-gen form info <Form.xml>
Редактирование существующих форм (add-attribute, add-element, move-element и др.) — см. xml-generation §3 Edit-команды
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) |
| table | Table | Таблица (dataPath, columns) |
| button | Button | Кнопка (commandName) |
| label | LabelDecoration | Декорация-надпись |
| checkbox | CheckBoxField | Поле флажка |
| pages | Pages | Контейнер страниц |
| page | Page | Страница (только внутри pages) |
{"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", ...}]}]}
testing
MUST use BEFORE making a judgment about the cause of a conflict, a test failure, or an artifact dispute. Defines the end-to-end verification method L1→L6 and the classification of the first broken link.
development
MUST use AFTER a work cycle with ≥2 iterations (wrote → error → fixed → success). Provides the retrospective procedure and the format for recording practice/anti-patterns in references/learned-patterns.md or {project}/.context/learned-patterns.md.
tools
MUST use WHEN you are writing reusable knowledge into RLM (pattern / architectural decision / stable domain fact) OR reading it before a non-trivial task/solution in the domain. Provides the breakdown of native-push vs RLM-pull, tools for writing and reading RLM, H-MEM levels, and hygiene.
testing
MUST use WHEN the task is classified as simple (< 20 lines, 1 file, no new metadata objects, no architectural decisions). Provides a short cycle of 3 steps with a guard on the self path and mandatory verify.