From 8aad132cc3ac2cf22bea8a8cab18a63813f55be4 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Tue, 9 Jun 2026 11:58:04 +0300 Subject: [PATCH] =?UTF-8?q?feat(form-decompile,form-compile):=20Command=20?= =?UTF-8?q?AssociatedTableElementId=20(=D0=B8=D1=81=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=B7=D1=83=D0=B5=D0=BC=D0=B0=D1=8F=20=D1=82=D0=B0=D0=B1?= =?UTF-8?q?=D0=BB=D0=B8=D1=86=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Свойство команды «Используемая таблица» — ссылка по ИМЕНИ элемента-таблицы (Имя, 240 в корпусе, всегда xs:string). Команда работает в контексте этой таблицы (текущая строка). - Ключ table; forgiving-синонимы associatedTableElementId (XML-тег) и ИспользуемаяТаблица (рус., регистро-/пробело-незав.) — команды идут отдельным путём Emit-Commands, не через PROP_SYNONYMS слой Emit-Element. - CurrentRowUse («использование текущей строки») уже поддерживался. Зеркало py. Кейс table расширен (table + currentRowUse), сертифицирован загрузкой в 1С. Регресс 39/39 в обоих рантаймах. Co-Authored-By: Claude Opus 4.8 (1M context) --- .claude/skills/form-compile/scripts/form-compile.ps1 | 11 ++++++++++- .claude/skills/form-compile/scripts/form-compile.py | 10 +++++++++- .../skills/form-decompile/scripts/form-decompile.ps1 | 4 +++- docs/form-dsl-spec.md | 1 + .../DataProcessors/Таблица/Forms/Форма/Ext/Form.xml | 2 ++ tests/skills/cases/form-compile/table.json | 2 +- 6 files changed, 26 insertions(+), 4 deletions(-) diff --git a/.claude/skills/form-compile/scripts/form-compile.ps1 b/.claude/skills/form-compile/scripts/form-compile.ps1 index 68a9225e..cba3f986 100644 --- a/.claude/skills/form-compile/scripts/form-compile.ps1 +++ b/.claude/skills/form-compile/scripts/form-compile.ps1 @@ -1,4 +1,4 @@ -# form-compile v1.89 — Compile 1C managed form from JSON or object metadata +# form-compile v1.90 — Compile 1C managed form from JSON or object metadata # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$JsonPath, @@ -4766,6 +4766,15 @@ function Emit-Commands { X "$inner$($cmd.currentRowUse)" } + # Используемая таблица — имя элемента-таблицы (xsi:type обязателен). + # Forgiving-ключи: table / associatedTableElementId (XML-тег) / ИспользуемаяТаблица (рус., регистр-незав.) + $cmdTable = $cmd.table + if (-not $cmdTable) { $cmdTable = $cmd.associatedTableElementId } + if (-not $cmdTable) { $cmdTable = $cmd.используемаяТаблица } + if ($cmdTable) { + X "$inner$(Esc-Xml "$cmdTable")" + } + if ($cmd.shortcut) { X "$inner$($cmd.shortcut)" } diff --git a/.claude/skills/form-compile/scripts/form-compile.py b/.claude/skills/form-compile/scripts/form-compile.py index 4014f929..ee50a010 100644 --- a/.claude/skills/form-compile/scripts/form-compile.py +++ b/.claude/skills/form-compile/scripts/form-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# form-compile v1.89 — Compile 1C managed form from JSON or object metadata +# form-compile v1.90 — Compile 1C managed form from JSON or object metadata # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import copy @@ -4461,6 +4461,14 @@ def emit_commands(lines, cmds, indent): if cmd.get('currentRowUse'): lines.append(f'{inner}{cmd["currentRowUse"]}') + # Используемая таблица — имя элемента-таблицы (xsi:type обязателен). + # Forgiving-ключи: table / associatedTableElementId (XML-тег) / ИспользуемаяТаблица (рус., регистр-незав.) + _cmd_norm = {k.replace(' ', '').lower(): v for k, v in cmd.items()} + cmd_table = (_cmd_norm.get('table') or _cmd_norm.get('associatedtableelementid') + or _cmd_norm.get('используемаятаблица')) + if cmd_table: + lines.append(f'{inner}{esc_xml(str(cmd_table))}') + if cmd.get('shortcut'): lines.append(f'{inner}{cmd["shortcut"]}') diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1 index 9732ab67..57a0441a 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.65 — Decompile 1C managed Form.xml to JSON DSL (draft) +# form-decompile v0.66 — Decompile 1C managed Form.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью. param( @@ -1934,6 +1934,8 @@ if ($cmdsNode) { $us = Decompile-XrFlag $c 'Use'; if ($null -ne $us) { $co['use'] = $us } $cfo = Decompile-FunctionalOptions $c; if ($cfo) { $co['functionalOptions'] = $cfo } $cru = Get-Child $c 'CurrentRowUse'; if ($cru) { $co['currentRowUse'] = $cru } + # Используемая таблица — ссылка по имени элемента-таблицы (Имя) + $ate = Get-Child $c 'AssociatedTableElementId'; if ($ate) { $co['table'] = $ate } $sc = Get-Child $c 'Shortcut'; if ($sc) { $co['shortcut'] = $sc } $ref = $c.SelectSingleNode("lf:Picture/xr:Ref", $ns); if ($ref) { $co['picture'] = $ref.InnerText } # Дефолт у picture команды = true → фиксируем только отклонение false (true опускаем) diff --git a/docs/form-dsl-spec.md b/docs/form-dsl-spec.md index e07fa5f2..b4022d93 100644 --- a/docs/form-dsl-spec.md +++ b/docs/form-dsl-spec.md @@ -895,6 +895,7 @@ Pages поддерживает `pagesRepresentation`: `None`, `TabsOnTop`, `Tabs | `use` | bool/object | Доступность команды по ролям (``). См. §4.1c | | `functionalOptions` | array | Функциональные опции команды (см. §5) | | `currentRowUse` | string | Использование текущей строки: `Auto`, `DontUse`, `Use` | +| `table` | string | Используемая таблица — имя элемента-таблицы формы (`Имя`). Команда работает в контексте этой таблицы (текущая строка). Forgiving-синонимы: `associatedTableElementId` (XML-тег), `ИспользуемаяТаблица` (рус., регистро-/пробело-независимо) | | `modifiesSavedData` | bool | Команда изменяет сохраняемые данные (``); эмитится только `true` | | `shortcut` | string | Клавиатурное сочетание | | `picture` | string | Ссылка на картинку | diff --git a/tests/skills/cases/form-compile/snapshots/table/DataProcessors/Таблица/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-compile/snapshots/table/DataProcessors/Таблица/Forms/Форма/Ext/Form.xml index 500907fc..90cc8133 100644 --- a/tests/skills/cases/form-compile/snapshots/table/DataProcessors/Таблица/Forms/Форма/Ext/Form.xml +++ b/tests/skills/cases/form-compile/snapshots/table/DataProcessors/Таблица/Forms/Форма/Ext/Form.xml @@ -168,6 +168,8 @@ ОбновитьОбработка + Use + Данные diff --git a/tests/skills/cases/form-compile/table.json b/tests/skills/cases/form-compile/table.json index f3da9922..3242ec12 100644 --- a/tests/skills/cases/form-compile/table.json +++ b/tests/skills/cases/form-compile/table.json @@ -44,7 +44,7 @@ ]} ], "commands": [ - { "name": "Обновить", "action": "ОбновитьОбработка" } + { "name": "Обновить", "action": "ОбновитьОбработка", "currentRowUse": "Use", "table": "Данные" } ] } }