К основному содержанию
скилл CX Codex

mxl-compile — скилл для Claude Code: что делает и как установить

Скилл собирает макет табличного документа 1С (Template.xml) из компактного JSON-описания. Пригодится при разработке и вёрстке печатных форм.

Установить в Claude Code · Через маркетплейс плагинов Все способы и платформы ↓
/plugin marketplace add Nikolay-Shirokov/cc-1c-skills
/plugin install 1c-skills@cc-1c-skills
Открыть на GitHub

Что делает mxl-compile

Скилл транслирует JSON-описание макета в готовый Template.xml для табличного документа 1С. Он сам рассчитывает палитры, шрифты, стили, объединения ячеек, параметры заполнения и пространства имён.

Под капотом вызов идёт через PowerShell-скрипт scripts/mxl-compile.ps1, принимающий пути к входному JSON и выходному Template.xml. Формат поддерживает размеры в пропорциях, именованные области, параметры расшифровки и позиционную запись ячеек со стрелками объединения.

Для запуска обязателен доступ к powershell.exe. Без него генерация макета завершится ошибкой.

Какие задачи решает

  • Собрать файл Template.xml печатной формы 1С из декларативного JSON
  • Настроить сетку колонок, стили ячеек и шрифты без ручной правки XML
  • Задать параметры заполнения и расшифровки для областей макета
  • Сформировать структуру печатной формы по сетке скриншота

Примеры запросов агенту

  • /mxl-compile ./specs/invoice.json ./src/CommonTemplates/Invoice/Template.xml
  • Скомпилируй макет накладной из layout.json в out/Template.xml с помощью /mxl-compile
  • Собери Template.xml печатной формы акта из ./schema.json

Как установить mxl-compile

1Через маркетплейс плагинов

/plugin marketplace add Nikolay-Shirokov/cc-1c-skills
/plugin install 1c-skills@cc-1c-skills

Команда ставит плагин 1c-skills целиком, со всеми его скиллами

2Через Skills CLI (Vercel)

npx skills add Nikolay-Shirokov/cc-1c-skills --skill mxl-compile -a claude-code

3Вручную: положить файлы

~/.claude/skills/mxl-compile/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/mxl-compile/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о mxl-compile

Как установить mxl-compile в Claude Code?

В консоли Claude Code выполните две команды по порядку: сначала /plugin marketplace add Nikolay-Shirokov/cc-1c-skills, затем /plugin install 1c-skills@cc-1c-skills.

Что делает mxl-compile?

Он преобразует компактное JSON-описание макета со стилями, строками и именованными областями в валидный XML-файл табличного документа 1С.

Что нужно для работы mxl-compile?

Скилл запускает скрипт через powershell.exe, поэтому среда PowerShell должна быть установлена и доступна в системе.

Исходный текст

SKILL.md · MIT
---
name: mxl-compile
description: Компиляция табличного документа (MXL) из JSON-определения. Используй когда нужно создать макет печатной формы
argument-hint: <JsonPath> <OutputPath>
allowed-tools:
  - Bash
  - Read
  - Write
  - Glob
---

# /mxl-compile — Компилятор макета из DSL

Принимает компактное JSON-определение макета (области, параметры, стили) → генерирует Template.xml табличного документа 1С: палитры, индексы, объединения, namespace.

## Использование

```
/mxl-compile <JsonPath> <OutputPath>
```

## Параметры

| Параметр   | Обязательный | Описание                           |
|------------|:------------:|------------------------------------|
| JsonPath   | да           | Путь к JSON-определению макета     |
| OutputPath | да           | Путь для генерации Template.xml    |

## Команда

```powershell
powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/mxl-compile.ps1" -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"` для автоматического расчёта размеров.

## Что читать под задачу

Ниже — всё, что нужно для типового макета. Остальное лежит по файлу на задачу, читать нужно
только свой:

| Задача | Ключи | Файл |
|---|---|---|
| Свойство стиля вне частых: отступ, защита, узор, маска, поведение при выводе | — | `reference/style-properties.md` |
| Область, не описываемая диапазоном строк; свои ширины колонок у части документа | `namedAreas`, `columnSets`, `columnSet` | `reference/layout.md` |
| Колонтитулы, ориентация, поля, масштаб | `header`, `footer`, `printSettings` | `reference/print.md` |
| Картинка, фигура или надпись поверх сетки; картинка в ячейке | `pictures`, `drawings`, `pictureParameter` | `reference/drawings.md` |
| Ячейки для ввода данных пользователем | `valueType`, `controlType`, `value` | `reference/input-cells.md` |
| Сворачиваемые группы строк или колонок | `rowGroups`, `columnGroups` | `reference/groups.md` |
| Всплывающая подсказка у ячейки | `note` | `reference/notes.md` |

## Пример

