mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-19 17:19:42 +03:00
feat(form-decompile,form-compile): измерения планировщика (dimensions) — Planner Phase 1
Расширение Phase 1 кластера Chart-Settings: реквизит pl:Planner теперь несёт измерения планировщика (<pl:dimension> — «Измерения» в конфигураторе) с элементами. DSL planner.dimensions[]: объект разреза (value — ссылка xr:DesignTimeRef или nil, text-заголовок, цвета, font) + elements[] (элементы измерения, РЕКУРСИВНЫ — могут нести вложенные elements, как показывает UI колонкой «Элементы»; поле showOnlySubordinatesAreas). Тип value авто-выводится: ссылочный вид → xsi:type="xr:DesignTimeRef", иначе xs:string. Пустой текст → самозакрывающийся <pl:text/> (как в выгрузке). Общие хелперы Emit/Get-PlannerValue/Text применены и к элементам расписания (items). Раундтрип бит-в-бит: синтетика upload/epf/Диаграммы (items + 2 dimensions + вложенные elements + period). Зеркало py (ps1==py байт-в-байт). Кейс chart-fields расширен измерением (nil-разрез + xs:string-элемент + showOnlySubordinatesAreas), сертифицирован загрузкой в 1С. Регресс 41/41 (ps1+py). Ограничение: item.dimensionValues (привязка элемента расписания к элементам измерений) пока всегда пустой. 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
f064d53eb2
commit
f534add7b4
@@ -1,4 +1,4 @@
|
||||
# form-decompile v0.80 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# form-decompile v0.81 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
||||
param(
|
||||
@@ -1838,6 +1838,13 @@ function Decompile-Element {
|
||||
# Полный захват каждого поля (раундтрип бит-в-бит); зеркало Emit-PlannerSettings.
|
||||
function PLD-Bool { param($v) if ($null -eq $v) { return $null } return ($v -eq 'true') }
|
||||
function PLD-Int { param($v) if ($null -eq $v) { return $null } return [int]$v }
|
||||
# <pl:value> → текст (тип xr:DesignTimeRef/xs:string выводится компилятором из вида значения); nil → $null.
|
||||
function Get-PlannerValue {
|
||||
param($node)
|
||||
if (-not $node) { return $null }
|
||||
if ($node.GetAttribute('nil', $NS_XSI) -eq 'true') { return $null }
|
||||
if ($node.InnerText) { return $node.InnerText } else { return $null }
|
||||
}
|
||||
function Build-PlannerFont {
|
||||
param($node)
|
||||
if (-not $node) { return $null }
|
||||
@@ -1877,6 +1884,37 @@ function Build-PlannerItem {
|
||||
$o['editMode'] = (Get-Child $itn 'editMode')
|
||||
return $o
|
||||
}
|
||||
function Build-PlannerDimElement {
|
||||
param($eln)
|
||||
$o = [ordered]@{}
|
||||
$v = Get-PlannerValue ($eln.SelectSingleNode("*[local-name()='value']")); if ($null -ne $v) { $o['value'] = $v }
|
||||
$o['text'] = (Get-Child $eln 'text')
|
||||
$o['borderColor'] = (Get-Child $eln 'borderColor')
|
||||
$o['backColor'] = (Get-Child $eln 'backColor')
|
||||
$o['textColor'] = (Get-Child $eln 'textColor')
|
||||
$fnt = Build-PlannerFont ($eln.SelectSingleNode("*[local-name()='font']")); if ($fnt) { $o['font'] = $fnt }
|
||||
$subs = New-Object System.Collections.ArrayList
|
||||
foreach ($s in @($eln.SelectNodes("*[local-name()='item']"))) { [void]$subs.Add((Build-PlannerDimElement $s)) }
|
||||
if ($subs.Count -gt 0) { $o['elements'] = @($subs) }
|
||||
$sos = Get-Child $eln 'showOnlySubordinatesAreas'; if ($null -ne $sos) { $o['showOnlySubordinatesAreas'] = ($sos -eq 'true') }
|
||||
$o['textFormatted'] = (PLD-Bool (Get-Child $eln 'textFormatted'))
|
||||
return $o
|
||||
}
|
||||
function Build-PlannerDimension {
|
||||
param($dn)
|
||||
$o = [ordered]@{}
|
||||
$v = Get-PlannerValue ($dn.SelectSingleNode("*[local-name()='value']")); if ($null -ne $v) { $o['value'] = $v }
|
||||
$o['text'] = (Get-Child $dn 'text')
|
||||
$o['borderColor'] = (Get-Child $dn 'borderColor')
|
||||
$o['backColor'] = (Get-Child $dn 'backColor')
|
||||
$o['textColor'] = (Get-Child $dn 'textColor')
|
||||
$fnt = Build-PlannerFont ($dn.SelectSingleNode("*[local-name()='font']")); if ($fnt) { $o['font'] = $fnt }
|
||||
$els = New-Object System.Collections.ArrayList
|
||||
foreach ($e in @($dn.SelectNodes("*[local-name()='item']"))) { [void]$els.Add((Build-PlannerDimElement $e)) }
|
||||
if ($els.Count -gt 0) { $o['elements'] = @($els) }
|
||||
$o['textFormatted'] = (PLD-Bool (Get-Child $dn 'textFormatted'))
|
||||
return $o
|
||||
}
|
||||
function Build-PlannerLevel {
|
||||
param($lvn)
|
||||
$o = [ordered]@{}
|
||||
@@ -1924,6 +1962,12 @@ function Build-PlannerSettings {
|
||||
foreach ($itn in $itemNodes) { [void]$items.Add((Build-PlannerItem $itn)) }
|
||||
$pl['items'] = @($items)
|
||||
}
|
||||
$dimNodes = @($setNode.SelectNodes("*[local-name()='dimension']"))
|
||||
if ($dimNodes.Count -gt 0) {
|
||||
$dims = New-Object System.Collections.ArrayList
|
||||
foreach ($dn in $dimNodes) { [void]$dims.Add((Build-PlannerDimension $dn)) }
|
||||
$pl['dimensions'] = @($dims)
|
||||
}
|
||||
$pl['borderColor'] = (Get-Child $setNode 'borderColor')
|
||||
$pl['backColor'] = (Get-Child $setNode 'backColor')
|
||||
$pl['textColor'] = (Get-Child $setNode 'textColor')
|
||||
|
||||
Reference in New Issue
Block a user