From b39da27d20e20c7a512ed20008e8aa3df9d3bd99 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 25 Apr 2026 17:57:04 +0300 Subject: [PATCH] =?UTF-8?q?docs(skd-compile):=20=D0=BE=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20presentationExpression=20=D0=B8=20appearan?= =?UTF-8?q?ce=20=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=BB=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit В DSL skd-compile уже поддерживались ключи presentationExpression и appearance в объектной форме поля DataSet, но в SKILL.md они не были задокументированы — фичи существовали де-факто, но обнаружить их можно было только чтением скрипта. Заодно зафиксирован детерминизм порядка ключей appearance: PS5.1 hashtable не сохраняет порядок вставки, из-за чего PS- и PY-рантаймы давали разный XML на одном входе. Заменено на [ordered]@{}. - SKILL.md: новый блок «Дополнительные ключи объектной формы» в разделе «Поля» - skd-compile.ps1/py: appearance = [ordered]@{} вместо @{}, версия v1.19 - tests: новый snapshot-кейс field-appearance-and-presentation, проходит на обоих рантаймах Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/skills/skd-compile/SKILL.md | 9 ++ .../skd-compile/scripts/skd-compile.ps1 | 6 +- .../skills/skd-compile/scripts/skd-compile.py | 2 +- .../field-appearance-and-presentation.json | 34 ++++++++ .../Template.xml | 87 +++++++++++++++++++ 5 files changed, 134 insertions(+), 4 deletions(-) create mode 100644 tests/skills/cases/skd-compile/field-appearance-and-presentation.json create mode 100644 tests/skills/cases/skd-compile/snapshots/field-appearance-and-presentation/Template.xml diff --git a/.claude/skills/skd-compile/SKILL.md b/.claude/skills/skd-compile/SKILL.md index 0e358a23..25c950a5 100644 --- a/.claude/skills/skd-compile/SKILL.md +++ b/.claude/skills/skd-compile/SKILL.md @@ -96,6 +96,15 @@ powershell.exe -NoProfile -File .claude/skills/skd-compile/scripts/skd-compile.p В объектной форме: `"useRestriction": { "field": true, "condition": true, "group": true, "order": true }` или `"restrict": ["noField", "noFilter"]`. +Дополнительные ключи объектной формы: +- `"presentationExpression": "<выражение>"` — что показывать вместо значения поля. Исходное значение остаётся «под капотом» для перехода/расшифровки. +- `"appearance": { "<параметр>": "<значение>" }` — оформление колонки по умолчанию (применяется во всех вариантах настроек). Ключи — параметры платформы (`ГоризонтальноеПоложение`, `МинимальнаяШирина`, `Формат`, `Текст` и т.п.). + +```json +{ "field": "Сумма", "title": "Сумма продажи", "type": "decimal(15,2)", + "appearance": { "ГоризонтальноеПоложение": "Right", "МинимальнаяШирина": "80" } } +``` + ### Вычисляемые поля (calculatedFields) Shorthand: `"Имя [Заголовок]: тип = Выражение #noField #noFilter #noGroup #noOrder"` — все части кроме имени опциональны. diff --git a/.claude/skills/skd-compile/scripts/skd-compile.ps1 b/.claude/skills/skd-compile/scripts/skd-compile.ps1 index ef2b9c29..4c77170b 100644 --- a/.claude/skills/skd-compile/scripts/skd-compile.ps1 +++ b/.claude/skills/skd-compile/scripts/skd-compile.ps1 @@ -1,4 +1,4 @@ -# skd-compile v1.18 — Compile 1C DCS from JSON +# skd-compile v1.19 — Compile 1C DCS from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$DefinitionFile, @@ -259,7 +259,7 @@ function Parse-FieldShorthand { $result = @{ dataPath = ""; field = ""; title = ""; type = "" - roles = @(); restrict = @(); appearance = @{} + roles = @(); restrict = @(); appearance = [ordered]@{} } # Extract @roles @@ -600,7 +600,7 @@ function Emit-Field { type = if ($fieldDef.type) { Resolve-TypeStr "$($fieldDef.type)" } else { "" } roles = @() restrict = @() - appearance = @{} + appearance = [ordered]@{} } # Parse role if ($fieldDef.role) { diff --git a/.claude/skills/skd-compile/scripts/skd-compile.py b/.claude/skills/skd-compile/scripts/skd-compile.py index 0352bfe7..55798a20 100644 --- a/.claude/skills/skd-compile/scripts/skd-compile.py +++ b/.claude/skills/skd-compile/scripts/skd-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# skd-compile v1.18 — Compile 1C DCS from JSON +# skd-compile v1.19 — Compile 1C DCS from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json diff --git a/tests/skills/cases/skd-compile/field-appearance-and-presentation.json b/tests/skills/cases/skd-compile/field-appearance-and-presentation.json new file mode 100644 index 00000000..399308ac --- /dev/null +++ b/tests/skills/cases/skd-compile/field-appearance-and-presentation.json @@ -0,0 +1,34 @@ +{ + "name": "appearance и presentationExpression на поле DataSet", + "params": { "outputPath": "Template.xml" }, + "input": { + "dataSets": [{ + "name": "ЖурналОшибок", + "objectName": "ЖурналОшибок", + "fields": [ + { + "field": "ТекстСообщения", + "title": "Текст сообщения", + "type": "string(150)", + "appearance": { + "МинимальнаяШирина": "100", + "РастягиватьПоГоризонтали": "true" + } + }, + { + "field": "Расшифровка", + "title": "Описание", + "type": "CatalogRef.Организации", + "presentationExpression": "ТекстСообщения", + "appearance": { + "ГоризонтальноеПоложение": "Right" + } + } + ] + }] + }, + "validatePath": "Template.xml", + "expect": { + "files": ["Template.xml"] + } +} diff --git a/tests/skills/cases/skd-compile/snapshots/field-appearance-and-presentation/Template.xml b/tests/skills/cases/skd-compile/snapshots/field-appearance-and-presentation/Template.xml new file mode 100644 index 00000000..935cc8ca --- /dev/null +++ b/tests/skills/cases/skd-compile/snapshots/field-appearance-and-presentation/Template.xml @@ -0,0 +1,87 @@ + + + + ИсточникДанных1 + Local + + + ЖурналОшибок + + ТекстСообщения + ТекстСообщения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текст сообщения</v8:content> + </v8:item> + + + xs:string + + 150 + Variable + + + + + МинимальнаяШирина + 100 + + + РастягиватьПоГоризонтали + true + + + + + Расшифровка + Расшифровка + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Описание</v8:content> + </v8:item> + + + d5p1:CatalogRef.Организации + + + + ГоризонтальноеПоложение + Right + + + ТекстСообщения + + ИсточникДанных1 + ЖурналОшибок + + + Основной + + + ru + Основной + + + + + + + + + + + + + + + +