```json
{
  "columns": 5,
  "columnWidths": { "1": 5, "2": 40, "3-5": 12 },
  "fonts": { "жирный": { "face": "Arial", "size": 10, "bold": true } },
  "styles": {
    "шапка":  { "font": "жирный", "horizontalAlignment": "Center", "textPlacement": "Wrap", "border": "Solid" },
    "клетка": { "border": "Solid" },
    "число":  { "border": "Solid", "horizontalAlignment": "Right", "format": "ЧЦ=15; ЧДЦ=2" },
    "итог":   { "font": "жирный", "horizontalAlignment": "Right", "topBorder": "Solid" }
  },
  "areas": [
    { "name": "Заголовок", "rows": [
      { "height": 20, "cells": [{ "col": 1, "span": 5, "style": "шапка", "param": "ЗаголовокОтчёта" }] },
      {}
    ]},
    { "name": "ШапкаТаблицы", "rows": [
      { "rowStyle": "шапка", "cells": ["№", "Номенклатура", "Количество", "Цена", "Сумма"] }
    ]},
    { "name": "Строка", "rows": [
      { "rowStyle": "клетка", "cells": [
        { "col": 1, "param": "НомерСтроки" },
        { "col": 2, "param": "Товар", "detail": "Номенклатура" },
        { "col": 3, "style": "число", "param": "Количество" },
        { "col": 4, "style": "число", "param": "Цена" },
        { "col": 5, "style": "число", "param": "Сумма" }
      ]}
    ]},
    { "name": "Итого", "rows": [
      { "rowStyle": "итог", "cells": [null, null, null, "Итого:", "{Всего}"] }
    ]}
  ]
}
```

Шапка таблицы и итог записаны позиционно — позиция берётся из порядка, `col` не нужен;
строка таблицы записана ячейками с `col`, потому что у них разные стили и расшифровка.

## Структура DSL

```
{ columns, page, defaultWidth, columnWidths, columnStyles, textLanguages,
  fonts:  { имя: { face, size, bold, italic, underline, strikeout } | { ref } },
  styles: { имя: { font, horizontalAlignment, verticalAlignment, textPlacement,
                   border, leftBorder, topBorder, rightBorder, bottomBorder,
                   borderColor, backColor, textColor, format } },
  areas: [{ name, columnSet, rows: [
    { height, hidden, rowStyle, empty, cells: [
      { col, span, rowspan, style, param, detail, text, template, note,
        valueType, controlType, value, pictureParameter } ] } ] }],
  namedAreas, columnSets, rowGroups, columnGroups, header, footer, printSettings,
  pictures, drawings
}
```

Верхний уровень: `columns` обязателен, остальное по необходимости.

| Ключ | Описание |
|---|---|
| `columns` | Количество колонок раскладки по умолчанию |
| `page` | Формат страницы: `"A4-landscape"` (780), `"A4-portrait"` (540) или число. Сам вычисляет `defaultWidth` из суммы пропорций `"Nx"` |
| `defaultWidth` | Ширина колонок по умолчанию (10) |
| `columnWidths` | Ширины: ключи 1-based (`"1"`, `"3-14"`, `"5,7,9"`), значение — число или `"2x"` (доля от `defaultWidth`) |
| `columnStyles` | Стиль на колонку целиком: те же ключи диапазонов, значение — имя стиля |
| `textLanguages` | Языки, на которые разворачивается текст, заданный строкой (по умолчанию `["ru"]`) |
| `areas` | Области — диапазоны подряд идущих строк, в порядке документа |

## Области, строки, ячейки

**Область** (`areas[]`) — диапазон подряд идущих строк: `name` (необязательно; с именем область
доступна как `Макет.ПолучитьОбласть("Имя")`) и `rows`. Область без имени — просто кусок сетки.

**Строка** (`rows[]`): `height`, `hidden`, `rowStyle`, `cells`. Пустая строка — `{}`,
а `{ "empty": 3 }` заменяет три подряд. `height` и `hidden` — свойства самой строки, у ячейки
таких нет.

**Ячейка** (`cells[]`):

| Ключ | Описание |
|---|---|
| `col` | Позиция колонки, 1-based |
| `span` / `rowspan` | Объединение вправо / вниз |
| `style` | Имя стиля; перекрывает `rowStyle` для этой ячейки |
| `param` | Параметр заполнения — `Область.Параметры.Имя = …` |
| `text` | Статический текст: строка или объект «язык → текст» |
| `template` | Текст со вставками `[Параметр]` |
| `detail` | Параметр расшифровки; ставится и без `param` |

Содержимое задаётся ровно одним ключом из `param` / `text` / `template`; ячейка без них —
пустая (нужна, например, ради рамки). Пустая строка `"text": ""` — это тоже текст, а не
отсутствие текста.

### Короткая форма: список ячеек позиционно

Позиция берётся из порядка, `col` не нужен:

| Элемент | Значение |
|---|---|
| `"текст"` | Статический текст |
| `{ "ru": "…", "en": "…" }` | Тот же текст на нескольких языках |
| `"{Имя}"` | Параметр заполнения |
| `">"` | Продолжение ячейки слева — увеличивает её `span` |
| `"|"` | Продолжение ячейки сверху — увеличивает её `rowspan` |
| `null` | Пропуск колонки |
| `{ … }` | Обычная ячейка без `col` — когда нужны `style`, `detail`, `template` |

