feat(form-decompile,form-compile): свойства поля DataSet динсписка — presentationExpression + appearance

Обычное поле набора <Field DataSetFieldField> может нести:
- <dcssch:presentationExpression> (выражение представления поля, 30 форм) — строка;
- <dcssch:appearance> (формат/оформление поля, ~9 форм) — dcscor:item SettingsParameterValue
  (тот же блок, что в условном оформлении: параметр→значение с типизацией).

DSL: settings.fields[].presentationExpression (строка) + fields[].appearance (объект
{параметр:значение}). Декомпилятор: захват presentationExpression + appearance через
существующий Get-SettingsAppearance. Компилятор (ps1+py): presentationExpression перед
valueType, appearance после valueType (порядок исходника, подтверждён корпус-сигнатурами);
appearance переиспользует Emit-AppearanceValue/emit_appearance_value.

Выборка 36 форм с field pres/appearance: match 33/36, 0 потерь pres/appearance (остаток
3 формы — несвязанные нюансы пустого value параметра / пустого LocalStringType). Кейс
dynamic-list-form (+явное поле Code с presentationExpression+appearance Формат/ЦветТекста)
сертифицирован загрузкой в 1С. Регресс 43/43, ps1==py (общий снэпшот на обоих рантаймах).

Остаток field-свойств (BACKLOG): useRestriction/attributeUseRestriction/inputParameters/
order на обычном <Field> + 2 раскрытых нюанса (пустой xs:string value vs nil; пустой
LocalStringType self-closing vs пара).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-06-12 19:52:19 +03:00
co-authored by Claude Opus 4.8
parent 73b07a6fbc
commit dab122c166
6 changed files with 51 additions and 4 deletions
@@ -1,4 +1,4 @@
# form-decompile v0.113 — Decompile 1C managed Form.xml to JSON DSL (draft)
# form-decompile v0.114 — Decompile 1C managed Form.xml to JSON DSL (draft)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
param(
@@ -2614,6 +2614,11 @@ if ($attrsNode) {
# valueType поля набора (тип значения; вычисляемые/кастомные поля). Грамматика типа.
$fvt = $fn.SelectSingleNode("dcssch:valueType", $ns)
if ($fvt) { $fvtVal = Decompile-Type $fvt; if ($fvtVal) { $fo['valueType'] = $fvtVal } }
# presentationExpression (выражение представления поля) + appearance (формат/оформление поля)
$fpe = Get-Child $fn 'presentationExpression'
if ($null -ne $fpe -and $fpe -ne '') { $fo['presentationExpression'] = $fpe }
$fappNode = $fn.SelectSingleNode("dcssch:appearance", $ns)
if ($fappNode) { $fap = Get-SettingsAppearance $fappNode; if ($fap -and $fap.Count -gt 0) { $fo['appearance'] = $fap } }
[void]$fields.Add($fo)
}
$so['fields'] = @($fields)