mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-01 09:17:44 +03:00
feat(form-decompile,form-compile): Save — сохранение значения реквизита в польз. настройках
Ключ save на реквизите формы (<Save><Field>…): - true → <Field>имя</Field> (голое имя, 93% случаев) - строка/массив строк → под-поля с авто-префиксом "имя." (путь с точкой, UUID 1/0:guid, или совпадающее с именем — берутся как есть) - нет ключа или false → не эмитим Гипотеза подтверждена на корпусе: Field=имя в 383/410 (93%); gating формовыми SaveDataInSettings/AutoSaveDataInSettings НЕ требуется (51/160 форм с Save без них). Период-кейс (голое имя Период + Период.EndDate/StartDate/Variant) round-trip бит-в-бит. Переиспользует механику нормализации useAlways. ≠ savedData (отдельное, уже было). Декомпилятор: один Field=имя → save:true, иначе массив со снятым префиксом. Зеркало py (байт-в-байт), кейс attributes-types сертифицирован в 1С. Регресс 39/39 ps1+py. 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
09c3dcd988
commit
5a67c56e92
@@ -1,4 +1,4 @@
|
||||
# form-compile v1.75 — Compile 1C managed form from JSON or object metadata
|
||||
# form-compile v1.76 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[string]$JsonPath,
|
||||
@@ -4400,6 +4400,27 @@ function Emit-Attributes {
|
||||
if ($attr.savedData -eq $true -or $mainSaved) {
|
||||
X "$inner<SavedData>true</SavedData>"
|
||||
}
|
||||
# Save: сохранение значения реквизита в пользовательских настройках. true → <Field>имя</Field>;
|
||||
# строка/массив → под-поля с авто-префиксом "имя." (путь с точкой / UUID / =имя — как есть).
|
||||
# Нет ключа или false → не эмитим.
|
||||
if ($null -ne $attr.PSObject.Properties['save'] -and $null -ne $attr.save) {
|
||||
$saveFields = New-Object System.Collections.ArrayList
|
||||
if ($attr.save -is [bool]) {
|
||||
if ($attr.save) { [void]$saveFields.Add($attrName) }
|
||||
} else {
|
||||
foreach ($e in @($attr.save)) {
|
||||
$fld = "$e"
|
||||
if ([string]::IsNullOrEmpty($fld)) { continue }
|
||||
if ($fld -ne $attrName -and $fld -notmatch '\.' -and $fld -notmatch '^\d+/\d+:') { $fld = "$attrName.$fld" }
|
||||
if (-not $saveFields.Contains($fld)) { [void]$saveFields.Add($fld) }
|
||||
}
|
||||
}
|
||||
if ($saveFields.Count -gt 0) {
|
||||
X "$inner<Save>"
|
||||
foreach ($f in $saveFields) { X "$inner`t<Field>$(Esc-Xml $f)</Field>" }
|
||||
X "$inner</Save>"
|
||||
}
|
||||
}
|
||||
if ($attr.fillChecking) {
|
||||
X "$inner<FillChecking>$($attr.fillChecking)</FillChecking>"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user