mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-11 16:34:57 +03:00
feat(skd-compile): compact AreaTemplate DSL, fix dataPath and presentation fallback
- Fix empty dataPath when field is specified as object { field, title }
- Add title to presentation fallback chain: presentation → title → name
- Add compact DSL for AreaTemplate: rows/widths/style instead of raw XML
- Built-in style presets: header, data, subheader, total
- User-defined presets via skd-styles.json (project-level overrides)
- Support vertical merge ("|"), parameters ("{Name}"), static text, null cells
- Update SKILL.md, skd-dsl-spec.md, skd-guide.md with template DSL docs
- Add examples/skd-styles.json with all supported keys
- Bump version v1.1 → v1.2
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
+94
-2
@@ -712,9 +712,99 @@ XML-маппинг — по `<group>` на каждый элемент:
|
||||
|
||||
## 10. Макеты и привязки (templates, groupTemplates)
|
||||
|
||||
Редко используются. Поддерживаются в объектной форме, близкой к XML.
|
||||
### templates — компактный DSL (рекомендуемый)
|
||||
|
||||
### templates
|
||||
Табличное описание шаблона вывода. Содержимое задаётся через `rows`, оформление — через именованный пресет `style`.
|
||||
|
||||
```json
|
||||
"templates": [
|
||||
{
|
||||
"name": "Макет1",
|
||||
"style": "header",
|
||||
"widths": [36, 33, 16, 17],
|
||||
"minHeight": 24.75,
|
||||
"rows": [
|
||||
["Виды кассы", "Валюта", "Остаток на начало\nпериода", "Остаток на\nконец\nпериода"],
|
||||
["|", "|", "|", "|"],
|
||||
["К1", "К2", "К3", "К4"]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Макет2",
|
||||
"style": "data",
|
||||
"widths": [36, 33, 16, 17],
|
||||
"rows": [["{ВидКассы}", "{Валюта}", "{ОстатокНачало}", "{ОстатокКонец}"]],
|
||||
"parameters": [
|
||||
{ "name": "ВидКассы", "expression": "Представление(СчетМеждународногоУчета)" },
|
||||
{ "name": "ОстатокНачало", "expression": "ОстатокНаНачалоПериода" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Макет3",
|
||||
"style": "total",
|
||||
"widths": [36, 33, 16, 17],
|
||||
"rows": [["Итого", "Х", "{ОстатокНачало}", "{ОстатокКонец}"]],
|
||||
"parameters": [
|
||||
{ "name": "ОстатокНачало", "expression": "ОстатокНаНачалоПериода" }
|
||||
]
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
#### Свойства шаблона
|
||||
|
||||
| Свойство | Описание |
|
||||
|----------|----------|
|
||||
| `name` | Имя макета (ссылаются groupTemplate) |
|
||||
| `rows` | Массив строк; каждая строка — массив ячеек |
|
||||
| `style` | Именованный пресет оформления (по умолчанию `"data"`) |
|
||||
| `widths` | Массив ширин колонок (применяется ко всем строкам) |
|
||||
| `minHeight` | Минимальная высота первой строки (для шапок) |
|
||||
| `parameters` | Параметры макета — выражения для подстановки |
|
||||
|
||||
#### Синтаксис ячеек
|
||||
|
||||
| Значение | Описание |
|
||||
|----------|----------|
|
||||
| `"текст"` | Статический текст (`v8:LocalStringType`) |
|
||||
| `"{Имя}"` | Параметр шаблона (`dcscor:Parameter`), задаётся через `parameters` |
|
||||
| `"\|"` | Вертикальное объединение с ячейкой выше |
|
||||
| `null` | Пустая ячейка (без содержимого) |
|
||||
|
||||
#### Встроенные пресеты стилей
|
||||
|
||||
| Пресет | Фон | Шрифт | Выравнивание | Перенос | Рамки |
|
||||
|--------|-----|-------|-------------|---------|-------|
|
||||
| `header` | ReportHeaderBackColor | Arial 10 | Center | да | Solid 1px |
|
||||
| `data` | ReportGroup1BackColor | Arial 10 | — | нет | Solid 1px |
|
||||
| `subheader` | — | Arial 10 | Center | да | Solid 1px |
|
||||
| `total` | — | Arial 10 | — | нет | Solid 1px |
|
||||
|
||||
#### Пользовательские пресеты (skd-styles.json)
|
||||
|
||||
Файл `skd-styles.json` в директории определения или в корне проекта. Переопределяет встроенные пресеты или добавляет новые:
|
||||
|
||||
```json
|
||||
{
|
||||
"header": {
|
||||
"bgColor": "style:ReportHeaderBackColor",
|
||||
"borderColor": "style:ReportLineColor",
|
||||
"bold": true
|
||||
},
|
||||
"myStyle": {
|
||||
"font": "Arial", "fontSize": 12,
|
||||
"bgColor": "#FFE0E0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Допустимые ключи: `font`, `fontSize`, `bold`, `italic`, `hAlign`, `vAlign`, `wrap`, `bgColor`, `textColor`, `borderColor`, `borders`. Недостающие ключи берутся из пресета `data`.
|
||||
|
||||
Формат цветов: `"style:ИмяСтиля"` (ссылка на стиль платформы) или `"#RRGGBB"` (прямой цвет).
|
||||
|
||||
### templates — raw XML (fallback)
|
||||
|
||||
Для нестандартных случаев — raw XML вставляется как есть:
|
||||
|
||||
```json
|
||||
"templates": [
|
||||
@@ -728,6 +818,8 @@ XML-маппинг — по `<group>` на каждый элемент:
|
||||
]
|
||||
```
|
||||
|
||||
Детект: если есть `rows` — используется компактный DSL, иначе — raw XML из `template`.
|
||||
|
||||
### groupTemplates
|
||||
|
||||
```json
|
||||
|
||||
@@ -100,6 +100,40 @@
|
||||
- **structure shorthand**: `"Поле1 > Поле2 > details"` — `>` разделяет уровни группировки
|
||||
- **conditionalAppearance**: условное оформление с автоопределением типов значений (Color, Boolean, LocalStringType)
|
||||
|
||||
### Шаблоны вывода — компактный DSL
|
||||
|
||||
Для отчётов с фиксированным оформлением (ФСД, ведомости) — табличное описание вместо raw XML:
|
||||
|
||||
```json
|
||||
"templates": [
|
||||
{
|
||||
"name": "Макет1", "style": "header",
|
||||
"widths": [36, 33, 16, 17], "minHeight": 24.75,
|
||||
"rows": [
|
||||
["Виды кассы", "Валюта", "Остаток на начало\nпериода", "Остаток на конец периода"],
|
||||
["|", "|", "|", "|"],
|
||||
["К1", "К2", "К3", "К4"]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Макет2", "style": "data",
|
||||
"widths": [36, 33, 16, 17],
|
||||
"rows": [["{ВидКассы}", "{Валюта}", "{Остаток}", "{ОстатокКонец}"]],
|
||||
"parameters": [
|
||||
{ "name": "ВидКассы", "expression": "Представление(Счет)" }
|
||||
]
|
||||
}
|
||||
],
|
||||
"groupTemplates": [
|
||||
{ "groupField": "Счет", "templateType": "GroupHeader", "template": "Макет1" },
|
||||
{ "groupField": "Счет", "templateType": "Header", "template": "Макет2" }
|
||||
]
|
||||
```
|
||||
|
||||
Синтаксис ячеек: `"текст"` — статика, `"{Имя}"` — параметр, `"|"` — объединение с ячейкой выше, `null` — пустая.
|
||||
|
||||
Встроенные стили: `header` (фон, центр, перенос), `data` (фон группы), `subheader` (без фона, центр), `total` (без фона). Все — Arial 10, рамки Solid 1px, цвета через стили платформы. Пользовательские стили — через `skd-styles.json` в директории проекта.
|
||||
|
||||
### Объектная форма
|
||||
|
||||
Все секции поддерживают полную объектную форму для сложных случаев (title, appearance, role с выражениями, userSettingID, userSettingPresentation, conditionalAppearance, группы фильтров And/Or/Not и т.д.). Подробности — в [спецификации SKD DSL](skd-dsl-spec.md).
|
||||
|
||||
Reference in New Issue
Block a user