Skip to content
Back to skills

Mxl Compile

ASecurity

Создание макета табличного документа (MXL) и его областей операциями unica.apply. Используй когда нужен макет печатной формы; сборки целого макета из JSON-определения на поверхности нет

  • 213 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added June 11, 2026
toolsbash

Works with

  • mcp

Security analysis

A100/100

Scanned October 3, 2026

npx -y skills add IngvarConsulting/unica --skill mxl-compile --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Mxl Compile?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Mxl Compile
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ingvarconsulting-mxl-compile/badge)](https://www.skillsdirectory.com/skills/ingvarconsulting-mxl-compile)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: mxl-compile
description: Создание макета табличного документа (MXL) и его областей операциями unica.apply. Используй когда нужен макет печатной формы; сборки целого макета из JSON-определения на поверхности нет
allowed-tools:
  - Bash
  - Read
  - Write
  - Glob
---

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

## MCP routing

- Preferred path: use MCP `unica` tool `unica.apply`; макет табличного
  документа заводится операцией `template.add`, области правятся `mxl.set`.
- Не зови внутренние адаптеры напрямую: они спрятаны за MCP `unica`.
- Сначала вызови `unica.apply` с `at` и `ops`: это план без записи.
  Когда пользователь поручил внести эту правку, вызови `unica.apply` только
  с `executionToken` из `data.executionToken` успешного плана.

## Шаг 1 — завести макет

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.apply",
    "arguments": {
      "at": "main:Report.Продажи",
      "ops": [
        {"op": "template.add", "args": {"items": [{"name": "ПФ_MXL_Продажи", "templateType": "SpreadsheetDocument"}]}}
      ]
    }
  }
}
```


**Порядок важен.** Превью ничего не публикует, поэтому дочерний узел появится
только после применения первого шага:

1. превью `template.add` (`at` и `ops`) — план и `data.executionToken`;
2. применение `template.add` (только `executionToken` из `data.executionToken` успешного плана) — макет создан;
3. превью операций наполнения по адресу макета;
4. применение их плана только с токеном из `data.executionToken` этого плана.

Обратиться к адресу макета до шага 2 нельзя: план отказывает, потому что цели
ещё нет.

## Шаг 2 — задать область

`mxl.set` адресует сам макет и задаёт одну именованную область: `area` — имя,
`cells` — её ячейки, `columns` — число колонок.

```json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "unica.apply",
    "arguments": {
      "at": "main:Report.Продажи.Template.ПФ_MXL_Продажи",
      "ops": [
        {"op": "mxl.set", "args": {"values": {"area": "Шапка", "columns": 4, "cells": [{"col": 1, "text": "Номенклатура"}, {"col": 2, "text": "Сумма"}]}}}
      ]
    }
  }
}
```

Области задаются по одной; несколько операций `mxl.set` идут одним `ops` и
применяются атомарно.

## Чего словарь не пишет

Сборки целого макета из готового JSON-определения одним вызовом на поверхности
**нет**: DSL ниже остаётся справочником формата, а не входом инструмента.
Шрифты, стили, палитры, объединения ячеек и параметры страницы `mxl.set` не
принимает — он берёт `area`, `cells` и `columns`. Макет, которого этими
средствами не собрать, — пробел контракта Unica MCP; писать `Template.xml`
руками в обход поверхности нельзя.

Если макет создаётся по изображению, структуру и пропорции определи внешним
средством анализа изображения, а затем выражай области операциями выше.

## JSON-схема DSL

Полная спецификация формата: **`../../references/specs/mxl-dsl-spec.md`** (прочитать через Read tool перед написанием JSON).

Краткая структура:

```
{ columns, page, defaultWidth, columnWidths,
  fonts: { name: { face, size, bold, italic, underline, strikeout } },
  styles: { name: { font, align, valign, border, borderWidth, wrap, format } },
  areas: [{ name, rows: [{ height, rowStyle, cells: [
    { col, span, rowspan, style, param, detail, text, template }
  ]}]}]
}
```

Ключевые правила:
- `page` — формат страницы (`"A4-landscape"`, `"A4-portrait"` или число). Автоматически вычисляет `defaultWidth` из суммы пропорций `"Nx"`
- `col` — 1-based позиция колонки
- `rowStyle` — автозаполнение пустот стилем (рамки по всей ширине)
- Тип заполнения определяется автоматически: `param` → Parameter, `text` → Text, `template` → Template
- `rowspan` — объединение строк вниз (rowStyle учитывает занятые ячейки)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…