diff --git a/.claude/skills/skd-compile/scripts/skd-compile.ps1 b/.claude/skills/skd-compile/scripts/skd-compile.ps1
index 0f35d537..c625dfe0 100644
--- a/.claude/skills/skd-compile/scripts/skd-compile.ps1
+++ b/.claude/skills/skd-compile/scripts/skd-compile.ps1
@@ -1,4 +1,4 @@
-# skd-compile v1.92 — Compile 1C DCS from JSON
+# skd-compile v1.93 — Compile 1C DCS from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$DefinitionFile,
@@ -2482,6 +2482,55 @@ function Emit-ConditionalAppearance {
X "$indent"
}
+# Эмиссия nested sub-item внутри SettingsParameterValue (chart-параметры типа
+# ТипДиаграммы.СоединениеЗначенийПоСериям). Поддерживает use=false и valueType
+# либо строкой ("xs:string", "dN:Foo" если префикс известен в корне), либо
+# объектом {uri, name} — эмитим локальный xmlns на value.
+function Emit-OutputParametersSubItem {
+ param([string]$subName, $subWrap, [string]$indent)
+ $subVal = $subWrap
+ $subVT = 'xs:string'
+ $subUseFalse = $false
+ $subUri = $null
+ $subLocalName = $null
+ if ($subWrap -is [PSCustomObject]) {
+ if ($subWrap.PSObject.Properties['value']) { $subVal = $subWrap.value }
+ if ($subWrap.PSObject.Properties['valueType']) {
+ $vt = $subWrap.valueType
+ if ($vt -is [PSCustomObject] -and $vt.PSObject.Properties['uri']) {
+ $subUri = "$($vt.uri)"; $subLocalName = "$($vt.name)"
+ } elseif ($vt -is [System.Collections.IDictionary] -and $vt.Contains('uri')) {
+ $subUri = "$($vt['uri'])"; $subLocalName = "$($vt['name'])"
+ } else {
+ $subVT = "$vt"
+ }
+ }
+ if ($subWrap.PSObject.Properties['use'] -and $subWrap.use -eq $false) { $subUseFalse = $true }
+ } elseif ($subWrap -is [System.Collections.IDictionary]) {
+ if ($subWrap.Contains('value')) { $subVal = $subWrap['value'] }
+ if ($subWrap.Contains('valueType')) {
+ $vt = $subWrap['valueType']
+ if ($vt -is [PSCustomObject] -and $vt.PSObject.Properties['uri']) {
+ $subUri = "$($vt.uri)"; $subLocalName = "$($vt.name)"
+ } elseif ($vt -is [System.Collections.IDictionary] -and $vt.Contains('uri')) {
+ $subUri = "$($vt['uri'])"; $subLocalName = "$($vt['name'])"
+ } else {
+ $subVT = "$vt"
+ }
+ }
+ if ($subWrap.Contains('use') -and $subWrap['use'] -eq $false) { $subUseFalse = $true }
+ }
+ X "$indent`t`t"
+ if ($subUseFalse) { X "$indent`t`t`tfalse" }
+ X "$indent`t`t`t$(Esc-Xml $subName)"
+ if ($subUri) {
+ X "$indent`t`t`t$(Esc-Xml "$subVal")"
+ } else {
+ X "$indent`t`t`t$(Esc-Xml "$subVal")"
+ }
+ X "$indent`t`t"
+}
+
function Emit-OutputParameters {
param($params, [string]$indent, $blockViewMode = $null)
@@ -2559,28 +2608,17 @@ function Emit-OutputParameters {
} else {
X "$indent`t`t$(Esc-Xml "$rawVal")"
}
- # Nested sub-параметры (ТипДиаграммы.ВидПодписей и т.п.) — эмитим между value и extras
+ # Nested sub-параметры (ТипДиаграммы.ВидПодписей и т.п.) — эмитим между value и extras.
+ # valueType: строка → xsi:type=string, объект {uri, name} → локальный xmlns:dN + xsi:type=dN:name.
if ($wrapItems) {
$itemProps = if ($wrapItems -is [PSCustomObject]) { $wrapItems.PSObject.Properties } else { $null }
if ($itemProps) {
foreach ($ip in $itemProps) {
- $subName = $ip.Name; $subWrap = $ip.Value
- $subVal = if ($subWrap -is [PSCustomObject] -and $subWrap.PSObject.Properties['value']) { $subWrap.value } else { $subWrap }
- $subVT = if ($subWrap -is [PSCustomObject] -and $subWrap.PSObject.Properties['valueType']) { "$($subWrap.valueType)" } else { 'xs:string' }
- X "$indent`t`t"
- X "$indent`t`t`t$(Esc-Xml $subName)"
- X "$indent`t`t`t$(Esc-Xml "$subVal")"
- X "$indent`t`t"
+ Emit-OutputParametersSubItem -subName $ip.Name -subWrap $ip.Value -indent $indent
}
} elseif ($wrapItems -is [System.Collections.IDictionary]) {
foreach ($k in $wrapItems.Keys) {
- $subWrap = $wrapItems[$k]
- $subVal = if ($subWrap -is [System.Collections.IDictionary] -and $subWrap.Contains('value')) { $subWrap['value'] } else { $subWrap }
- $subVT = if ($subWrap -is [System.Collections.IDictionary] -and $subWrap.Contains('valueType')) { "$($subWrap['valueType'])" } else { 'xs:string' }
- X "$indent`t`t"
- X "$indent`t`t`t$(Esc-Xml $k)"
- X "$indent`t`t`t$(Esc-Xml "$subVal")"
- X "$indent`t`t"
+ Emit-OutputParametersSubItem -subName $k -subWrap $wrapItems[$k] -indent $indent
}
}
}
diff --git a/.claude/skills/skd-compile/scripts/skd-compile.py b/.claude/skills/skd-compile/scripts/skd-compile.py
index 2d31ecb4..1859376a 100644
--- a/.claude/skills/skd-compile/scripts/skd-compile.py
+++ b/.claude/skills/skd-compile/scripts/skd-compile.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# skd-compile v1.92 — Compile 1C DCS from JSON
+# skd-compile v1.93 — Compile 1C DCS from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import json
@@ -2081,18 +2081,35 @@ def emit_output_parameters(lines, params, indent):
emit_mltext(lines, f'{indent}\t\t', 'dcscor:value', val)
else:
lines.append(f'{indent}\t\t{esc_xml(str(val))}')
- # Nested sub-параметры (ТипДиаграммы.ВидПодписей и т.п.)
+ # Nested sub-параметры (ТипДиаграммы.ВидПодписей и т.п.).
+ # valueType: строка → xsi:type=string, объект {uri, name} → локальный xmlns:dN.
if wrap_items and isinstance(wrap_items, dict):
for sub_name, sub_wrap in wrap_items.items():
- if isinstance(sub_wrap, dict) and 'value' in sub_wrap:
- sub_val = sub_wrap['value']
- sub_vt = sub_wrap.get('valueType', 'xs:string')
- else:
- sub_val = sub_wrap
- sub_vt = 'xs:string'
+ sub_val = sub_wrap
+ sub_vt = 'xs:string'
+ sub_use_false = False
+ sub_uri = None
+ sub_local_name = None
+ if isinstance(sub_wrap, dict):
+ if 'value' in sub_wrap:
+ sub_val = sub_wrap['value']
+ if 'valueType' in sub_wrap:
+ vt = sub_wrap['valueType']
+ if isinstance(vt, dict) and 'uri' in vt:
+ sub_uri = str(vt['uri'])
+ sub_local_name = str(vt['name'])
+ else:
+ sub_vt = str(vt)
+ if sub_wrap.get('use') is False:
+ sub_use_false = True
lines.append(f'{indent}\t\t')
+ if sub_use_false:
+ lines.append(f'{indent}\t\t\tfalse')
lines.append(f'{indent}\t\t\t{esc_xml(sub_name)}')
- lines.append(f'{indent}\t\t\t{esc_xml(str(sub_val))}')
+ if sub_uri:
+ lines.append(f'{indent}\t\t\t{esc_xml(str(sub_val))}')
+ else:
+ lines.append(f'{indent}\t\t\t{esc_xml(str(sub_val))}')
lines.append(f'{indent}\t\t')
if wrap_vm:
lines.append(f'{indent}\t\t{esc_xml(str(wrap_vm))}')
diff --git a/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 b/.claude/skills/skd-decompile/scripts/skd-decompile.ps1
index b2ac96f4..d160641f 100644
--- a/.claude/skills/skd-decompile/scripts/skd-decompile.ps1
+++ b/.claude/skills/skd-decompile/scripts/skd-decompile.ps1
@@ -1,4 +1,4 @@
-# skd-decompile v0.75 — Decompile 1C DCS Template.xml to JSON DSL (draft)
+# skd-decompile v0.76 — Decompile 1C DCS Template.xml to JSON DSL (draft)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[Parameter(Mandatory)]
@@ -1846,8 +1846,29 @@ function Build-OutputParameters {
if ($subType -eq 'LocalStringType') { $subRaw = Get-MLText $subVal }
elseif ($subType -eq 'Font') { $subRaw = Get-FontValue $subVal }
else { $subRaw = $subVal.InnerText }
- # Сохраняем как {value, valueType} чтобы compile воспроизвёл xsi:type
- $nestedItems[$subName] = [ordered]@{ value = $subRaw; valueType = $subFull }
+ # Резолвим prefix → URI: если URI не из стандартных корневых xmlns —
+ # сохраняем как объект {uri, name} чтобы compile эмитил xmlns локально.
+ $subTypeField = $subFull
+ if ($subFull -and $subFull -match '^([^:]+):(.+)$') {
+ $pfx = $matches[1]; $localName = $matches[2]
+ $uri = $subVal.GetNamespaceOfPrefix($pfx)
+ if ($uri -and $uri -notin @(
+ 'http://www.w3.org/2001/XMLSchema',
+ 'http://www.w3.org/2001/XMLSchema-instance',
+ 'http://v8.1c.ru/8.1/data-composition-system/schema',
+ 'http://v8.1c.ru/8.1/data-composition-system/settings',
+ 'http://v8.1c.ru/8.1/data-composition-system/core',
+ 'http://v8.1c.ru/8.1/data-composition-system/common',
+ 'http://v8.1c.ru/8.1/data/core',
+ 'http://v8.1c.ru/8.1/data/ui'
+ )) {
+ $subTypeField = [ordered]@{ uri = $uri; name = $localName }
+ }
+ }
+ $entry = [ordered]@{ value = $subRaw; valueType = $subTypeField }
+ $subUse = Get-Text $sub "dcscor:use"
+ if ($subUse -eq 'false') { $entry['use'] = $false }
+ $nestedItems[$subName] = $entry
}
# Extras (use=false / viewMode / userSettingID / userSettingPresentation / nested items) → wrapper.
$useV = Get-Text $it "dcscor:use"