mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-25 06:01:02 +03:00
feat(meta-compile,meta-decompile): реквизит-Характеристика — TypeSet + LinkByType (v1.21/v0.14)
Паттерн «Вид субконто»/доп.реквизит: реквизит-значение типа Характеристики ПВХ.
Две связанные категории:
• TypeSet: тип-множество эмитился только для DefinedType; обобщено на
Characteristic (`Characteristic.X` → <v8:TypeSet>cfg:Characteristic.X). Оба —
тип, подразумевающий набор типов.
• LinkByType (связь по типу — тип значения берётся из реквизита-Вида):
компилятор писал <LinkByType/> всегда; теперь Emit-LinkByType (порт TypeLink
из form-compile: DataPath+LinkItem). DSL `linkByType`: {dataPath, linkItem?}
ИЛИ строка-путь. Декомпилятор захватывает (linkItem=0 → компактно строкой).
Декомпилятор для TypeSet правок не требует (Get-TypeShorthand уже даёт
"Characteristic.X"). remaining TypeSet/LinkByType=0 на выборке (rt-ts), регресс
42/42 ps1+py, ps1↔py идентичны. spec §3.2/§4.2, кейс catalog-attr-typeset-linkbytype.
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
c7067dd319
commit
9fec03bfb6
@@ -1,4 +1,4 @@
|
||||
# meta-decompile v0.13 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||
# meta-decompile v0.14 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
#
|
||||
# Пилот: только Catalog. Инверс meta-compile (omit-on-default: ключ эмитим только
|
||||
@@ -251,6 +251,18 @@ function Attr-ToDsl {
|
||||
}
|
||||
}
|
||||
|
||||
# LinkByType (связь по типу): DataPath + LinkItem. Пусто → пропускаем. linkItem=0 → компактно строкой.
|
||||
$lbtNode = $ap.SelectSingleNode('md:LinkByType', $nsm)
|
||||
if ($lbtNode) {
|
||||
$dpN = $lbtNode.SelectSingleNode('xr:DataPath', $nsm)
|
||||
if ($dpN -and $dpN.InnerText) {
|
||||
$liN = $lbtNode.SelectSingleNode('xr:LinkItem', $nsm)
|
||||
$li = if ($liN -and $liN.InnerText) { [int]$liN.InnerText } else { 0 }
|
||||
if ($li -eq 0) { $extra['linkByType'] = $dpN.InnerText }
|
||||
else { $extra['linkByType'] = [ordered]@{ dataPath = $dpN.InnerText; linkItem = $li } }
|
||||
}
|
||||
}
|
||||
|
||||
if ($synCustom -or ($null -ne $ttVal) -or $extra.Count -gt 0) {
|
||||
$o = [ordered]@{ name = $nm }
|
||||
if ($ts) { $o['type'] = $ts }
|
||||
|
||||
Reference in New Issue
Block a user