From bccdf93094dd39391ae42a384d6e3091a1505ab1 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Fri, 5 Jun 2026 11:38:00 +0300 Subject: [PATCH] =?UTF-8?q?feat(form-decompile):=20form-level=20/ExcludedCommand=20(=D0=BA=D0=BB=D0=B0=D1=81=D1=82=D0=B5?= =?UTF-8?q?=D1=80=20ExcludedCommand)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Декомпилятор читал только внутри Table-элемента; на корне формы (
…) пропускал → excludedCommands терялись (LOST=207 в корпусе 2.17). Компилятор и DSL уже поддерживали excludedCommands на top-level — чистый баг декомпиляции (класс 1). Читаем корневой CommandSet в $dsl["excludedCommands"], порядок по spec (title → properties → excludedCommands → events). Зеркало PY не нужно (decompiler.py отложен), корпус не нужен (читаем поддерживаемую фичу). Валидация: ФормаЗаписи + ФормаЭлемента раундтрип diff→match. Co-Authored-By: Claude Opus 4.8 --- .../skills/form-decompile/scripts/form-decompile.ps1 | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1 index 324b0102..40853d6c 100644 --- a/.claude/skills/form-decompile/scripts/form-decompile.ps1 +++ b/.claude/skills/form-decompile/scripts/form-decompile.ps1 @@ -1,4 +1,4 @@ -# form-decompile v0.9 — Decompile 1C managed Form.xml to JSON DSL (draft) +# form-decompile v0.10 — Decompile 1C managed Form.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью. param( @@ -562,6 +562,14 @@ foreach ($pn in $KNOWN_FORM_PROPS) { if ($dsl.Contains('title') -and $props.Contains('autoTitle') -and $props['autoTitle'] -eq $false) { $props.Remove('autoTitle') } if ($props.Count -gt 0) { $dsl['properties'] = $props } +# excludedCommands (form-level ) +$csForm = $root.SelectSingleNode("lf:CommandSet", $ns) +if ($csForm) { + $excForm = New-Object System.Collections.ArrayList + foreach ($ec in @($csForm.SelectNodes("lf:ExcludedCommand", $ns))) { [void]$excForm.Add($ec.InnerText) } + if ($excForm.Count -gt 0) { $dsl['excludedCommands'] = @($excForm) } +} + # events (form-level) $evForm = Get-Events $root $null if ($evForm) {