mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-08 11:10:52 +03:00
fix(meta-info,meta-decompile): xs:base64Binary без квалификаторов — двоичные данные, не хранилище
Вчерашняя правка исходила из того, что xs:base64Binary без BinaryDataQualifiers — вторая форма ХранилищаЗначения. Спросили платформу: конфигурация с таким узлом загружается и выгружается обратно как xs:base64Binary с Length 0 / AllowedLength Variable, то есть как БЕЗЛИМИТНЫЕ двоичные данные. ХранилищеЗначения — отдельный узел v8:ValueStorage. - meta-info: xs:base64Binary снова всегда ДвоичныеДанные (правка отменена, замер записан в комментарий). - meta-decompile: узел без квалификаторов теперь возвращается как BinaryData(0), а не ValueStorage — раньше раундтрип молча менял тип реквизита. Проверено: пересборка из полученного DSL даёт байт в байт то же, что выгрузила платформа. - Кейс и фикстура переименованы по факту и стали полной конфигурацией: теперь кейс доезжает до платформы в verify-snapshots (раньше падал с «конфигурации для загрузки нет»). check-uuid-invariant: добавлен сценарий внешнего источника — правки идут в два файла, и пересборка файла источника дала бы ему новый uuid, осиротив существующие таблицы. Проверка не холостая: намеренная порча uuid источника гард роняет. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NBsZA5cr2WFThtgp7i5WVi
This commit is contained in:
co-authored by
Claude Opus 5
parent
b4bc02bc98
commit
11c0450d2a
@@ -1,4 +1,4 @@
|
||||
# meta-decompile v0.67 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||
# meta-decompile v0.68 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
#
|
||||
# Поддержаны: Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document,
|
||||
@@ -207,8 +207,9 @@ function Get-TypeShorthand {
|
||||
$parts += $fr; break # Date | DateTime
|
||||
}
|
||||
'(^|:)base64Binary$' {
|
||||
# xs:base64Binary — это ДвоичныеДанные, если рядом есть свои квалификаторы;
|
||||
# ХранилищеЗначения платформа пишет как v8:ValueStorage, но принимает и эту форму.
|
||||
# xs:base64Binary — всегда ДвоичныеДанные (ХранилищеЗначения — это v8:ValueStorage).
|
||||
# Узел без квалификаторов встречается только в рукописном XML: замерено на 8.3.24.1691 —
|
||||
# платформа читает его как безлимит (Length 0, Variable) и так же выгружает обратно.
|
||||
$bq = $typeNode.SelectSingleNode('v8:BinaryDataQualifiers', $nsm)
|
||||
if ($bq) {
|
||||
$blen = $bq.SelectSingleNode('v8:Length', $nsm)
|
||||
@@ -220,7 +221,7 @@ function Get-TypeShorthand {
|
||||
if ($balVal -eq 'Variable' -and $blenVal) { $parts += "BinaryData($blenVal)" }
|
||||
elseif ($blenVal -and $blenVal -ne '4294967292') { $parts += "BinaryData($blenVal,fixed)" }
|
||||
else { $parts += 'BinaryData' }
|
||||
} else { $parts += 'ValueStorage' }
|
||||
} else { $parts += 'BinaryData(0)' }
|
||||
break
|
||||
}
|
||||
default { $parts += (Strip-NsPrefix $raw) } # cfg:CatalogRef.X → CatalogRef.X
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# meta-decompile v0.67 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||
# meta-decompile v0.68 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
#
|
||||
# Зеркало meta-decompile.ps1 (КАНОН). Структура 1:1 — те же имена функций, порядок, комментарии.
|
||||
@@ -311,8 +311,9 @@ def get_type_shorthand(type_node):
|
||||
fr = _text(dn)
|
||||
parts.append(fr) # Date | DateTime
|
||||
elif re.search(r'(^|:)base64Binary$', raw, re.I):
|
||||
# xs:base64Binary — это ДвоичныеДанные, если рядом есть свои квалификаторы;
|
||||
# ХранилищеЗначения платформа пишет как v8:ValueStorage, но принимает и эту форму.
|
||||
# xs:base64Binary — всегда ДвоичныеДанные (ХранилищеЗначения — это v8:ValueStorage).
|
||||
# Узел без квалификаторов встречается только в рукописном XML: замерено на 8.3.24.1691 —
|
||||
# платформа читает его как безлимит (Length 0, Variable) и так же выгружает обратно.
|
||||
bq = type_node.find('v8:BinaryDataQualifiers', NS)
|
||||
if bq is not None:
|
||||
blen = bq.find('v8:Length', NS)
|
||||
@@ -328,7 +329,7 @@ def get_type_shorthand(type_node):
|
||||
else:
|
||||
parts.append('BinaryData')
|
||||
else:
|
||||
parts.append('ValueStorage')
|
||||
parts.append('BinaryData(0)')
|
||||
else:
|
||||
parts.append(strip_ns_prefix(raw)) # cfg:CatalogRef.X → CatalogRef.X
|
||||
elif ln == 'TypeSet':
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# meta-info v1.13 — Compact summary of 1C metadata object
|
||||
# meta-info v1.14 — Compact summary of 1C metadata object
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
[CmdletBinding(PositionalBinding=$false)]
|
||||
param(
|
||||
@@ -233,12 +233,10 @@ function Format-SingleType([string]$raw, $parentNode) {
|
||||
}
|
||||
"v8:ValueStorage" { return "ХранилищеЗначения" }
|
||||
"v8:UUID" { return "УникальныйИдентификатор" }
|
||||
"xs:base64Binary" {
|
||||
# ДвоичныеДанные только при своих квалификаторах: без них это вторая форма
|
||||
# ХранилищаЗначения, которую платформа принимает (так же различает meta-decompile).
|
||||
$bq = $parentNode.SelectSingleNode("v8:BinaryDataQualifiers", $ns)
|
||||
if ($bq) { return "ДвоичныеДанные" } else { return "ХранилищеЗначения" }
|
||||
}
|
||||
# xs:base64Binary — всегда ДвоичныеДанные, и без квалификаторов тоже: замерено
|
||||
# на 8.3.24.1691 — такой узел платформа загружает и выгружает обратно как безлимитные
|
||||
# двоичные данные (Length 0, AllowedLength Variable), а не как ХранилищеЗначения.
|
||||
"xs:base64Binary" { return "ДвоичныеДанные" }
|
||||
"v8:Null" { return "Null" }
|
||||
default {
|
||||
# Normalize d5p1:/dNpN: -> cfg:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# meta-info v1.13 — Compact summary of 1C metadata object (Python port)
|
||||
# meta-info v1.14 — Compact summary of 1C metadata object (Python port)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
import os
|
||||
@@ -320,10 +320,10 @@ def format_single_type(raw, parent_node):
|
||||
if raw == "v8:UUID":
|
||||
return "УникальныйИдентификатор"
|
||||
if raw == "xs:base64Binary":
|
||||
# ДвоичныеДанные только при своих квалификаторах: без них это вторая форма
|
||||
# ХранилищаЗначения, которую платформа принимает (так же различает meta-decompile).
|
||||
bq = find(parent_node, "v8:BinaryDataQualifiers")
|
||||
return "ДвоичныеДанные" if bq is not None else "ХранилищеЗначения"
|
||||
# xs:base64Binary — всегда ДвоичныеДанные, и без квалификаторов тоже: замерено
|
||||
# на 8.3.24.1691 — такой узел платформа загружает и выгружает обратно как безлимитные
|
||||
# двоичные данные (Length 0, AllowedLength Variable), а не как ХранилищеЗначения.
|
||||
return "ДвоичныеДанные"
|
||||
if raw == "v8:Null":
|
||||
return "Null"
|
||||
# Normalize d5p1:/dNpN: → cfg: (both map to same namespace)
|
||||
|
||||
Reference in New Issue
Block a user