From a7d5c461765b0e2806835264f1a864faec0a4c50 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Fri, 22 May 2026 18:05:27 +0300 Subject: [PATCH] =?UTF-8?q?feat(skd):=20use=3Dfalse=20=D0=BD=D0=B0=20selec?= =?UTF-8?q?tion=20items?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SelectedItemField и SelectedItemAuto могут иметь false — отключённое поле выборки. Раньше игнорировалось при roundtrip. DSL расширения: - selection item object form: { field, use: false, title?, viewMode? } - новый объект для отключённого Auto: { auto: true, use: false } Decompile переходит в object form если есть use=false (помимо title и viewMode); compile эмитит false в начале item (XML-порядок). Co-Authored-By: Claude Opus 4.7 --- .../skills/skd-compile/scripts/skd-compile.ps1 | 14 ++++++++++++-- .../skills/skd-compile/scripts/skd-compile.py | 13 +++++++++++-- .../skd-decompile/scripts/skd-decompile.ps1 | 16 +++++++++++++--- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/.claude/skills/skd-compile/scripts/skd-compile.ps1 b/.claude/skills/skd-compile/scripts/skd-compile.ps1 index 69c975ee..4efb3e45 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.45 — Compile 1C DCS from JSON +# skd-compile v1.46 — Compile 1C DCS from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$DefinitionFile, @@ -1884,6 +1884,13 @@ function Emit-SelectionItem { } return } + # Object form: { auto: true, use: false } — отключённый Auto в selection + if ($item.auto -eq $true) { + X "$indent" + if ($item.use -eq $false) { X "$indent`tfalse" } + X "$indent" + return + } if ($item.folder -or (Has-JsonProp $item 'folder')) { X "$indent" # Optional на folder (редкий случай, для round-trip-целостности) @@ -1898,8 +1905,11 @@ function Emit-SelectionItem { X "$indent" return } - # field with optional title + # field with optional title / use=false / viewMode X "$indent" + if ($item.use -eq $false) { + X "$indent`tfalse" + } X "$indent`t$(Esc-Xml "$($item.field)")" if ($item.title) { Emit-MLText -tag "dcsset:lwsTitle" -text $item.title -indent "$indent`t" -NoXsiType diff --git a/.claude/skills/skd-compile/scripts/skd-compile.py b/.claude/skills/skd-compile/scripts/skd-compile.py index 0b79ceb7..93fbd3fb 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.45 — Compile 1C DCS from JSON +# skd-compile v1.46 — Compile 1C DCS from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json @@ -1570,6 +1570,13 @@ def emit_selection_item(lines, item, indent): lines.append(f'{indent}\t{esc_xml(item)}') lines.append(f'{indent}') return + # Object form: { auto: true, use: false } — отключённый Auto в selection + if item.get('auto') is True: + lines.append(f'{indent}') + if item.get('use') is False: + lines.append(f'{indent}\tfalse') + lines.append(f'{indent}') + return if 'folder' in item: lines.append(f'{indent}') if item.get('field'): @@ -1580,8 +1587,10 @@ def emit_selection_item(lines, item, indent): lines.append(f'{indent}\tAuto') lines.append(f'{indent}') return - # field with optional title + # field with optional title / use=false / viewMode lines.append(f'{indent}') + if item.get('use') is False: + lines.append(f'{indent}\tfalse') lines.append(f'{indent}\t{esc_xml(str(item["field"]))}') if item.get('title'): emit_mltext(lines, f'{indent}\t', 'dcsset:lwsTitle', item['title'], no_xsi_type=True) diff --git a/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 b/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 index 370cf53b..43236bf3 100644 --- a/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 +++ b/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 @@ -1,4 +1,4 @@ -# skd-decompile v0.30 — Decompile 1C DCS Template.xml to JSON DSL (draft) +# skd-decompile v0.31 — Decompile 1C DCS Template.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -1374,14 +1374,24 @@ function Build-SelectionItem { if ($fieldEl) { return 'Auto' } } switch ($xt) { - 'SelectedItemAuto' { return 'Auto' } + 'SelectedItemAuto' { + # Auto может иметь false — отключённый Auto-элемент в selection. + $useV = Get-Text $item "dcsset:use" + if ($useV -eq 'false') { + return [ordered]@{ auto = $true; use = $false } + } + return 'Auto' + } 'SelectedItemField' { $fName = Get-Text $item "dcsset:field" $titleNode = $item.SelectSingleNode("dcsset:lwsTitle", $ns) $title = Get-MLText $titleNode $vmN = $item.SelectSingleNode("dcsset:viewMode", $ns) - if ($title -or $vmN) { + $useV = Get-Text $item "dcsset:use" + $useFalse = ($useV -eq 'false') + if ($title -or $vmN -or $useFalse) { $obj = [ordered]@{ field = $fName } + if ($useFalse) { $obj['use'] = $false } if ($title) { $obj['title'] = $title } if ($vmN) { $obj['viewMode'] = $vmN.InnerText } return $obj