fix(cf-init,cfe-init,meta-compile): пустой элемент вместо пустой пары (#57)

Конфигуратор пишет <Vendor/>, а не <Vendor></Vendor>: в 8 выгрузках cfsrc
(476 943 XML) пустых пар ноль. Шаблоны подставляли значение ВНУТРЬ пары, поэтому
при пустом значении получалась пара.

Собираем элемент целиком: <Vendor>/<Version> (cf-init, cfe-init),
<DefaultRoles> (cfe-init при -NoRole), <Key> и <Namespace> (meta-compile —
план обмена и веб-сервис). Образец рядом же: <Comment> и <Description> в
meta-compile так делали и раньше.

Дефект был в ОБОИХ портах одинаково — здесь дело не в сериализаторе, а в шаблоне.

Пустая пара <Namespace> в cfe-borrow была не его: он копирует свойства
заимствуемого объекта, а порождал их meta-compile.

Дрейф снэпшотов: 340 <Vendor/>, 339 <Version/>, по одному <Key/>, <Namespace/>,
<DefaultRoles/>. Содержательных изменений ноль. Тесты 641/641.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-05 15:55:31 +03:00
co-authored by Claude Opus 5
parent 0b8231c467
commit 11e4e4301f
348 changed files with 737 additions and 714 deletions
@@ -1,4 +1,4 @@
# meta-compile v1.80 — Compile 1C metadata object from JSON
# meta-compile v1.81 — Compile 1C metadata object from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[Parameter(Mandatory)]
@@ -3043,7 +3043,9 @@ function Emit-ScheduledJobProperties {
if ($description) { X "$i<Description>$(Esc-XmlText $description)</Description>" } else { X "$i<Description/>" }
$key = if ($def.key) { "$($def.key)" } else { "" }
X "$i<Key>$(Esc-XmlText $key)</Key>"
# Пустое значение → самозакрывающийся, как у <Description> выше: Конфигуратор
# не пишет пустых пар.
if ($key) { X "$i<Key>$(Esc-XmlText $key)</Key>" } else { X "$i<Key/>" }
$use = if ($def.use -eq $true) { "true" } else { "false" }
X "$i<Use>$use</Use>"
@@ -3843,7 +3845,8 @@ function Emit-WebServiceProperties {
if ($def.comment) { X "$i<Comment>$(Esc-XmlText "$($def.comment)")</Comment>" } else { X "$i<Comment/>" }
$namespace = if ($def.namespace) { "$($def.namespace)" } else { "" }
X "$i<Namespace>$(Esc-XmlText $namespace)</Namespace>"
# Пустое значение → самозакрывающийся, как у <Comment> выше.
if ($namespace) { X "$i<Namespace>$(Esc-XmlText $namespace)</Namespace>" } else { X "$i<Namespace/>" }
# XDTOPackages — СПИСОК элементов, а не скаляр: значение либо ссылка на пакет конфигурации
# (xr:MDObjectRef "XDTOPackage.Имя"), либо URI внешнего пространства имён (xs:string).