```json
"rows": [
  ["Вид", "Остаток", ">", "Итог"],
  ["|",   "начало",  "конец", "|"],
  ["{Вид}", "{Нач}", "{Кон}", "{Итог}"]
]
```

Здесь «Вид» и «Итог» объединены по вертикали, «Остаток» — по горизонтали на две колонки.

Позиционный список — это форма записи ЯЧЕЕК, а не строки. Если у строки нет своих свойств, он
и есть строка (как в примере выше). Если нужны `height`, `hidden` или `rowStyle` — тот же
список кладётся в `cells`:

```json
{ "rowStyle": "итог", "cells": [null, null, null, "Итого:", "{Всего}"] }
```

### `rowStyle` — оформление строки

Стиль ложится на ВСЮ ширину строки: колонки без явных ячеек получают его тоже — так выходят
сплошные рамки в табличной части. Он же становится оформлением самой строки. Ячейки с `rowspan`
из предыдущих строк при этом пропускаются.

## Оформление

Ячейка, строка и колонка ссылаются на один и тот же именованный стиль: ячейка — ключом `style`,
строка — `rowStyle`, колонка — через `columnStyles`.

**Шрифт** (`fonts.<имя>`): `face` (Arial), `size` (10), `bold`, `italic`, `underline`,
`strikeout`. Либо ссылка вместо описания: `{ "ref": "style:TextFont" }`,
`{ "ref": "sys:DefaultGUIFont" }`. Шрифт `"default"` берётся, когда стиль не указал свой.

**Частые ключи стиля** — имя ключа совпадает с именем свойства в выгрузке, значения перечислений
регистр не различают:

| Ключ | Значение |
|---|---|
| `font` | Имя из `fonts` |
| `horizontalAlignment` | `Left`, `Center`, `Right`, `Justify`, `Auto` |
| `verticalAlignment` | `Top`, `Center`, `Bottom` |
| `textPlacement` | Длинный текст: `Wrap` (перенос), `Cut` (обрезать), `Block`, `Auto` |
| `border` | Рамка со всех сторон |
| `leftBorder`, `topBorder`, `rightBorder`, `bottomBorder` | Отдельная сторона |
| `borderColor` | Цвет рамки |
| `backColor`, `textColor` | Цвет фона и текста |
| `format` | Формат данных 1С: `"ЧЦ=15; ЧДЦ=2"`, `"ДФ=dd.MM.yyyy"` |

**Рамка**: `"Solid"` (ширина 1) либо `{ "style": "Solid", "width": 2 }`. Стили линии: `None`,
`Solid`, `Dotted`, `Dashed`, `DashDotted`, `DashDottedDotted`, `ThinDashed`, `LargeDashed`,
`ThickDashed`, `Double`. Стороны можно задавать по отдельности всегда: совпавшие четыре
компилятор свернёт сам.

**Цвет** — нотация платформы: `#RRGGBB`, `style:ИмяСтиля` (элемент стиля конфигурации),
`web:Имя`, `win:Имя`. Несуществующее имя платформа отвергнет при загрузке.

```json
"styles": {
  "шапка":  { "font": "жирный", "horizontalAlignment": "Center", "backColor": "#EBEBEB" },
  "рамка":  { "border": { "style": "Solid", "width": 2 } },
  "снизу":  { "bottomBorder": "Dotted" }
}
```

© Nikolay Shirokov · MIT · Nikolay-Shirokov/cc-1c-skills

Темы и платформы

Каталог скиллов SKILL.md →

Из того же набора59

erf-init Генерирует минимальный набор XML-исходников внешнего отчёта 1С: корневой файл метаданных и каталог отчёта. Пригодится, когда начинаешь новый отчёт и не хочешь собирать каркас руками. CX Codex 46установок erf-dump Декомпилирует внешние отчёты 1С формата ERF в набор исходников XML. Сохраняет ссылочные типы конфигурации при выгрузке. CX Codex 46установок subsystem-edit Скилл меняет состав и свойства подсистемы 1С в XML. Подходит для добавления объектов, дочерних подсистем и точечных правок. CX Codex 45установок mxl-validate Проверяет макеты табличных документов 1С (MXL). Находит структурные ошибки в Template.xml после ручных правок или кодогенерации. CX Codex 45установок form-patterns Справочник паттернов управляемых форм 1С для проектирования структуры, имён элементов и обработчиков. Нужен перед сборкой формы. CX Codex 45установок form-compile Собирает управляемую форму 1С в Form.xml из JSON-описания элементов или автоматически из метаданных объекта. Нужен, когда форму надо создать с нуля или получить типовую. CX Codex 45установок form-add Создаёт каркас управляемой формы 1С и регистрирует её в метаданных объекта конфигурации. Пригодится при разработке форм документов, справочников и регистров. CX Codex 45установок db-load-git Загружает изменения конфигурации из Git в базу 1С без полной перегрузки. Находит изменённые файлы в рабочей копии или коммитах и обновляет только их. CX Codex 45установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой