From 3729b63b89f24cca94aeacbb1ce2bec4465bc910 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Tue, 21 Apr 2026 12:24:22 +0300 Subject: [PATCH] =?UTF-8?q?feat(skd-compile):=20@autoDates=20=E2=80=94=20?= =?UTF-8?q?=D0=B4=D0=B5=D1=84=D0=BE=D0=BB=D1=82=D1=8B=20use=3DAlways=20+?= =?UTF-8?q?=20denyIncompleteValues=3Dtrue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Производные &НачалоПериода/&КонецПериода требуют заполненный период, поэтому сам параметр теперь по умолчанию получает use=Always и denyIncompleteValues=true. В объектной форме явные значения перекрывают. Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/skills/skd-compile/SKILL.md | 2 +- .../skd-compile/scripts/skd-compile.ps1 | 24 +++++++++++++++---- .../skills/skd-compile/scripts/skd-compile.py | 23 +++++++++++++++--- .../auto-data-parameters/Template.xml | 2 ++ .../snapshots/full-example/Template.xml | 2 ++ .../snapshots/with-filters/Template.xml | 2 ++ .../snapshots/with-parameters/Template.xml | 2 ++ 7 files changed, 48 insertions(+), 9 deletions(-) diff --git a/.claude/skills/skd-compile/SKILL.md b/.claude/skills/skd-compile/SKILL.md index c98ca4d7..a6e7fa1a 100644 --- a/.claude/skills/skd-compile/SKILL.md +++ b/.claude/skills/skd-compile/SKILL.md @@ -119,7 +119,7 @@ Shorthand: `"Имя [Заголовок]: тип = Выражение #noField # Shorthand: `"Имя [Заголовок]: тип = значение @флаги"`. `[Заголовок]` опциональный — добавляет `` (LocalStringType). Флаги shorthand: -- `@autoDates` — добавляет к параметру StandardPeriod пару дат `НачалоПериода`/`КонецПериода`, вычисляемых из него. Используй их в тексте запроса как `&НачалоПериода`/`&КонецПериода`; пользователь выбирает только сам период. +- `@autoDates` — добавляет к параметру StandardPeriod пару дат `НачалоПериода`/`КонецПериода`, вычисляемых из него. Используй их в тексте запроса как `&НачалоПериода`/`&КонецПериода`; пользователь выбирает только сам период. По умолчанию сам параметр получает `use=Always` и `denyIncompleteValues=true` (чтобы производные даты всегда были заполнены); в объектной форме можно явно переопределить. - `@valueList` — `<valueListAllowed>true</valueListAllowed>` — разрешает передавать список значений - `@hidden` — скрытый параметр: `availableAsField=false` + исключается из `"dataParameters": "auto"` diff --git a/.claude/skills/skd-compile/scripts/skd-compile.ps1 b/.claude/skills/skd-compile/scripts/skd-compile.ps1 index 58e83992..ef2b9c29 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.17 — Compile 1C DCS from JSON +# skd-compile v1.18 — Compile 1C DCS from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$DefinitionFile, @@ -1006,13 +1006,18 @@ function Emit-SingleParam { } # DenyIncompleteValues - if ($p -isnot [string] -and $p.denyIncompleteValues -eq $true) { + $deny = $parsed.denyIncompleteValues -eq $true -or ( + $null -ne $p -and $p -isnot [string] -and $p.denyIncompleteValues -eq $true) + if ($deny) { X "`t`t<denyIncompleteValues>true</denyIncompleteValues>" } - # Use - if ($p -isnot [string] -and $p.use) { - X "`t`t<use>$(Esc-Xml "$($p.use)")</use>" + # Use — object form wins, else parsed (set by @autoDates default) + $useVal = $null + if ($null -ne $p -and $p -isnot [string] -and $p.use) { $useVal = "$($p.use)" } + elseif ($parsed.use) { $useVal = "$($parsed.use)" } + if ($useVal) { + X "`t`t<use>$(Esc-Xml $useVal)</use>" } X "`t</parameter>" @@ -1039,6 +1044,15 @@ function Emit-Parameters { if ($p.autoDates -eq $true) { $parsed.autoDates = $true } } + # @autoDates implies use=Always + denyIncompleteValues=true by default + # (derived &НачалоПериода/&КонецПериода need a populated period). + # Explicit values in object form override these defaults. + if ($parsed.autoDates) { + $isObj = ($p -isnot [string]) -and ($null -ne $p) + if (-not ($isObj -and $null -ne $p.use)) { $parsed.use = 'Always' } + if (-not ($isObj -and $null -ne $p.denyIncompleteValues)) { $parsed.denyIncompleteValues = $true } + } + Emit-SingleParam -p $p -parsed $parsed # Track parameter for auto dataParameters diff --git a/.claude/skills/skd-compile/scripts/skd-compile.py b/.claude/skills/skd-compile/scripts/skd-compile.py index f1dc2157..0352bfe7 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.17 — Compile 1C DCS from JSON +# skd-compile v1.18 — Compile 1C DCS from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json @@ -867,12 +867,19 @@ def emit_single_param(lines, p, parsed): lines.append('\t\t</availableValue>') # DenyIncompleteValues - if p is not None and not isinstance(p, str) and p.get('denyIncompleteValues') is True: + deny = parsed.get('denyIncompleteValues') is True or ( + p is not None and not isinstance(p, str) and p.get('denyIncompleteValues') is True) + if deny: lines.append('\t\t<denyIncompleteValues>true</denyIncompleteValues>') # Use + use_val = None if p is not None and not isinstance(p, str) and p.get('use'): - lines.append(f'\t\t<use>{esc_xml(str(p["use"]))}</use>') + use_val = str(p['use']) + elif parsed.get('use'): + use_val = str(parsed['use']) + if use_val: + lines.append(f'\t\t<use>{esc_xml(use_val)}</use>') lines.append('\t</parameter>') @@ -906,6 +913,16 @@ def emit_parameters(lines, defn): if p.get('autoDates') is True: parsed['autoDates'] = True + # @autoDates implies use=Always + denyIncompleteValues=true by default + # (derived &НачалоПериода/&КонецПериода need a populated period). + # Explicit values in object form override these defaults. + if parsed.get('autoDates'): + is_obj = p is not None and not isinstance(p, str) + if not (is_obj and p.get('use') is not None): + parsed['use'] = 'Always' + if not (is_obj and p.get('denyIncompleteValues') is not None): + parsed['denyIncompleteValues'] = True + emit_single_param(lines, p, parsed) # Track parameter for auto dataParameters 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 index a6771bb2..c1f7b2ca 100644 --- a/tests/skills/cases/skd-compile/snapshots/auto-data-parameters/Template.xml +++ b/tests/skills/cases/skd-compile/snapshots/auto-data-parameters/Template.xml @@ -33,6 +33,8 @@ <v8:startDate>0001-01-01T00:00:00</v8:startDate> <v8:endDate>0001-01-01T00:00:00</v8:endDate> </value> + <denyIncompleteValues>true</denyIncompleteValues> + <use>Always</use> </parameter> <parameter> <name>НачалоПериода</name> diff --git a/tests/skills/cases/skd-compile/snapshots/full-example/Template.xml b/tests/skills/cases/skd-compile/snapshots/full-example/Template.xml index 16c36aac..2662700b 100644 --- a/tests/skills/cases/skd-compile/snapshots/full-example/Template.xml +++ b/tests/skills/cases/skd-compile/snapshots/full-example/Template.xml @@ -68,6 +68,8 @@ <v8:startDate>0001-01-01T00:00:00</v8:startDate> <v8:endDate>0001-01-01T00:00:00</v8:endDate> </value> + <denyIncompleteValues>true</denyIncompleteValues> + <use>Always</use> </parameter> <parameter> <name>НачалоПериода</name> diff --git a/tests/skills/cases/skd-compile/snapshots/with-filters/Template.xml b/tests/skills/cases/skd-compile/snapshots/with-filters/Template.xml index 08b08c6f..a1a7f051 100644 --- a/tests/skills/cases/skd-compile/snapshots/with-filters/Template.xml +++ b/tests/skills/cases/skd-compile/snapshots/with-filters/Template.xml @@ -63,6 +63,8 @@ <v8:startDate>0001-01-01T00:00:00</v8:startDate> <v8:endDate>0001-01-01T00:00:00</v8:endDate> </value> + <denyIncompleteValues>true</denyIncompleteValues> + <use>Always</use> </parameter> <parameter> <name>НачалоПериода</name> diff --git a/tests/skills/cases/skd-compile/snapshots/with-parameters/Template.xml b/tests/skills/cases/skd-compile/snapshots/with-parameters/Template.xml index cb009578..496f1606 100644 --- a/tests/skills/cases/skd-compile/snapshots/with-parameters/Template.xml +++ b/tests/skills/cases/skd-compile/snapshots/with-parameters/Template.xml @@ -60,6 +60,8 @@ <v8:startDate>0001-01-01T00:00:00</v8:startDate> <v8:endDate>0001-01-01T00:00:00</v8:endDate> </value> + <denyIncompleteValues>true</denyIncompleteValues> + <use>Always</use> </parameter> <parameter> <name>НачалоПериода</name>