From be74d224befd10d23bbb8fa31e28e642bafad3c4 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Thu, 16 Apr 2026 21:00:58 +0300 Subject: [PATCH] =?UTF-8?q?feat(skd-compile):=20dataParameters=20auto=20?= =?UTF-8?q?=E2=80=94=20=D0=BD=D0=B0=D1=81=D0=BB=D0=B5=D0=B4=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20variant=20=D0=B4=D0=BB=D1=8F=20StandardPer?= =?UTF-8?q?iod?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Для параметров типа StandardPeriod в режиме "dataParameters": "auto" эмитируется с variant из дефолта параметра (Custom, если не задан) — как это делает 1C Designer при сохранении SettingsParameterValue для периодов. Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/skills/skd-compile/SKILL.md | 2 +- .../skd-compile/scripts/skd-compile.ps1 | 17 ++- .../skills/skd-compile/scripts/skd-compile.py | 19 ++- .../skd-compile/auto-data-parameters.json | 26 ++++ .../auto-data-parameters/Template.xml | 132 ++++++++++++++++++ 5 files changed, 191 insertions(+), 5 deletions(-) create mode 100644 tests/skills/cases/skd-compile/auto-data-parameters.json create mode 100644 tests/skills/cases/skd-compile/snapshots/auto-data-parameters/Template.xml diff --git a/.claude/skills/skd-compile/SKILL.md b/.claude/skills/skd-compile/SKILL.md index 6d958f4a..1b1cc36b 100644 --- a/.claude/skills/skd-compile/SKILL.md +++ b/.claude/skills/skd-compile/SKILL.md @@ -142,7 +142,7 @@ Shorthand: `"Имя [Заголовок]: тип = значение @флаги" } ``` -В варианте настроек `"dataParameters": "auto"` автоматически генерирует записи для всех не-hidden параметров с `userSettingID`. +В варианте настроек `"dataParameters": "auto"` автоматически генерирует записи для всех не-hidden параметров с `userSettingID`. Для `StandardPeriod` вариант периода наследуется из дефолта параметра (`Custom`, если не задан). ### Фильтры — shorthand diff --git a/.claude/skills/skd-compile/scripts/skd-compile.ps1 b/.claude/skills/skd-compile/scripts/skd-compile.ps1 index 37ed248e..c837327c 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.14 — Compile 1C DCS from JSON +# skd-compile v1.15 — Compile 1C DCS from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$DefinitionFile, @@ -2170,6 +2170,21 @@ function Emit-SettingsVariants { $dpItem | Add-Member -NotePropertyName "parameter" -NotePropertyValue $ap.name $dpItem | Add-Member -NotePropertyName "use" -NotePropertyValue $false $dpItem | Add-Member -NotePropertyName "userSettingID" -NotePropertyValue "auto" + # For StandardPeriod emit with variant inherited from + # the parameter default (Custom if none) — matches how 1C Designer + # persists SettingsParameterValue for period parameters. + if ($ap.type -eq 'StandardPeriod') { + $variant = 'Custom' + $av = $ap.value + if ($null -ne $av) { + if (($av -is [PSCustomObject] -or $av -is [hashtable]) -and $av.variant) { + $variant = "$($av.variant)" + } elseif ("$av") { + $variant = "$av" + } + } + $dpItem | Add-Member -NotePropertyName "value" -NotePropertyValue @{ variant = $variant } + } $autoDP += $dpItem } } diff --git a/.claude/skills/skd-compile/scripts/skd-compile.py b/.claude/skills/skd-compile/scripts/skd-compile.py index 26d2cf68..4f019af7 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.14 — Compile 1C DCS from JSON +# skd-compile v1.15 — Compile 1C DCS from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json @@ -1819,11 +1819,24 @@ def emit_settings_variants(lines, defn): auto_dp = [] for ap in _all_params: if not ap['hidden']: - auto_dp.append({ + item = { 'parameter': ap['name'], 'use': False, 'userSettingID': 'auto', - }) + } + # For StandardPeriod emit with variant inherited + # from the parameter default (Custom if none) — matches how + # 1C Designer persists SettingsParameterValue for period params. + if ap.get('type') == 'StandardPeriod': + variant = 'Custom' + av = ap.get('value') + if av is not None: + if isinstance(av, dict) and av.get('variant'): + variant = str(av['variant']) + elif str(av): + variant = str(av) + item['value'] = {'variant': variant} + auto_dp.append(item) if auto_dp: emit_data_parameters(lines, auto_dp, '\t\t\t') elif s.get('dataParameters'): diff --git a/tests/skills/cases/skd-compile/auto-data-parameters.json b/tests/skills/cases/skd-compile/auto-data-parameters.json new file mode 100644 index 00000000..edac3b7a --- /dev/null +++ b/tests/skills/cases/skd-compile/auto-data-parameters.json @@ -0,0 +1,26 @@ +{ + "name": "dataParameters: auto — наследование variant для StandardPeriod", + "params": { "outputPath": "Template.xml" }, + "input": { + "dataSets": [{ + "query": "ВЫБРАТЬ 1 КАК Поле", + "fields": ["Поле: число"] + }], + "parameters": [ + "Период: СтандартныйПериод = LastMonth @autoDates", + "ПериодБезДефолта: СтандартныйПериод", + "Флаг: boolean = true" + ], + "settingsVariants": [{ + "name": "Основной", + "settings": { + "structure": "details", + "dataParameters": "auto" + } + }] + }, + "validatePath": "Template.xml", + "expect": { + "files": ["Template.xml"] + } +} diff --git a/tests/skills/cases/skd-compile/snapshots/auto-data-parameters/Template.xml b/tests/skills/cases/skd-compile/snapshots/auto-data-parameters/Template.xml new file mode 100644 index 00000000..be21b0a0 --- /dev/null +++ b/tests/skills/cases/skd-compile/snapshots/auto-data-parameters/Template.xml @@ -0,0 +1,132 @@ + + + + ИсточникДанных1 + Local + + + НаборДанных1 + + Поле + Поле + + decimal + + + ИсточникДанных1 + ВЫБРАТЬ 1 КАК Поле + + + Период + + v8:StandardPeriod + + + LastMonth + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + ДатаНачала + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Начало периода</v8:content> + </v8:item> + + + xs:dateTime + + Date + + + 0001-01-01T00:00:00 + true + &Период.ДатаНачала + + + ДатаОкончания + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Конец периода</v8:content> + </v8:item> + + + xs:dateTime + + Date + + + 0001-01-01T00:00:00 + true + &Период.ДатаОкончания + + + ПериодБезДефолта + + v8:StandardPeriod + + + + Флаг + + xs:boolean + + true + + + Основной + + + ru + Основной + + + + + + false + Период + + LastMonth + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + UUID-001 + + + false + ПериодБезДефолта + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + UUID-002 + + + false + Флаг + UUID-003 + + + + + + + + + + + + +