mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-25 06:01:02 +03:00
feat(meta-validate): валидация команд объекта — группа + правило параметра (Фаза 1.1, v1.7)
Check 15: команды в ChildObjects — Group обязателен и валиден (allowlist групп раздела/формы + CommandGroup.<Имя>); секционная группа (NavigationPanel*/ActionsPanel*) несовместима с commandParameterType; UUID/Name команды. Зеркало правил meta-compile v1.65 (команды раньше не валидировались вообще → пустой/неверный Group уходил в load-ошибку). ps1+py идентично. Тесты: valid-catalog-commands (preRun, группы раздела+формы) + 2 expectError-fixture (пустая группа; секц.группа+параметр). meta-validate 16/16 ps1+py. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
ca1c80e164
commit
f8cd7dd681
@@ -1,4 +1,4 @@
|
||||
# meta-validate v1.6 — Validate 1C metadata object structure (Python port)
|
||||
# meta-validate v1.7 — Validate 1C metadata object structure (Python port)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
import os
|
||||
@@ -240,6 +240,13 @@ child_object_rules = {
|
||||
"EventSubscription": [],
|
||||
}
|
||||
|
||||
# Группы командного интерфейса (зеркало meta-compile): раздела — без commandParameterType; формы — с параметром.
|
||||
SECTION_COMMAND_GROUPS = ["NavigationPanelImportant", "NavigationPanelOrdinary", "NavigationPanelSeeAlso",
|
||||
"ActionsPanelCreate", "ActionsPanelReports", "ActionsPanelTools"]
|
||||
FORM_COMMAND_GROUPS = ["FormCommandBarImportant", "FormCommandBarCreateBasedOn",
|
||||
"FormNavigationPanelImportant", "FormNavigationPanelGoTo", "FormNavigationPanelSeeAlso"]
|
||||
VALID_COMMAND_GROUPS = SECTION_COMMAND_GROUPS + FORM_COMMAND_GROUPS
|
||||
|
||||
# Valid enum property values
|
||||
valid_property_values = {
|
||||
"CodeType": ["String", "Number"],
|
||||
@@ -1252,6 +1259,49 @@ if md_type == "DocumentJournal" and child_obj_node is not None:
|
||||
elif col_count == 0:
|
||||
report_ok("14. DocumentJournal Columns: none")
|
||||
|
||||
if stopped:
|
||||
finalize()
|
||||
sys.exit(1)
|
||||
|
||||
# ── Check 15: Commands — Group обязателен/валиден; секц.группа несовместима с CommandParameterType ──
|
||||
|
||||
if child_obj_node is not None:
|
||||
commands = find_all(child_obj_node, "md:Command")
|
||||
check15_ok = True
|
||||
cmd_count = 0
|
||||
for cmd in commands:
|
||||
if stopped:
|
||||
break
|
||||
cmd_count += 1
|
||||
cuuid = cmd.get("uuid", "")
|
||||
cmd_props = find(cmd, "md:Properties")
|
||||
cmd_name_node = find(cmd_props, "md:Name") if cmd_props is not None else None
|
||||
cmd_name = inner_text(cmd_name_node) if (cmd_name_node is not None and inner_text(cmd_name_node)) else "(unnamed)"
|
||||
if not cuuid or not guid_pattern.match(cuuid):
|
||||
report_error(f"15. Command '{cmd_name}': missing or invalid uuid")
|
||||
check15_ok = False
|
||||
if cmd_name == "(unnamed)":
|
||||
report_error(f"15. Command (uuid={cuuid}): missing or empty Name")
|
||||
check15_ok = False
|
||||
group_node = find(cmd_props, "md:Group") if cmd_props is not None else None
|
||||
group_val = inner_text(group_node).strip() if group_node is not None else ""
|
||||
if not group_val:
|
||||
report_error(f"15. Command '{cmd_name}': не задана группа (Group) — 1С отвергает при загрузке")
|
||||
check15_ok = False
|
||||
elif group_val not in VALID_COMMAND_GROUPS and not group_val.startswith("CommandGroup."):
|
||||
report_error(f"15. Command '{cmd_name}': неизвестная группа '{group_val}'. "
|
||||
f"Валидные: {', '.join(VALID_COMMAND_GROUPS)}; либо CommandGroup.<Имя>")
|
||||
check15_ok = False
|
||||
elif group_val in SECTION_COMMAND_GROUPS:
|
||||
cpt_node = find(cmd_props, "md:CommandParameterType") if cmd_props is not None else None
|
||||
has_cpt = cpt_node is not None and (len(find_all(cpt_node, "v8:Type")) > 0 or len(find_all(cpt_node, "v8:TypeSet")) > 0)
|
||||
if has_cpt:
|
||||
report_error(f"15. Command '{cmd_name}': тип параметра (CommandParameterType) недоступен "
|
||||
f"для команд командного интерфейса раздела ('{group_val}')")
|
||||
check15_ok = False
|
||||
if check15_ok and cmd_count > 0:
|
||||
report_ok(f"15. Commands: {cmd_count} command(s), groups valid")
|
||||
|
||||
# ── Final output ──────────────────────────────────────────────
|
||||
|
||||
finalize()
|
||||
|
||||
Reference in New Issue
Block a user