mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-03 00:30:52 +03:00
feat(meta-compile,meta-edit,cf-init,meta-validate): формат выгрузки 2.21 (8.5)
Дельта 2.20 → 2.21 снята синтетическим экспериментом: одна и та же минимальная конфигурация загружена в две пустые базы, 8.3.27.1859 и 8.5.1.1302, и выгружена из каждой (стенд debug/fmt221). Всё, что нашлось раундтрипом по УНФ, воспроизвелось на синтетике — значит это ступень формата, а не особенность конфигурации. Версию формата задаёт ПЛАТФОРМА ВЫГРУЗКИ, а не режим совместимости: CompatibilityMode в обеих выгрузках остался Version8_3_24, но 8.5 всё равно написала 2.21. Поэтому нигде не появляется привязки к режиму совместимости — только к версии из Configuration.xml, как и было устроено. Реализовано: - xmlns:pal (палитра) в шапках MetaDataObject и Form у meta-compile и cf-init. Вставка НА МЕСТО (после lf, перед style) — платформа держит объявления по алфавиту. В файлы с корнем extrnprops (Ext/ClientApplicationInterface.xml) платформа его не пишет, и мы не пишем. - meta-compile: <Color>auto</Color> у значения перечисления, <AuxiliaryVariantForm/> у отчёта, <UseInInterfaceCompatibilityMode>Any</…> у общей формы. Позиции взяты из эталонной выгрузки, а не угаданы. - meta-edit: <Color> при добавлении значения перечисления — навык сам эмитит EnumValue, и без этого добавленное значение отличалось бы от соседних. - cf-init: 14 новых свойств корня при -FormatVersion 2.21. - meta-validate: лестница версий (был единственным валидатором без 2.21) и три строки в реестре versionedProps — механизм для этого и заводился. Проверка: - наш вывод на 2.21 совпал с выгрузкой платформы ПОСТРОЧНО по Enums, Reports и CommonForms; порты идентичны modulo UUID; - на 2.17-2.20 вывод не изменился ни в одном байте; - юнит-тесты 648/648 ps1, 645/648 py. Известное отклонение, НЕ относящееся к 2.21: скелет Ext/Form.xml общей формы отличается от платформенного (dcssch в шапке, форма AutoCommandBar, Attributes) — то же расхождение есть и на 2.20, разбирать отдельно. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
7892c9fbfa
commit
34b533a730
@@ -1,4 +1,4 @@
|
||||
# meta-edit v1.30 — Edit existing 1C metadata object XML
|
||||
# meta-edit v1.31 — Edit existing 1C metadata object XML
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[string]$DefinitionFile,
|
||||
@@ -318,6 +318,12 @@ $root = $script:xmlDoc.DocumentElement
|
||||
# Ищем по объявлениям корня, а не через GetPrefixOfNamespace: ссылочный тип живёт в
|
||||
# ТЕКСТЕ узла, поэтому XML-слой этот префикс не отслеживает. $null = корень URI не
|
||||
# объявляет → эмиттер остаётся на самодостаточной локальной форме.
|
||||
# Версия формата правимого файла — из его же корня. Нужна эмиттерам: часть свойств
|
||||
# появилась в поздних версиях (напр. <Color> у значения перечисления — в 2.21).
|
||||
$script:formatVersion = $root.GetAttribute("version")
|
||||
if (-not $script:formatVersion) { $script:formatVersion = "2.17" }
|
||||
$script:isFormat221 = ($script:formatVersion -match '^(\d+)\.(\d+)$') -and ([int]$Matches[1] * 100 + [int]$Matches[2]) -ge 221
|
||||
|
||||
$script:cfgUri = 'http://v8.1c.ru/8.1/data/enterprise/current-config'
|
||||
$script:cfgPrefix = $null
|
||||
foreach ($a in $root.Attributes) {
|
||||
@@ -1300,6 +1306,9 @@ function Build-EnumValueFragment {
|
||||
$sb.AppendLine("$indent`t`t<Name>$(Esc-XmlText $parsed.name)</Name>") | Out-Null
|
||||
$sb.AppendLine($(Build-MLTextXml "$indent`t`t" "Synonym" $parsed.synonym)) | Out-Null
|
||||
$sb.AppendLine("$indent`t`t<Comment/>") | Out-Null
|
||||
# Цвет значения — свойство формата 2.21 (8.5). Без него добавленное значение
|
||||
# отличалось бы от соседних, написанных платформой.
|
||||
if ($script:isFormat221) { $sb.AppendLine("$indent`t`t<Color>auto</Color>") | Out-Null }
|
||||
$sb.AppendLine("$indent`t</Properties>") | Out-Null
|
||||
$sb.Append("$indent</EnumValue>") | Out-Null
|
||||
return $sb.ToString()
|
||||
|
||||
Reference in New Issue
Block a user