fix(form-compile): Page с направлением раскладки → не путать с UsualGroup

У Page/Pages ключ `group` означает направление раскладки детей
(<Group>Horizontal</Group>), а не тип UsualGroup. Диспетчер типа элемента
проверял `group` раньше `page`/`pages`, поэтому страница с горизонтальной
раскладкой компилировалась как <UsualGroup name="horizontal"> вместо <Page>.

Переставил `pages`/`page` перед `group` в TYPE_KEYS (ps1 + py зеркало) —
реальная UsualGroup ключа page/pages не несёт, конфликта нет. Emit-Page уже
корректно эмитит <Group> из ключа group.

Регресс: добавил group:horizontal на страницу в кейс pages.json + снэпшот.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-06-07 16:02:07 +03:00
parent 8448a28a29
commit 2367eaa353
4 changed files with 10 additions and 5 deletions
@@ -1,4 +1,4 @@
# form-compile v1.60 — Compile 1C managed form from JSON or object metadata
# form-compile v1.61 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$JsonPath,
@@ -2394,7 +2394,9 @@ function Emit-Element {
# picture/picField — НИЗКИЙ приоритет: 'picture' это и тип (PictureDecoration), и свойство-иконка
# у popup/button/cmdBar. Тип-ключ владельца (popup/button/…) должен выиграть.
foreach ($key in @("columnGroup","buttonGroup","group","input","check","radio","label","labelField","table","pages","page","button","calendar","cmdBar","popup","picField","picture")) {
# pages/page ПЕРЕД group: у Page/Pages ключ 'group' — это направление раскладки детей
# (<Group>Horizontal</Group>), а не тип UsualGroup. Реальная UsualGroup ключа page/pages не несёт.
foreach ($key in @("columnGroup","buttonGroup","pages","page","group","input","check","radio","label","labelField","table","button","calendar","cmdBar","popup","picField","picture")) {
if ($el.$key -ne $null) {
$typeKey = $key
break
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# form-compile v1.60 — Compile 1C managed form from JSON or object metadata
# form-compile v1.61 — Compile 1C managed form from JSON or object metadata
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import copy
@@ -1798,7 +1798,9 @@ KNOWN_KEYS = {
# picture/picField — НИЗКИЙ приоритет: 'picture' это и тип (PictureDecoration), и свойство-иконка
# у popup/button/cmdBar. Тип-ключ владельца (popup/button/…) должен выиграть.
TYPE_KEYS = ["columnGroup", "buttonGroup", "group", "input", "check", "radio", "label", "labelField", "table", "pages", "page",
# pages/page ПЕРЕД group: у Page/Pages ключ 'group' — это направление раскладки детей
# (<Group>Horizontal</Group>), а не тип UsualGroup. Реальная UsualGroup ключа page/pages не несёт.
TYPE_KEYS = ["columnGroup", "buttonGroup", "pages", "page", "group", "input", "check", "radio", "label", "labelField", "table",
"button", "calendar", "cmdBar", "popup", "picField", "picture"]
# Synonyms: model often writes XML name or Russian (ПолеПереключателя/RadioButtonField → radio)
+1 -1
View File
@@ -21,7 +21,7 @@
{ "page": "Шаг1", "title": "", "children": [
{ "input": "Параметр1", "path": "Параметр1" }
]},
{ "page": "Шаг2", "title": "Результат", "tooltip": "Шаг \"Результат\"", "children": [
{ "page": "Шаг2", "title": "Результат", "tooltip": "Шаг \"Результат\"", "group": "horizontal", "children": [
{ "input": "Итог", "path": "Итог", "readOnly": true }
]}
]},
@@ -42,6 +42,7 @@
<v8:content>Шаг "Результат"</v8:content>
</v8:item>
</ToolTip>
<Group>Horizontal</Group>
<ExtendedTooltip name="Шаг2РасширеннаяПодсказка" id="9"/>
<ChildItems>
<InputField name="Итог" id="10">