mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-20 09:30:59 +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-decompile v0.52 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# form-decompile v0.53 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
||||
param(
|
||||
@@ -1689,6 +1689,21 @@ if ($attrsNode) {
|
||||
$ao['title'] = ''
|
||||
}
|
||||
if ((Get-Child $a 'SavedData') -eq 'true') { $ao['savedData'] = $true }
|
||||
# Save: сохранение значения реквизита в пользовательских настройках. Один Field=имя → save:true;
|
||||
# иначе снимаем префикс "имя." (голое имя/UUID/прочее — как есть) → строка (1) или массив.
|
||||
$saveNode = $a.SelectSingleNode("lf:Save", $ns)
|
||||
if ($saveNode) {
|
||||
$nm = "$($ao['name'])"
|
||||
$flds = @($saveNode.SelectNodes("lf:Field", $ns) | ForEach-Object { $_.InnerText })
|
||||
if ($flds.Count -eq 1 -and $flds[0] -eq $nm) {
|
||||
$ao['save'] = $true
|
||||
} elseif ($flds.Count -gt 0) {
|
||||
$stripped = @($flds | ForEach-Object {
|
||||
if ($_ -match "^$([regex]::Escape($nm))\.(.+)$") { $matches[1] } else { $_ }
|
||||
})
|
||||
if ($stripped.Count -eq 1) { $ao['save'] = $stripped[0] } else { $ao['save'] = $stripped }
|
||||
}
|
||||
}
|
||||
$fc = Get-Child $a 'FillChecking'; if ($fc) { $ao['fillChecking'] = $fc }
|
||||
$afo = Decompile-FunctionalOptions $a; if ($afo) { $ao['functionalOptions'] = $afo }
|
||||
$colsNode = $a.SelectSingleNode("lf:Columns", $ns)
|
||||
|
||||
Reference in New Issue
Block a user