From dd32d2a6ca6c44f67bc611b1ed2d75251866f93d Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Fri, 12 Jun 2026 22:30:15 +0300 Subject: [PATCH] =?UTF-8?q?feat(form-decompile):=20CustomSettingsFolder=20?= =?UTF-8?q?=E2=80=94=20=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=B0=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D1=81=D0=BA=D0=B8=D1=85=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B5=D0=BA=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D1=89=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Форменное свойство формы отчёта со СКД — имя группы, куда генерируются пользовательские настройки компоновщика (1С: «Группа пользовательских настроек»). Декомпилятор не ловил → терялось (23 формы, напр. ИсторияРазмераПриложения). Декомпилятор-only: +CustomSettingsFolder в KNOWN_FORM_PROPS. Компилятор уже эмитит (emit_properties авто-PascalCase). Значение: имя группы (18) или N: ссылка по id (5, verbatim — как уже принятый GroupList). Ключ customSettingsFolder. Выборка 23 формы: match 23/23, CustomSettingsFolder-потерь 0. Валидация раундтрипом (decompiler-only). Регресс не затронут (только новый захват). Co-Authored-By: Claude Opus 4.8 (1M context) --- .claude/skills/form-decompile/scripts/form-decompile.ps1 | 4 ++-- docs/form-dsl-spec.md | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1 index 51d3707f..460d5a0a 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.120 — Decompile 1C managed Form.xml to JSON DSL (draft) +# form-decompile v0.121 — Decompile 1C managed Form.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью. param( @@ -2437,7 +2437,7 @@ $titleNode = $root.SelectSingleNode("lf:Title", $ns) if ($titleNode) { $t = Get-LangText $titleNode; if ($null -ne $t) { $dsl['title'] = $t } } # properties (прямые скаляры под
, PascalCase → camelCase) -$KNOWN_FORM_PROPS = @('AutoTitle','ReportResult','DetailsData','ReportFormType','AutoShowState','ReportResultViewMode','ViewModeApplicationOnSetReportResult','WindowOpeningMode','CommandBarLocation','SaveDataInSettings','AutoSaveDataInSettings','AutoTime','UsePostingMode','RepostOnWrite','AutoURL','AutoFillCheck','Customizable','EnterKeyBehavior','VerticalScroll','Width','Height','Group','UseForFoldersAndItems','SaveWindowSettings','ScalingMode','VerticalSpacing','VariantAppearance','ShowCloseButton','HorizontalAlign','ChildrenAlign','ShowTitle','ConversationsRepresentation','CollapseItemsByImportanceVariant','GroupList','ChildItemsWidth','VerticalAlign','HorizontalSpacing') +$KNOWN_FORM_PROPS = @('AutoTitle','ReportResult','DetailsData','ReportFormType','AutoShowState','ReportResultViewMode','ViewModeApplicationOnSetReportResult','WindowOpeningMode','CommandBarLocation','SaveDataInSettings','AutoSaveDataInSettings','AutoTime','UsePostingMode','RepostOnWrite','AutoURL','AutoFillCheck','Customizable','EnterKeyBehavior','VerticalScroll','Width','Height','Group','UseForFoldersAndItems','SaveWindowSettings','ScalingMode','VerticalSpacing','VariantAppearance','ShowCloseButton','HorizontalAlign','ChildrenAlign','ShowTitle','ConversationsRepresentation','CollapseItemsByImportanceVariant','GroupList','ChildItemsWidth','VerticalAlign','HorizontalSpacing','CustomSettingsFolder') $props = [ordered]@{} foreach ($pn in $KNOWN_FORM_PROPS) { $v = Get-Child $root $pn diff --git a/docs/form-dsl-spec.md b/docs/form-dsl-spec.md index c2fbad4b..f61a87cd 100644 --- a/docs/form-dsl-spec.md +++ b/docs/form-dsl-spec.md @@ -84,6 +84,7 @@ | `conversationsRepresentation` | `` | `Auto`, `Show`, `DontShow` — отображение панели обсуждений; pass-through (редкое) | | `collapseItemsByImportanceVariant` | `` | `DontUse`, `Use` — сворачивание элементов по важности; pass-through (редкое) | | `groupList` | `` | Ссылка на группу списка (`2:` или имя), pass-through verbatim (редкое) | +| `customSettingsFolder` | `` | Группа, куда генерируются пользовательские настройки компоновщика (форма отчёта со СКД). Имя группы или `N:`, pass-through verbatim. 1С-синоним «Группа пользовательских настроек» | Нераспознанные ключи преобразуются с автоматическим PascalCase (первая буква в верхний регистр).