mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-13 06:53:21 +03:00
Auto-build: codeassistant (python) from f522d29
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
---
|
||||
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 ".codeassistant/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": [
|
||||
["Вид", "Остаток", ">", "Итог"],
|
||||
["|", "начало", "конец", "|"],
|
||||
["{Вид}", "{Нач}", "{Кон}", "{Итог}"]
|
||||
]
|
||||
```
|
||||
@@ -0,0 +1,241 @@
|
||||
# Спецификация MXL DSL — JSON-формат описания табличного документа
|
||||
|
||||
Компактный JSON-формат для описания макетов табличных документов 1С (SpreadsheetDocument). Используется навыком `/mxl-compile` (JSON → XML).
|
||||
|
||||
Оформление — шрифты, стили, цвета, рамки, колоночные раскладки — в `styles.md`;
|
||||
полный перечень свойств стиля — в `format-properties.md`.
|
||||
|
||||
## Пример
|
||||
|
||||
```json
|
||||
{
|
||||
"columns": 10,
|
||||
"defaultWidth": 30,
|
||||
"columnWidths": { "1": 15, "2-8": 40, "9-10": 50 },
|
||||
|
||||
"fonts": {
|
||||
"default": { "face": "Arial", "size": 10 },
|
||||
"bold": { "face": "Arial", "size": 10, "bold": true },
|
||||
"header": { "face": "Arial", "size": 14, "bold": true }
|
||||
},
|
||||
|
||||
"styles": {
|
||||
"default": {},
|
||||
"header": { "font": "header", "horizontalAlignment": "Center" },
|
||||
"label": { "font": "bold" },
|
||||
"bordered": { "border": "Solid" },
|
||||
"bordered-right": { "border": "Solid", "horizontalAlignment": "Right" },
|
||||
"total-right": { "font": "bold", "topBorder": "Solid", "horizontalAlignment": "Right" }
|
||||
},
|
||||
|
||||
"areas": [
|
||||
{
|
||||
"name": "Заголовок",
|
||||
"rows": [
|
||||
{ "height": 20, "cells": [
|
||||
{ "col": 1, "span": 10, "style": "header", "param": "ТекстЗаголовка" }
|
||||
]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ШапкаТаблицы",
|
||||
"rows": [
|
||||
{ "rowStyle": "bordered", "cells": [
|
||||
{ "col": 1, "text": "№" },
|
||||
{ "col": 2, "span": 6, "text": "Наименование" },
|
||||
{ "col": 9, "text": "Кол-во" },
|
||||
{ "col": 10, "text": "Сумма" }
|
||||
]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Строка",
|
||||
"rows": [
|
||||
{ "rowStyle": "bordered", "cells": [
|
||||
{ "col": 1, "param": "НомерСтроки" },
|
||||
{ "col": 2, "span": 6, "param": "Товар", "detail": "Номенклатура" },
|
||||
{ "col": 9, "style": "bordered-right", "param": "Количество" },
|
||||
{ "col": 10, "style": "bordered-right", "param": "Сумма" }
|
||||
]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Итого",
|
||||
"rows": [
|
||||
{ "cells": [
|
||||
{ "col": 8, "span": 2, "style": "total-right", "text": "Итого:" },
|
||||
{ "col": 10, "style": "total-right", "param": "Всего" }
|
||||
]}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Верхний уровень
|
||||
|
||||
| Поле | Обяз. | По умолч. | Описание |
|
||||
|------|:-----:|-----------|----------|
|
||||
| `columns` | да | — | Количество колонок в раскладке по умолчанию. `0` допустимо: значит, все строки живут в раскладках из `columnSets` |
|
||||
| `page` | нет | — | Формат страницы: `"A4-landscape"` (780), `"A4-portrait"` (540) или число. Автоматически вычисляет `defaultWidth` из суммы пропорций `"Nx"` |
|
||||
| `defaultWidth` | нет | 10 | Ширина колонок по умолчанию. Игнорируется если задан `page` и все колонки используют `"Nx"` |
|
||||
| `columnWidths` | нет | `{}` | Ширины колонок. Ключи 1-based: `"1"`, `"3-14"`, `"5,7,9"`. Значения: число (абсолют) или `"Nx"` (множитель от defaultWidth, напр. `"2x"`, `"0.5x"`) |
|
||||
| `columnStyles` | нет | — | Оформление колонок: те же ключи, значение — имя стиля (см. `styles.md`) |
|
||||
| `textLanguages` | нет | `["ru"]` | Языки, на которых пишется текст, заданный строкой (см. ниже) |
|
||||
| `fonts` | нет | — | Именованные шрифты (если не задано, создаётся Arial 10) |
|
||||
| `styles` | нет | `{}` | Именованные стили (см. `styles.md`) |
|
||||
| `areas` | да | — | Массив областей — диапазонов подряд идущих строк (порядок = порядок в документе); имя необязательно |
|
||||
| `namedAreas` | нет | — | Именованные области, заданные координатами (см. ниже) |
|
||||
| `columnSets` | нет | — | Дополнительные колоночные раскладки (см. `styles.md`) |
|
||||
|
||||
## Области (`areas[]`)
|
||||
|
||||
| Поле | Обяз. | Описание |
|
||||
|------|:-----:|----------|
|
||||
| `name` | нет | Имя области для `Макет.ПолучитьОбласть("Имя")` |
|
||||
| `columnSet` | нет | Ссылка на раскладку из `columnSets` |
|
||||
| `rows` | да | Массив строк |
|
||||
|
||||
Макет собирается из областей — диапазонов подряд идущих строк. Имя делает область именованной: она доступна в коде как `Макет.ПолучитьОбласть("Имя")` и занимает строки своего диапазона. **Область без имени** — просто кусок сетки: так описываются строки, не принадлежащие ни одной именованной области.
|
||||
|
||||
## Именованные области координатами (`namedAreas[]`)
|
||||
|
||||
Для областей, которые диапазоном подряд идущих строк не описываются: полоса колонок, прямоугольник, ячейка, а также пересекающиеся с другими.
|
||||
|
||||
| Поле | Обяз. | Описание |
|
||||
|------|:-----:|----------|
|
||||
| `name` | да | Имя области |
|
||||
| `rows` | \* | Строки: число или диапазон `"N-M"`, 1-based |
|
||||
| `cols` | \* | Колонки: число или диапазон `"N-M"`, 1-based |
|
||||
|
||||
\* Обязательна хотя бы одна из осей.
|
||||
|
||||
**Тип области не указывается** — он следует из того, какие оси заданы, как в `ТабличныйДокумент.Область()`: только строки → полоса строк, только колонки → полоса колонок, обе оси → прямоугольник, одиночные значения по обеим осям → одна ячейка.
|
||||
|
||||
```json
|
||||
"namedAreas": [
|
||||
{ "name": "ОбластьПечатиПоВысоте", "rows": "1-48" },
|
||||
{ "name": "ОбластьПечатиПоШирине", "cols": "1-35" },
|
||||
{ "name": "HZY", "rows": 9, "cols": "16-17" }
|
||||
]
|
||||
```
|
||||
|
||||
Диапазон — та же грамматика, что у `columnWidths`, но **только** число или `"N-M"`: список через запятую запрещён, область непрерывна. Имя обязательно, и хотя бы одна ось должна быть задана; нарушение любого из этих правил → ненулевой код выхода и сообщение в stderr.
|
||||
|
||||
## Строки (`rows[]`)
|
||||
|
||||
| Поле | По умолч. | Описание |
|
||||
|------|-----------|----------|
|
||||
| `height` | — | Высота строки (если не задана, используется авто) |
|
||||
| `hidden` | `false` | Скрыть строку |
|
||||
| `rowStyle` | — | Стиль строки: ложится и на саму строку, и на ВСЕ её колонки (заполняет пустоты рамками) |
|
||||
| `cells` | `[]` | Массив ячеек |
|
||||
| `empty` | — | Количество подряд идущих пустых строк (заменяет N отдельных `{}`) |
|
||||
|
||||
Строка без `cells` и `rowStyle` → пустая строка. `{ "empty": 3 }` эквивалентно трём `{}`.
|
||||
|
||||
`height` и `hidden` — собственные свойства строки: у ячейки таких нет, и в её оформление они
|
||||
не попадают. Всё остальное оформление строки задаётся через `rowStyle`.
|
||||
|
||||
### Короткая форма: строка массивом
|
||||
|
||||
Вместо объекта строка может быть массивом ячеек — позиция определяется порядком, `col` не указывается.
|
||||
|
||||
| Элемент | Значение |
|
||||
|---------|----------|
|
||||
| `"текст"` | Статический текст (`text`) |
|
||||
| `{ "ru": "…", "en": "…" }` | Тот же текст на нескольких языках |
|
||||
| `"{Имя}"` | Параметр (`param`) |
|
||||
| `">"` | Продолжение ячейки слева — увеличивает её `span` |
|
||||
| `"|"` | Продолжение ячейки сверху — увеличивает её `rowspan` |
|
||||
| `null` | Пустая колонка: позиция занята, ячейка не создаётся |
|
||||
| `{ ... }` | Обычная ячейка **без** `col`; нужна для `style`, `detail`, `template` |
|
||||
|
||||
Объект-элемент трактуется по его ключам: если среди них есть ключ ячейки (`span`, `rowspan`,
|
||||
`style`, `param`, `detail`, `text`, `template`) — объект описывает свойства ячейки. Иначе он
|
||||
целиком считается её текстом, а его ключи — идентификаторами языков.
|
||||
|
||||
```json
|
||||
"rows": [
|
||||
["Вид", "Остаток", ">", "Итог"],
|
||||
["|", "начало", "конец", "|"],
|
||||
["{Вид}", "{Нач}", "{Кон}", "{Итог}"]
|
||||
]
|
||||
```
|
||||
Здесь «Вид» и «Итог» объединены по вертикали на две строки, «Остаток» — по горизонтали на две колонки.
|
||||
|
||||
Ограничения короткой формы:
|
||||
- не задать `height` и `rowStyle` — это свойства строки, а не ячейки;
|
||||
- не выразить текст, совпадающий с `">"`, `"|"` или с шаблоном `"{...}"`.
|
||||
|
||||
Маркеру нужно, что продолжать: `">"` требует ячейку слева в той же строке, `"|"` — ячейку сверху. Объектный элемент не должен нести `col`: позиция уже задана порядком. Число элементов не может превышать `columns`. Нарушение любого из этих правил → ненулевой код выхода и сообщение в stderr.
|
||||
|
||||
## Ячейки (`cells[]`)
|
||||
|
||||
| Поле | Обяз. | По умолч. | Описание |
|
||||
|------|:-----:|-----------|----------|
|
||||
| `col` | да | — | Позиция колонки (1-based). В короткой форме строки не указывается — позиция берётся из порядка |
|
||||
| `span` | нет | `1` | Объединение по горизонтали (количество колонок) |
|
||||
| `rowspan` | нет | `1` | Объединение по вертикали (количество строк) |
|
||||
| `style` | нет | rowStyle | Стиль ячейки (переопределяет rowStyle) |
|
||||
| `param` | нет | — | Параметр заполнения |
|
||||
| `detail` | нет | — | Параметр расшифровки (только с `param`) |
|
||||
| `text` | нет | — | Статический текст. Строка или объект `{ ru, en }` — см. ниже |
|
||||
| `template` | нет | — | Шаблонный текст с `[Параметр]`. Строка или объект, как `text` |
|
||||
|
||||
### Содержимое ячейки
|
||||
|
||||
Задаётся ровно одним из ключей, объявлять способ заполнения отдельно не нужно:
|
||||
- `param` — параметр заполнения;
|
||||
- `template` — текст со вставками `[Параметр]`;
|
||||
- `text` — статический текст;
|
||||
- ничего — пустая ячейка (нужна, например, ради рамки).
|
||||
|
||||
### Текст на нескольких языках
|
||||
|
||||
`text` и `template` принимают строку или объект «язык → текст». Объект даёт по надписи на каждый язык, в порядке ключей. Строка означает один и тот же текст на всех языках макета — по умолчанию только русский.
|
||||
|
||||
```json
|
||||
{ "col": 1, "text": "Наименование" }
|
||||
{ "col": 2, "text": { "ru": "Поставщик", "en": "Supplier" } }
|
||||
```
|
||||
|
||||
Набор языков задаётся документным ключом `textLanguages`:
|
||||
|
||||
```json
|
||||
{ "columns": 3, "textLanguages": ["ru", "en"], "areas": [] }
|
||||
```
|
||||
|
||||
С таким объявлением `"Наименование"` из примера выше даст надпись и под `ru`, и под `en`.
|
||||
|
||||
Ключ ни на что в конфигурации не смотрит — это просто список языков, на которые разворачивается строка.
|
||||
|
||||
Пустая строка — это текст: ячейка с `"text": ""` даёт пустую надпись, а не ячейку без текста.
|
||||
|
||||
## `rowStyle` — оформление строки
|
||||
|
||||
Стиль применяется ко ВСЕЙ ширине строки: позиции без явных ячеек получают тот же стиль. Так в табличных строках получаются сплошные рамки. Он же становится оформлением самой строки — именно так платформа хранит строку, оформленную целиком.
|
||||
|
||||
Стиль конкретной ячейки (`style`) перекрывает `rowStyle` для этой ячейки.
|
||||
|
||||
Если в предыдущих строках той же области есть ячейки с `rowspan`, их колонки при автозаполнении пропускаются.
|
||||
|
||||
## Ограничения
|
||||
|
||||
DSL описывает не все конструкции табличного документа. Перечисленное ниже **теряется при
|
||||
round-trip** (`/mxl-decompile` → `/mxl-compile`): в JSON оно не попадает, в сгенерированный
|
||||
XML не возвращается.
|
||||
|
||||
- ячейки-поля ввода (`containsValue` / `valueType` / `controlType`);
|
||||
- объединения, не привязанные к ячейке (по всей высоте или ширине документа);
|
||||
- рисунки и картинки, в том числе штрихкоды, и примечания к ячейкам;
|
||||
- группировки строк и колонок;
|
||||
- колонтитулы, параметры печати, область печати.
|
||||
|
||||
Пересборка макета из DSL — это полная перегенерация, а не точечная правка XML, поэтому
|
||||
diff после round-trip обычно шире фактической доработки.
|
||||
|
||||
Отдельно про побайтовое совпадение. В макетах, которые долго правили в Конфигураторе,
|
||||
встречаются следы прежних состояний: формат ячейки может нести ширину колонки, которая с тех
|
||||
пор изменилась. Такие значения не описывают итоговый документ и из него не выводятся, поэтому
|
||||
собранный XML совпадёт с исходным не всегда — при полностью сохранённом содержании.
|
||||
@@ -0,0 +1,77 @@
|
||||
# Полный список свойств стиля
|
||||
|
||||
Имя ключа совпадает с именем свойства в выгрузке — исключений нет. Частые свойства
|
||||
с примерами — в `styles.md`, здесь полный перечень.
|
||||
|
||||
Тип значения:
|
||||
|
||||
- **число** — целое;
|
||||
- **да/нет** — `true` / `false`;
|
||||
- **перечисление** — одно из указанных, регистр не важен;
|
||||
- **цвет** — `#RRGGBB`, `style:Имя`, `web:Имя`, `win:Имя`;
|
||||
- **линия** — `"Solid"` либо `{ style, width }`;
|
||||
- **текст** — строка (разворачивается на языки макета).
|
||||
|
||||
## Текст и выравнивание
|
||||
|
||||
| Ключ | Тип | Значение |
|
||||
|------|-----|----------|
|
||||
| `font` | имя | Ссылка на имя из `fonts` |
|
||||
| `horizontalAlignment` | перечисление | `Left`, `Center`, `Right`, `Justify`, `Auto` |
|
||||
| `verticalAlignment` | перечисление | `Top`, `Center`, `Bottom` |
|
||||
| `textPlacement` | перечисление | `Wrap`, `Cut`, `Block`, `Auto` |
|
||||
| `textOrientation` | число | Поворот в десятых долях градуса: `900` = 90° |
|
||||
| `textColor` | цвет | Цвет текста |
|
||||
| `indent` | число | Отступ текста |
|
||||
| `autoIndent` | число | Автоматический отступ |
|
||||
| `format` | текст | Формат данных: `"ЧЦ=15; ЧДЦ=2"` |
|
||||
| `editFormat` | текст | Формат редактирования |
|
||||
| `mask` | текст | Маска ввода |
|
||||
| `markNegatives` | да/нет | Выделять отрицательные |
|
||||
|
||||
## Фон и рамка
|
||||
|
||||
| Ключ | Тип | Значение |
|
||||
|------|-----|----------|
|
||||
| `backColor` | цвет | Цвет фона |
|
||||
| `pattern` | перечисление | `Solid`, `WithoutPattern`, `Pattern7`, `Pattern10`, `Pattern12`, `Pattern13`, `Pattern14`, `Pattern16` |
|
||||
| `patternColor` | цвет | Цвет узора |
|
||||
| `border` | линия | Все четыре стороны |
|
||||
| `leftBorder`, `topBorder`, `rightBorder`, `bottomBorder` | линия | Отдельная сторона |
|
||||
| `borderColor` | цвет | Цвет рамки |
|
||||
|
||||
## Поведение
|
||||
|
||||
| Ключ | Тип | Значение |
|
||||
|------|-----|----------|
|
||||
| `hidden` | да/нет | Скрыть |
|
||||
| `protection` | да/нет | Защита от редактирования |
|
||||
| `print` | да/нет | Выводить на печать |
|
||||
| `hyperLink` | да/нет | Гиперссылка |
|
||||
| `detailsUse` | перечисление | Использование расшифровки: `Cell`, `Row`, `WithoutProcessing` |
|
||||
| `autoMarkIncomplete` | да/нет | Автоотметка незаполненного |
|
||||
| `bySelectedColumns` | да/нет | По выделенным колонкам |
|
||||
| `columnSizeChange` | перечисление | `Normal`, `QuickChange` |
|
||||
| `autoWidthCalculation` | да/нет | Автоматический расчёт ширины |
|
||||
| `widthWeightFactor` | число | Весовой коэффициент ширины |
|
||||
|
||||
## Картинка в ячейке
|
||||
|
||||
| Ключ | Тип | Значение |
|
||||
|------|-----|----------|
|
||||
| `picIndex` | число | Номер картинки |
|
||||
| `pictureSizeMode` | перечисление | `AutoSize`, `Proportionally`, `RealSize` |
|
||||
| `picHorizontalAlignment` | перечисление | `Auto`, `Center`, `Left`, `Right` |
|
||||
| `picVerticalAlignment` | перечисление | `Top`, `Center`, `Bottom` |
|
||||
| `textPosition` | перечисление | Положение текста относительно картинки: `Auto`, `Top`, `Right`, `Bottom` |
|
||||
| `drawingBorder` | число | Рамка рисунка |
|
||||
| `drawingHaveLeftBorder`, `drawingHaveTopBorder`, `drawingHaveRightBorder`, `drawingHaveBottomBorder` | да/нет | Наличие стороны рамки рисунка |
|
||||
|
||||
## Чего в стиле нет
|
||||
|
||||
- `width` — свойство колонки, задаётся через `columnWidths`;
|
||||
- `height` — свойство строки, задаётся ключом `height` у строки;
|
||||
- `fillType` — выводится из того, каким ключом задано содержимое ячейки
|
||||
(`text` / `param` / `template`);
|
||||
- `containsValue`, `valueType`, `controlType` — свойства конкретной ячейки, а не общего
|
||||
оформления; сейчас не поддерживаются.
|
||||
@@ -0,0 +1,145 @@
|
||||
# Оформление: шрифты, стили, колонки
|
||||
|
||||
Оформление в табличном документе — одна сущность на всех: ячейка, строка и колонка ссылаются
|
||||
на один и тот же именованный стиль. Ячейка — ключом `style`, строка — `rowStyle`, колонка —
|
||||
через `columnStyles`.
|
||||
|
||||
## Шрифты (`fonts.<name>`)
|
||||
|
||||
| Поле | По умолч. | Описание |
|
||||
|------|-----------|----------|
|
||||
| `face` | `"Arial"` | Имя шрифта |
|
||||
| `size` | `10` | Размер (бывает дробным: `8.3`) |
|
||||
| `bold` | `false` | Жирный |
|
||||
| `italic` | `false` | Курсив |
|
||||
| `underline` | `false` | Подчёркнутый |
|
||||
| `strikeout` | `false` | Зачёркнутый |
|
||||
|
||||
Шрифт `"default"` используется, когда стиль не указывает шрифт явно. Если не определён,
|
||||
создаётся автоматически (Arial 10).
|
||||
|
||||
Вместо собственного описания шрифт может быть **ссылкой** — на элемент стиля конфигурации
|
||||
или на системный шрифт. Тогда у него единственное поле:
|
||||
|
||||
```json
|
||||
"fonts": {
|
||||
"основной": { "ref": "style:TextFont" },
|
||||
"системный": { "ref": "sys:DefaultGUIFont" }
|
||||
}
|
||||
```
|
||||
|
||||
Это та же запись, что у шрифта в описании формы.
|
||||
|
||||
## Стили (`styles.<name>`)
|
||||
|
||||
Ключ стиля — имя свойства так, как оно называется в выгрузке. Ниже частые; полный список
|
||||
из 44 свойств — в `format-properties.md`.
|
||||
|
||||
| Поле | Описание |
|
||||
|------|----------|
|
||||
| `font` | Ссылка на имя из `fonts` |
|
||||
| `horizontalAlignment` | `Left`, `Center`, `Right`, `Justify`, `Auto` |
|
||||
| `verticalAlignment` | `Top`, `Center`, `Bottom` |
|
||||
| `textPlacement` | Что делать с длинным текстом: `Wrap` (перенос), `Cut` (обрезать), `Block`, `Auto` |
|
||||
| `backColor` | Цвет фона (см. «Цвет») |
|
||||
| `textColor` | Цвет текста |
|
||||
| `border`, `leftBorder`, `topBorder`, `rightBorder`, `bottomBorder` | Рамка (см. «Рамка») |
|
||||
| `borderColor` | Цвет рамки |
|
||||
| `format` | Формат данных 1С: `"ЧЦ=15; ЧДЦ=2"`, `"ДФ=dd.MM.yyyy"` |
|
||||
| `hidden` | Скрыть |
|
||||
| `protection` | Защита от редактирования |
|
||||
| `indent` | Отступ |
|
||||
| `textOrientation` | Поворот текста, в десятых долях градуса (`900` = 90°) |
|
||||
|
||||
Значения перечислений регистр не различают: `"center"` и `"Center"` равнозначны.
|
||||
|
||||
```json
|
||||
"styles": {
|
||||
"шапка": {
|
||||
"font": "жирный",
|
||||
"horizontalAlignment": "Center",
|
||||
"verticalAlignment": "Center",
|
||||
"textPlacement": "Wrap",
|
||||
"backColor": "#EBEBEB"
|
||||
},
|
||||
"итог": { "font": "жирный", "topBorder": "Solid", "horizontalAlignment": "Right" }
|
||||
}
|
||||
```
|
||||
|
||||
## Цвет
|
||||
|
||||
Строка в одной из четырёх форм — это нотация самой платформы:
|
||||
|
||||
| Форма | Значение |
|
||||
|-------|----------|
|
||||
| `#RRGGBB` | RGB-hex, напр. `#FFFFC0` |
|
||||
| `style:ИмяСтиля` | Элемент стиля конфигурации или платформы, напр. `style:FormBackColor` |
|
||||
| `web:Имя` | Цвет из web-палитры, напр. `web:Gainsboro`, `web:FireBrick` |
|
||||
| `win:Имя` | Системный цвет Windows, напр. `win:ButtonText` |
|
||||
|
||||
Имя должно существовать в своей палитре — несуществующее платформа отвергнет при загрузке.
|
||||
|
||||
## Рамка
|
||||
|
||||
Пять ключей: `border` — все четыре стороны сразу, `leftBorder` / `topBorder` / `rightBorder` /
|
||||
`bottomBorder` — по отдельности. Значение одинаковое у всех:
|
||||
|
||||
| Запись | Значение |
|
||||
|--------|----------|
|
||||
| `"Solid"` | Стиль линии, ширина 1 |
|
||||
| `{ "style": "Solid", "width": 2 }` | Стиль и ширина |
|
||||
|
||||
Стили линии: `Solid`, `None`, `Dotted`, `ThinDashed`, `LargeDashed`, `ThickDashed`, `Double`.
|
||||
|
||||
Задавать стороны по отдельности можно всегда: если все четыре совпали, компилятор сам свернёт
|
||||
их в один `border` — так это хранит платформа.
|
||||
|
||||
```json
|
||||
"рамка-снизу": { "bottomBorder": "Dotted" },
|
||||
"рамка-вокруг": { "border": { "style": "Solid", "width": 2 } }
|
||||
```
|
||||
|
||||
## Колоночные раскладки (`columnSets`)
|
||||
|
||||
Группа строк может иметь собственные ширины колонок — в 1С это «индивидуальная ширина колонок».
|
||||
Документные `columns` и `columnWidths` описывают раскладку по умолчанию; дополнительные
|
||||
объявляются в `columnSets`, а область ссылается на нужную ключом `columnSet` — так же, как
|
||||
ячейка ссылается на `styles` через `style`.
|
||||
|
||||
```json
|
||||
{
|
||||
"columns": 52,
|
||||
"columnWidths": { "1": 8 },
|
||||
"columnSets": {
|
||||
"таблица": { "columns": 52, "columnWidths": { "1": 7, "2-52": 24 } }
|
||||
},
|
||||
"areas": [
|
||||
{ "name": "Шапка", "rows": [ ] },
|
||||
{ "name": "ТабличнаяЧасть", "columnSet": "таблица", "rows": [ ] }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Раскладка описывается той же парой полей, что и документная: `columns` — количество колонок
|
||||
(у раскладок оно обычно разное), `columnWidths` — ширины. Ключ словаря — имя раскладки;
|
||||
в макетах, полученных декомпиляцией, это идентификатор из исходного файла, при описании
|
||||
с нуля — любая строка.
|
||||
|
||||
Все строки области получают раскладку области, поэтому одна область не может смешивать
|
||||
раскладки. Позиции колонок (`col`, `span`) проверяются по ширине раскладки СВОЕЙ области,
|
||||
а не документной.
|
||||
|
||||
Ссылка на необъявленную раскладку → ненулевой код выхода и сообщение в stderr.
|
||||
|
||||
## Стиль колонки (`columnStyles`)
|
||||
|
||||
Колонка несёт то же оформление, что ячейка и строка. Ключи — та же грамматика диапазонов,
|
||||
что у `columnWidths`; значение — имя стиля.
|
||||
|
||||
```json
|
||||
"columnWidths": { "1": 30, "2-3": 15 },
|
||||
"columnStyles": { "1": "по-центру", "4": "скрытая" }
|
||||
```
|
||||
|
||||
Внутри `columnSets` работает тот же ключ. Ширина и стиль независимы: колонка может иметь
|
||||
только ширину, только стиль или и то, и другое.
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user