diff --git a/.claude/skills/skd-compile/scripts/skd-compile.ps1 b/.claude/skills/skd-compile/scripts/skd-compile.ps1
index 116d09b1..b976f29e 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.74 — Compile 1C DCS from JSON
+# skd-compile v1.75 — Compile 1C DCS from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$DefinitionFile,
@@ -2549,6 +2549,10 @@ function Emit-DataParameters {
X "$indent`t`t`t$(Esc-Xml $_sd)"
X "$indent`t`t`t$(Esc-Xml $_ed)"
X "$indent`t`t"
+ } elseif ($vtype -match '^[a-zA-Z]+:') {
+ # Полный xsi:type из decompile (например "xs:boolean", "dcscor:DesignTimeValue").
+ $vStr = if ($dp.value -is [bool]) { "$($dp.value)".ToLower() } else { "$($dp.value)" }
+ X "$indent`t`t$(Esc-Xml $vStr)"
} elseif ($vtype -eq 'boolean' -or $dp.value -is [bool]) {
$bv = "$($dp.value)".ToLower()
X "$indent`t`t$(Esc-Xml $bv)"
diff --git a/.claude/skills/skd-compile/scripts/skd-compile.py b/.claude/skills/skd-compile/scripts/skd-compile.py
index 0a45825e..e517b9a8 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.74 — Compile 1C DCS from JSON
+# skd-compile v1.75 — Compile 1C DCS from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import json
@@ -2071,6 +2071,10 @@ def emit_data_parameters(lines, items, indent):
lines.append(f'{indent}\t\t\t{esc_xml(sd)}')
lines.append(f'{indent}\t\t\t{esc_xml(ed)}')
lines.append(f'{indent}\t\t')
+ elif re.match(r'^[a-zA-Z]+:', vtype):
+ # Полный xsi:type из decompile (например "xs:boolean", "dcscor:DesignTimeValue").
+ v_str = str(val).lower() if isinstance(val, bool) else str(val)
+ lines.append(f'{indent}\t\t{esc_xml(v_str)}')
elif vtype == 'boolean' or isinstance(val, bool):
bv = str(val).lower()
lines.append(f'{indent}\t\t{esc_xml(bv)}')
diff --git a/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 b/.claude/skills/skd-decompile/scripts/skd-decompile.ps1
index 81cd933b..5b5f21ab 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.57 — Decompile 1C DCS Template.xml to JSON DSL (draft)
+# skd-decompile v0.58 — Decompile 1C DCS Template.xml to JSON DSL (draft)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[Parameter(Mandatory)]
@@ -1760,6 +1760,10 @@ function Build-DataParameters {
# use на dataParameter item — это (не dcsset)
$use = Get-Text $it "dcscor:use"
if ($use -eq 'false') { $canAuto = $false }
+ # viewMode / userSettingPresentation на dataParameter item — это dcsset:* (после value)
+ $vmN = $it.SelectSingleNode("dcsset:viewMode", $ns)
+ $uspN = $it.SelectSingleNode("dcsset:userSettingPresentation", $ns)
+ if ($vmN -or $uspN) { $canAuto = $false }
$tp = $visibleTop[$pn]
$flags = @()
if ($usid) { $flags += '@user' }
@@ -1790,11 +1794,30 @@ function Build-DataParameters {
# Compare to top-level default
if ($tp -and $tp.valueDisplay -ne $vDisplay) { $canAuto = $false }
if (-not $tp) { $canAuto = $false } # extra param not in top-level
- if ($stdPeriodObj) {
- # Object form для StandardPeriod с явными датами
- $obj = [ordered]@{ parameter = $pn; value = $stdPeriodObj }
+ # Object form требуется если есть viewMode / userSettingPresentation / StandardPeriod-с-датами
+ if ($stdPeriodObj -or $vmN -or $uspN) {
+ $obj = [ordered]@{ parameter = $pn }
+ if ($stdPeriodObj) {
+ $obj['value'] = $stdPeriodObj
+ } elseif ($null -ne $vDisplay -and $vDisplay -ne '') {
+ # Конвертация для типизированных значений (compile различает по типу JSON)
+ if ($vt -eq 'boolean') { $obj['value'] = ($vDisplay -eq 'true') }
+ elseif ($vt -eq 'decimal') {
+ if ($vDisplay -match '^-?\d+$') { $obj['value'] = [int]$vDisplay }
+ else { $obj['value'] = [double]$vDisplay }
+ }
+ else { $obj['value'] = $vDisplay }
+ # Сохраняем полный xsi:type для bit-perfect эмиссии
+ $ta = $valNode.Attributes['xsi:type']
+ if ($ta) { $obj['valueType'] = $ta.Value }
+ }
if ($use -eq 'false') { $obj['use'] = $false }
if ($usid) { $obj['userSettingID'] = 'auto' }
+ if ($vmN) { $obj['viewMode'] = $vmN.InnerText }
+ if ($uspN) {
+ $uspV = Get-MLText $uspN
+ if ($uspV) { $obj['userSettingPresentation'] = $uspV }
+ }
$entries += $obj
} else {
# Build shorthand entry