framework/skills/tool-usage/platform-data/xml-generation/mxl-dsl/SKILL.md
Use for генерации и доработки печатных форм 1С (MXL) через JSON DSL. Helps описать области, ячейки и статические стили для xml-gen mxl compile/decompile/info/validate.
npx skillsauth add steelmorgan/1c-agent-based-dev-framework mxl-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.
Компактный JSON-формат для описания табличных документов 1С (SpreadsheetDocument). Claude описывает что (области, ячейки, стили, параметры), CLI обеспечивает корректность XML (палитры, индексы, объединения, namespace).
Канон взят из спецификации Широкова (cc-1c-skills) и расширен флагом --format designer|edt для двух форматов вывода.
| Триггер | Действие |
|---------|----------|
| Создать печатную форму с нуля | mxl compile + JSON DSL → references/dsl-spec.md |
| Доработать существующий макет | mxl decompile → редактирование JSON → mxl compile |
| Понять структуру чужого макета (области, параметры, расшифровки) | mxl info → references/info-modes.md |
| Проверить корректность собранного Template.xml | xml-gen validate --type mxl → references/validate-classes.md |
| Реверс-инжиниринг печати по образцу (скрин/скан) | mxl decompile или собрать с нуля по сетке — задать page + "Nx" ширины |
DSL покрывает статическое оформление ячеек — font/align/valign/border/wrap/format через карту styles. Намеренно НЕ генерирует рантайм-условное оформление: раскраску/стилизацию ячейки в зависимости от выводимого значения. Это делается программно при заполнении таб. документа — Область.ТекстЦвет = …, Область.ЦветФона = … на заполненной области. Отсутствие — дизайн, а не дефект инструмента, см. правило no-manual-xml-edit.md § «Что делается кодом, а НЕ через xml-gen».
# Компиляция JSON → Template.xml
xml-gen mxl compile [--format designer|edt] <input.json> <output.xml>
# Декомпиляция Template.xml → JSON DSL
xml-gen mxl decompile <Template.xml> <output.json>
# Анализ структуры (области, параметры, расшифровки, текст)
xml-gen mxl info <Template.xml> [--with-text] [--limit N] [--offset N] [--format text|json]
# Валидация
xml-gen validate --type mxl <Template.xml> [--detailed] [--max-errors N]
output.xml для compile — путь к макету в EPF/ERF: .../Templates/<Name>/Ext/Template.xml.
--format (только compile):
designer — формат конфигуратора (Template.xml в Ext/)edt — формат EDT (XML внутри .mxl-папки EDT-проекта){
"columns": 4,
"areas": [
{
"name": "Заголовок",
"rows": [
{ "cells": [
{ "col": 1, "span": 4, "text": "Накладная" }
]}
]
}
]
}
| Было (старо) | Стало (канон) |
|--------------|---------------|
| {"text": "[Параметр]"} — параметр через скобки в тексте | {"param": "Параметр"} — отдельный тип ячейки |
| {"text": "Инв № [Номер]"} — параметр в шаблоне через скобки | {"template": "Инв № [Номер]"} — отдельный тип |
| span без col (последовательное заполнение) | col 1-based + span (явное позиционирование) |
| Ширины колонок не задавались | columns + columnWidths + page + "Nx" |
| Сплошные рамки строки — каждая ячейка явно | rowStyle — автозаполнение пустот |
| Только горизонтальное объединение | rowspan (вертикальное) + rowStyle учитывает занятые ячейки |
| Расшифровка не описывалась | detail — параметр расшифровки рядом с param |
| Высота строки не задавалась | height на строке |
| N пустых строк — N объектов {} | { "empty": N } |
Полная спецификация полей (верхний уровень, fonts, styles, areas, rows, cells, fillType-детекция, rowStyle с rowspan, "Nx"-пропорции, форматы 1С ЧДЦ=/ДФ=) — references/dsl-spec.md.
Имена областей из DSL (name) и имена параметров (param) — то, чем BSL обращается к макету:
ТД = ЭтотОбъект.ПолучитьМакет("ПечатнаяФорма");
ТабДок = Новый ТабличныйДокумент;
ОбластьШапка = ТД.ПолучитьОбласть("Заголовок");
ОбластьШапка.Параметры.ТекстЗаголовка = "Накладная № 1";
ТабДок.Вывести(ОбластьШапка);
Для Каждого Стр Из ТЧ Цикл
Строка = ТД.ПолучитьОбласть("Строка");
Строка.Параметры.Товар = Стр.Товар; // detail = Номенклатура подставит ссылку для расшифровки
Строка.Параметры.Количество = Стр.Количество;
Строка.Параметры.Сумма = Стр.Сумма;
ТабДок.Вывести(Строка);
КонецЦикла;
Для пересечений (область Rows + область Columns, например этикетки/ценники) обращение через |:
Область = ТД.ПолучитьОбласть("ВысотаЭтикетки|ШиринаЭтикетки");
default, bold, header, bordered, bordered-right, bold-right, border-top и т.п.) по комбинации свойств — не обязаны совпадать с исходными.rowStyle, а пустые ячейки убираются из вывода.[Имя] в text) выделяются в отдельные ячейки template.page: "A4-landscape" + "Nx" ширины.Write).mxl compile → Template.xml.xml-gen validate --type mxl → если есть ошибки, см. references/validate-classes.md.mxl info → проверить структуру областей и параметров глазами агента.mxl decompile → редактировать → compile.// ❌ статический текст и параметр свалены в одну ячейку через скобки
{ "col": 2, "text": "Инв № [Номер]" }
// ✅ это шаблон с подстановкой → template
{ "col": 2, "template": "Инв № [Номер]" }
// ❌ сплошные рамки строки — каждая пустая ячейка прописана вручную
{ "cells": [
{ "col": 1, "style": "bordered", "param": "А" },
{ "col": 2, "style": "bordered" },
{ "col": 3, "style": "bordered" },
{ "col": 4, "style": "bordered", "param": "Б" }
]}
// ✅ rowStyle автозаполняет пустоты
{ "rowStyle": "bordered", "cells": [
{ "col": 1, "param": "А" },
{ "col": 4, "param": "Б" }
]}
references/dsl-spec.md — полная спецификация полей DSLreferences/info-modes.md — как читать вывод mxl info (типы областей, пересечения, [tpl]-параметры, detail)references/validate-classes.md — классы ошибок валидатора../role-dsl/, ../form-dsl/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.