diff --git a/.claude/skills/form-compile/scripts/form-compile.ps1 b/.claude/skills/form-compile/scripts/form-compile.ps1 index 2f614b77..deee8b2b 100644 --- a/.claude/skills/form-compile/scripts/form-compile.ps1 +++ b/.claude/skills/form-compile/scripts/form-compile.ps1 @@ -1,4 +1,4 @@ -# form-compile v1.109 — Compile 1C managed form from JSON or object metadata +# form-compile v1.110 — Compile 1C managed form from JSON or object metadata # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$JsonPath, @@ -5206,6 +5206,8 @@ function Emit-Attributes { # Schema-параметры дин-списка (DataCompositionSchemaParameter) — после Field*, до MainTable. Emit-DLParameters -params $st.parameters -indent $si if ($st.mainTable) { X "$si$(Normalize-MetaTypeRef "$($st.mainTable)")" } + # AutoSaveUserSettings — после MainTable (дефолт true; эмитим только при заданном ключе = отклонении). + if ($null -ne $st.autoSaveUserSettings) { X "$si$(if ($st.autoSaveUserSettings){'true'}else{'false'})" } # ListSettings: filter/order/conditionalAppearance (skd-грамматика) + каноничные блок-GUID. # Нет items → контейнеры всё равно эмитятся (blockMeta) = каноничный пустой скелет платформы. $lsi = "$si`t" diff --git a/.claude/skills/form-compile/scripts/form-compile.py b/.claude/skills/form-compile/scripts/form-compile.py index 2d3c6fd3..8e07ec57 100644 --- a/.claude/skills/form-compile/scripts/form-compile.py +++ b/.claude/skills/form-compile/scripts/form-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# form-compile v1.109 — Compile 1C managed form from JSON or object metadata +# form-compile v1.110 — Compile 1C managed form from JSON or object metadata # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import copy @@ -4922,6 +4922,9 @@ def emit_attributes(lines, attrs, indent, conditional_appearance=None): emit_dl_parameters(lines, s.get('parameters'), si) if s.get('mainTable'): lines.append(f'{si}{normalize_meta_type_ref(str(s["mainTable"]))}') + # AutoSaveUserSettings — после MainTable (дефолт true; эмитим только при заданном ключе = отклонении). + if s.get('autoSaveUserSettings') is not None: + lines.append(f'{si}{"true" if s["autoSaveUserSettings"] else "false"}') # ListSettings: filter/order/conditionalAppearance (skd-грамматика) + каноничные блок-GUID. # Нет items → контейнеры всё равно эмитятся (blockMeta) = каноничный пустой скелет платформы. lsi = f'{si}\t' diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1 index 25459527..1bae0ad8 100644 --- a/.claude/skills/form-decompile/scripts/form-decompile.ps1 +++ b/.claude/skills/form-decompile/scripts/form-decompile.ps1 @@ -1,4 +1,4 @@ -# form-decompile v0.85 — Decompile 1C managed Form.xml to JSON DSL (draft) +# form-decompile v0.86 — Decompile 1C managed Form.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью. param( @@ -2325,6 +2325,9 @@ if ($attrsNode) { # AutoFillAvailableFields — дефолт true, платформа эмитит только отклонение (false). Захват «как есть». $afaf = Get-Child $setNode 'AutoFillAvailableFields'; if ($null -ne $afaf) { $so['autoFillAvailableFields'] = ($afaf -eq 'true') } $mt = Get-Child $setNode 'MainTable'; if ($mt) { $so['mainTable'] = $mt } + # AutoSaveUserSettings — авто-сохранение польз. настроек дин-списка (в корпусе только false; + # дефолт true → платформа эмитит отклонение). Захват факт. значения. + $asus = Get-Child $setNode 'AutoSaveUserSettings'; if ($null -ne $asus) { $so['autoSaveUserSettings'] = ($asus -eq 'true') } $qtNode = $setNode.SelectSingleNode("lf:QueryText", $ns) if ($qtNode -and $qtNode.InnerText) { $so['query'] = Maybe-ExternalizeQuery -queryText $qtNode.InnerText -listName "$($ao['name'])" } # DynamicDataRead: дефолт true → эмитим только false diff --git a/docs/form-dsl-spec.md b/docs/form-dsl-spec.md index 355f95cd..fe9cf762 100644 --- a/docs/form-dsl-spec.md +++ b/docs/form-dsl-spec.md @@ -913,6 +913,7 @@ Forgiving-синонимы типа: XML-имя (`SpreadSheetDocumentField`) и | Ключ | Тип | Описание | |------|-----|----------| | `mainTable` | string | Основная таблица. Принимает рус-имена метаданных (`Справочник.X` → `Catalog.X`) | +| `autoSaveUserSettings` | bool | Авто-сохранение пользовательских настроек дин-списка (``, после `MainTable`). **Умолчание `true`** — указывать только для отключения (`false`) | | `query` | string | Текст запроса (`ManualQuery=true`). Поддерживает `@file.sql` (путь относительно JSON) | | `dynamicDataRead` | bool | Динамическое считывание. **Умолчание `true`** — указывать только для отключения (`false`) | | `autoFillAvailableFields` | bool | Автозаполнение доступных полей (``). **Умолчание `true`** — указывать только для отключения (`false`; тогда поля берутся из явного запроса, не авто). Эмитится первым в `` | diff --git a/tests/skills/cases/form-compile/dynamic-list-form.json b/tests/skills/cases/form-compile/dynamic-list-form.json index b807341e..0804d445 100644 --- a/tests/skills/cases/form-compile/dynamic-list-form.json +++ b/tests/skills/cases/form-compile/dynamic-list-form.json @@ -18,7 +18,7 @@ "properties": { "saveWindowSettings": false }, "attributes": [ { "name": "Список", "type": "DynamicList", "useAlways": ["~Артикул", "Список.Code", "Description"], "settings": { - "mainTable": "Catalog.Товары", "dynamicDataRead": true, + "mainTable": "Catalog.Товары", "dynamicDataRead": true, "autoSaveUserSettings": false, "order": [ "Description", "Code desc" ], "filter": [ "Артикул = _ @off @user" ], "conditionalAppearance": [ { "filter": ["Артикул = _"], "appearance": { "ЦветТекста": "web:Red" } } ] diff --git a/tests/skills/cases/form-compile/snapshots/dynamic-list-form/Catalogs/Товары/Forms/ФормаСписка/Ext/Form.xml b/tests/skills/cases/form-compile/snapshots/dynamic-list-form/Catalogs/Товары/Forms/ФормаСписка/Ext/Form.xml index e71ee343..2c3633c5 100644 --- a/tests/skills/cases/form-compile/snapshots/dynamic-list-form/Catalogs/Товары/Forms/ФормаСписка/Ext/Form.xml +++ b/tests/skills/cases/form-compile/snapshots/dynamic-list-form/Catalogs/Товары/Forms/ФормаСписка/Ext/Form.xml @@ -98,6 +98,7 @@ false true Catalog.Товары + false