mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-04 18:50:23 +03:00
feat(form-decompile,form-compile): AdditionalColumns — доп. колонки табличных частей объекта
<Columns><AdditionalColumns table="Объект.ТабЧасть"><Column>…</AdditionalColumns></Columns>
у главного реквизита-объекта (3654 формы, 10187 блоков) — форма-определённые доп.
колонки табличных частей. Декомпилятор читал только прямые <Column> (SelectNodes lf:Column),
теряя AdditionalColumns целиком (часто весь <Columns> блок объекта).
Ключ реквизита additionalColumns: [{ table, columns: [<col>] }]; <col> — та же грамматика,
что у columns (name/type/title/functionalOptions). Общие хелперы Emit/Decompile-AttrColumn
(переиспользуются прямыми колонками и AdditionalColumns). Порядок схемы: прямые <Column>
сначала, затем AdditionalColumns-группы.
TOTAL diff lines выборки 2.17: 3695 → 3347 (-348). Attribute>Columns/AdditionalColumns
residual → 0. Новый кейс additional-columns (DataProcessor с табчастью + форма) сертифицирован
в 1С (8.3.24). Регресс form-compile 34/34 зелёный на ps + python.
decompile v0.37, compile v1.55.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
6056a4a5af
commit
786bdf97d9
@@ -1,4 +1,4 @@
|
||||
# form-decompile v0.36 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# form-decompile v0.37 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
||||
param(
|
||||
@@ -816,6 +816,16 @@ function Decompile-FunctionalOptions {
|
||||
return $null
|
||||
}
|
||||
|
||||
# Колонка реквизита (прямая или внутри AdditionalColumns): name/type/title/functionalOptions.
|
||||
function Decompile-AttrColumn {
|
||||
param($c)
|
||||
$co = [ordered]@{}; $co['name'] = $c.GetAttribute("name")
|
||||
$cty = Decompile-Type ($c.SelectSingleNode("lf:Type", $ns)); if ($cty) { $co['type'] = $cty }
|
||||
$ctNode = $c.SelectSingleNode("lf:Title", $ns); if ($ctNode) { $t = Get-LangText $ctNode; if ($null -ne $t) { $co['title'] = $t } }
|
||||
$cfo = Decompile-FunctionalOptions $c; if ($cfo) { $co['functionalOptions'] = $cfo }
|
||||
return $co
|
||||
}
|
||||
|
||||
# Общие свойства элемента (visible/enabled/readonly/title/events) → в hash
|
||||
function Add-CommonProps {
|
||||
param($obj, $node, [string]$elName)
|
||||
@@ -1320,14 +1330,21 @@ if ($attrsNode) {
|
||||
$colsNode = $a.SelectSingleNode("lf:Columns", $ns)
|
||||
if ($colsNode) {
|
||||
$cols = New-Object System.Collections.ArrayList
|
||||
foreach ($c in @($colsNode.SelectNodes("lf:Column", $ns))) {
|
||||
$co = [ordered]@{}; $co['name'] = $c.GetAttribute("name")
|
||||
$cty = Decompile-Type ($c.SelectSingleNode("lf:Type", $ns)); if ($cty) { $co['type'] = $cty }
|
||||
$ctNode = $c.SelectSingleNode("lf:Title", $ns); if ($ctNode) { $t = Get-LangText $ctNode; if ($null -ne $t) { $co['title'] = $t } }
|
||||
$cfo = Decompile-FunctionalOptions $c; if ($cfo) { $co['functionalOptions'] = $cfo }
|
||||
[void]$cols.Add($co)
|
||||
}
|
||||
foreach ($c in @($colsNode.SelectNodes("lf:Column", $ns))) { [void]$cols.Add((Decompile-AttrColumn $c)) }
|
||||
if ($cols.Count -gt 0) { $ao['columns'] = @($cols) }
|
||||
# AdditionalColumns: доп. колонки табличных частей объекта (группа на табличную часть)
|
||||
$addNodes = @($colsNode.SelectNodes("lf:AdditionalColumns", $ns))
|
||||
if ($addNodes.Count -gt 0) {
|
||||
$addList = New-Object System.Collections.ArrayList
|
||||
foreach ($an in $addNodes) {
|
||||
$acObj = [ordered]@{}; $acObj['table'] = $an.GetAttribute("table")
|
||||
$acCols = New-Object System.Collections.ArrayList
|
||||
foreach ($c in @($an.SelectNodes("lf:Column", $ns))) { [void]$acCols.Add((Decompile-AttrColumn $c)) }
|
||||
$acObj['columns'] = @($acCols)
|
||||
[void]$addList.Add($acObj)
|
||||
}
|
||||
$ao['additionalColumns'] = @($addList)
|
||||
}
|
||||
}
|
||||
# UseAlways: поля, всегда читаемые. Префикс "ИмяРеквизита." снимаем.
|
||||
# ValueTable (есть columns): useAlways:true на совпавшей колонке; остальные → массив атрибута.
|
||||
|
||||
Reference in New Issue
Block a user