From eee5aaafd396ad19439306653a4dca373a6c7c2f Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Fri, 22 May 2026 19:34:32 +0300 Subject: [PATCH] =?UTF-8?q?feat(skd-compile):=20useInXxx=20=D0=B8=20use=3D?= =?UTF-8?q?false=20=D0=BD=D0=B0=20conditionalAppearance=20item?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Расширение DSL для бит-перфект roundtrip на условном оформлении: - use: false — отключённое правило (эмитится в начале item) - useInDontUse: array — список областей где правило НЕ применяется (\"group\", \"hierarchicalGroup\", \"overall\", \"fieldsHeader\", \"header\", \"parameters\", \"filter\", \"resourceFieldsHeader\", \"overallHeader\", \"overallResourceFieldsHeader\") Compile эмитит DontUse и т.п. в платформенном порядке. Семантика: \"useIn\" в платформе — это белый список применения правила; DSL хранит инверсный список (что отключено) — короче для редких ограничений. Co-Authored-By: Claude Opus 4.7 --- .../skd-compile/scripts/skd-compile.ps1 | 23 ++++++++++++++++++- .../skills/skd-compile/scripts/skd-compile.py | 16 ++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/.claude/skills/skd-compile/scripts/skd-compile.ps1 b/.claude/skills/skd-compile/scripts/skd-compile.ps1 index 6ff69a35..8e31fe34 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.50 — Compile 1C DCS from JSON +# skd-compile v1.51 — Compile 1C DCS from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$DefinitionFile, @@ -2192,6 +2192,11 @@ function Emit-ConditionalAppearance { foreach ($ca in $items) { X "$indent`t" + # use=false — отключённое правило (эмитим до selection — XML-порядок) + if ($ca.use -eq $false) { + X "$indent`t`tfalse" + } + # Selection (which fields to apply to; empty = all) if ($ca.selection -and $ca.selection.Count -gt 0) { X "$indent`t`t" @@ -2234,6 +2239,22 @@ function Emit-ConditionalAppearance { X "$indent`t`t$(Esc-Xml $uid)" } + # useInXxx — список областей где правило НЕ применяется (DontUse). + # Порядок имитирует платформенный (group → hierarchicalGroup → overall → ...). + if ($ca.useInDontUse -and $ca.useInDontUse.Count -gt 0) { + $useInOrder = @('group','hierarchicalGroup','overall', + 'fieldsHeader','header','parameters','filter', + 'resourceFieldsHeader','overallHeader','overallResourceFieldsHeader') + $set = @{} + foreach ($n in $ca.useInDontUse) { $set["$n"] = $true } + foreach ($n in $useInOrder) { + if ($set.ContainsKey($n)) { + $tag = "useIn" + ($n.Substring(0,1).ToUpper()) + ($n.Substring(1)) + X "$indent`t`tDontUse" + } + } + } + X "$indent`t" } if ($null -ne $blockViewMode) { diff --git a/.claude/skills/skd-compile/scripts/skd-compile.py b/.claude/skills/skd-compile/scripts/skd-compile.py index f8ddc6ff..d42f46cd 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.50 — Compile 1C DCS from JSON +# skd-compile v1.51 — Compile 1C DCS from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json @@ -1836,6 +1836,9 @@ def emit_conditional_appearance(lines, items, indent, block_view_mode=None): for ca in items: lines.append(f'{indent}\t') + if ca.get('use') is False: + lines.append(f'{indent}\t\tfalse') + # Selection if ca.get('selection') and len(ca['selection']) > 0: lines.append(f'{indent}\t\t') @@ -1870,6 +1873,17 @@ def emit_conditional_appearance(lines, items, indent, block_view_mode=None): uid = new_uuid() if str(ca['userSettingID']) == 'auto' else str(ca['userSettingID']) lines.append(f'{indent}\t\t{esc_xml(uid)}') + # useInXxx — список областей где правило НЕ применяется (DontUse) + if ca.get('useInDontUse'): + use_in_order = ['group', 'hierarchicalGroup', 'overall', + 'fieldsHeader', 'header', 'parameters', 'filter', + 'resourceFieldsHeader', 'overallHeader', 'overallResourceFieldsHeader'] + s = set(ca['useInDontUse']) + for n in use_in_order: + if n in s: + tag = 'useIn' + n[0].upper() + n[1:] + lines.append(f'{indent}\t\tDontUse') + lines.append(f'{indent}\t') if block_view_mode is not None: lines.append(f'{indent}\t{esc_xml(str(block_view_mode))}')