mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-15 15:59:00 +03:00
92 lines
6.1 KiB
Markdown
92 lines
6.1 KiB
Markdown
---
|
||
name: mxl-compile
|
||
description: Компиляция табличного документа (MXL) из JSON-определения. Используй когда нужно создать макет печатной формы
|
||
argument-hint: <JsonPath> <OutputPath>
|
||
allowed-tools:
|
||
- Bash
|
||
- Read
|
||
- Write
|
||
- Glob
|
||
---
|
||
|
||
# /mxl-compile — Компилятор макета из DSL
|
||
|
||
Принимает компактное JSON-определение макета и генерирует корректный Template.xml для табличного документа 1С. Claude описывает *что* нужно (области, параметры, стили), скрипт обеспечивает *корректность* XML (палитры, индексы, объединения, namespace).
|
||
|
||
## Использование
|
||
|
||
```
|
||
/mxl-compile <JsonPath> <OutputPath>
|
||
```
|
||
|
||
## Параметры
|
||
|
||
| Параметр | Обязательный | Описание |
|
||
|------------|:------------:|------------------------------------|
|
||
| JsonPath | да | Путь к JSON-определению макета |
|
||
| OutputPath | да | Путь для генерации Template.xml |
|
||
|
||
## Команда
|
||
|
||
```powershell
|
||
python ".github/skills/mxl-compile/scripts/mxl-compile.py" -JsonPath "<путь>.json" -OutputPath "<путь>/Template.xml"
|
||
```
|
||
|
||
## Рабочий процесс
|
||
|
||
1. Написать JSON-определение (Write tool) → файл `.json`
|
||
2. Вызвать `/mxl-compile` для генерации Template.xml
|
||
3. Вызвать `/mxl-validate` для проверки корректности
|
||
4. Вызвать `/mxl-info` для верификации структуры
|
||
|
||
**Если макет создаётся по изображению** (скриншот, скан печатной формы) — сначала вызвать `/img-grid` для наложения сетки, по ней определить границы колонок и пропорции, затем использовать `"Nx"` ширины + `"page"` для автоматического расчёта размеров.
|
||
|
||
## JSON-схема DSL
|
||
|
||
Ниже — компактная структура и ключевые правила, достаточные для типового макета. Подробности читать по необходимости:
|
||
|
||
| Что нужно | Файл |
|
||
|---|---|
|
||
| Полные таблицы полей, развёрнутый пример, ограничения формата | `reference/dsl-spec.md` |
|
||
| Шрифты, стили, цвета, рамки, колоночные раскладки и стили колонок | `reference/styles.md` |
|
||
| Полный перечень свойств стиля — все 44 | `reference/format-properties.md` |
|
||
|
||
Краткая структура:
|
||
|
||
```
|
||
{ columns, page, defaultWidth, columnWidths, columnStyles,
|
||
fonts: { name: { face, size, bold, italic, underline, strikeout } | { ref } },
|
||
styles: { name: { font, horizontalAlignment, verticalAlignment, textPlacement,
|
||
backColor, textColor, border, borderColor, format, hidden } },
|
||
areas: [{ name, columnSet, rows: [{ height, hidden, rowStyle, cells: [
|
||
{ col, span, rowspan, style, param, detail, text, template }
|
||
]}]}],
|
||
namedAreas: [{ name, rows, cols }],
|
||
columnSets: { name: { columns, columnWidths, columnStyles } }
|
||
}
|
||
```
|
||
|
||
Ключевые правила:
|
||
- `page` — формат страницы (`"A4-landscape"`, `"A4-portrait"` или число). Автоматически вычисляет `defaultWidth` из суммы пропорций `"Nx"`
|
||
- `name` у области в `areas` необязателен: область без имени — просто кусок сетки, именованной она не станет
|
||
- `namedAreas` — области, которые не описываются диапазоном подряд идущих строк: полоса колонок, прямоугольник, ячейка. Тип не указывается, он следует из того, какие оси заданы
|
||
- `columnSet` у области — ссылка на раскладку из `columnSets`, когда группе строк нужны свои ширины колонок; без него действует документная раскладка
|
||
- Ключ стиля — имя свойства как в выгрузке; `columnStyles` вешает стиль на колонку так же, как `style` на ячейку
|
||
- Рамка — `border` (все стороны) или `leftBorder`/`topBorder`/`rightBorder`/`bottomBorder`; значение `"Solid"` либо `{ style, width }`
|
||
- `rowStyle` — стиль строки: ложится и на строку, и на все её колонки, заполняя пустоты (рамки по всей ширине)
|
||
- `height` и `hidden` — собственные свойства строки, у ячейки таких нет
|
||
- `empty` в строке — шорткат для N подряд пустых строк (`{ "empty": 3 }` = три `{}`)
|
||
- Строку можно писать массивом ячеек — позиция из порядка, `col` не нужен: `"текст"`, `"{Имя}"` — параметр, `">"` — продолжить ячейку слева, `"|"` — сверху, `null` — пропуск колонки
|
||
- `col` — 1-based позиция колонки
|
||
- `rowspan` — объединение строк вниз (rowStyle учитывает занятые ячейки)
|
||
- Содержимое ячейки задаётся одним из ключей: `param` — параметр заполнения, `text` — статический текст, `template` — текст со вставками `[Параметр]`
|
||
|
||
Двухуровневая шапка массивами:
|
||
```json
|
||
"rows": [
|
||
["Вид", "Остаток", ">", "Итог"],
|
||
["|", "начало", "конец", "|"],
|
||
["{Вид}", "{Нач}", "{Кон}", "{Итог}"]
|
||
]
|
||
```
|