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:
Nick Shirokov
2026-06-08 17:59:55 +03:00
co-authored by Claude Opus 4.8
parent 09c3dcd988
commit 5a67c56e92
6 changed files with 88 additions and 7 deletions
@@ -23,10 +23,11 @@
],
"attributes": [
{ "name": "Объект", "type": "DataProcessorObject.Типы", "main": true },
{ "name": "Строка", "type": "string(200)", "view": false },
{ "name": "Строка", "type": "string(200)", "view": false, "save": true },
{ "name": "Число", "type": "decimal(10,0,nonneg)", "edit": false },
{ "name": "Дата", "type": "dateTime", "title": "" },
{ "name": "Булево", "type": "boolean" },
{ "name": "Период", "type": "v8:StandardPeriod", "save": ["Период", "EndDate", "StartDate", "Variant"] },
{ "name": "СписокЗначений", "type": "ValueList" },
{ "name": "Идентификатор", "type": "v8:UUID" }
]
@@ -57,6 +57,9 @@
<View>
<xr:Common>false</xr:Common>
</View>
<Save>
<Field>Строка</Field>
</Save>
</Attribute>
<Attribute name="Число" id="15">
<Title>
@@ -96,7 +99,24 @@
<v8:Type>xs:boolean</v8:Type>
</Type>
</Attribute>
<Attribute name="СписокЗначений" id="18">
<Attribute name="Период" id="18">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Период</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>v8:StandardPeriod</v8:Type>
</Type>
<Save>
<Field>Период</Field>
<Field>Период.EndDate</Field>
<Field>Период.StartDate</Field>
<Field>Период.Variant</Field>
</Save>
</Attribute>
<Attribute name="СписокЗначений" id="19">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -107,7 +127,7 @@
<v8:Type>v8:ValueListType</v8:Type>
</Type>
</Attribute>
<Attribute name="Идентификатор" id="19">
<Attribute name="Идентификатор" id="20">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>