fix(meta-edit): проверка «ребёнок уже есть» не видела узлов без Properties

Get-AllChildNames собирал имена только из Properties/Name и пропускал детей, которые
регистрируются голым текстом: <Table>Имя</Table>, <Form>Имя</Form>, <Template>Имя</Template>.
Из-за этого проверка на дубликат была мёртвой: после удаления файла таблицы повторное
добавление отвечало «Added: 1» и клало в ChildObjects второй такой же <Table>.

Теперь имя берётся из текста узла, если у ребёнка нет Properties. Кейс воспроизводит
исходный сценарий: добавить таблицу, удалить её файл, добавить снова — второй записи
быть не должно.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AtG4qGvZocJSWLAsbHpBCQ
This commit is contained in:
Nick Shirokov
2026-09-06 17:59:11 +03:00
co-authored by Claude Opus 5
parent 8d1670468a
commit 0dac85946f
8 changed files with 493 additions and 3 deletions
@@ -1,4 +1,4 @@
# meta-edit v1.46 — Edit existing 1C metadata object XML
# meta-edit v1.47 — Edit existing 1C metadata object XML
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -1505,7 +1505,14 @@ function Get-AllChildNames {
$propsEl = $gc; break
}
}
if (-not $propsEl) { continue }
# Часть детей регистрируется голым текстом, без <Properties>: <Table>Имя</Table>,
# <Form>Имя</Form>, <Template>Имя</Template>. Пропуская их, проверка «уже существует»
# становилась мёртвой — повторное добавление давало второй такой же узел.
if (-not $propsEl) {
$n = $child.InnerText.Trim()
if ($n) { $names[$n] = $child.LocalName }
continue
}
foreach ($gc in $propsEl.ChildNodes) {
if ($gc.NodeType -eq 'Element' -and $gc.LocalName -eq "Name") {
$n = $gc.InnerText.Trim()
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# meta-edit v1.46 — Edit existing 1C metadata object XML
# meta-edit v1.47 — Edit existing 1C metadata object XML
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
@@ -1522,7 +1522,13 @@ def get_all_child_names():
if localname(gc) == "Properties":
props_el = gc
break
# Часть детей регистрируется голым текстом, без <Properties>: <Table>Имя</Table>,
# <Form>Имя</Form>, <Template>Имя</Template>. Пропуская их, проверка «уже существует»
# становилась мёртвой — повторное добавление давало второй такой же узел.
if props_el is None:
n = (child.text or "").strip()
if n:
names[n] = localname(child)
continue
for gc in props_el:
if localname(gc) == "Name":