From 36cd63d8bbaf4ce20e9f2a14fd95fdced5317f02 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 2 May 2026 17:22:48 +0300 Subject: [PATCH] =?UTF-8?q?fix(form-compile):=20AutoTitle=3Dfalse=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD=D0=B8=D1=8E?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D0=BE=D0=BC=20Title=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Когда у формы задан Title (через defn.title или properties.title), эмитим AutoTitle=false если пользователь явно его не указал. Иначе платформа добавляет суффикс синонима и получается двойной заголовок (Номенклатура: Номенклатура). В выгрузках ERP так делает ~95% форм с form-level Title. Снапшоты form-compile/form-compile-from-object обновлены под новое поведение. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../form-compile/scripts/form-compile.ps1 | 19 ++++++++++++++----- .../form-compile/scripts/form-compile.py | 15 +++++++++++---- .../Forms/ФормаСписка/Ext/Form.xml | 1 + .../Валюты/Forms/ФормаЭлемента/Ext/Form.xml | 1 + .../Валюты/Forms/ФормаСписка/Ext/Form.xml | 1 + .../Forms/ФормаЭлемента/Ext/Form.xml | 1 + .../Forms/ФормаСчета/Ext/Form.xml | 1 + .../Forms/ФормаСписка/Ext/Form.xml | 1 + .../Forms/ФормаСписка/Ext/Form.xml | 1 + .../Forms/ФормаЭлемента/Ext/Form.xml | 1 + .../Forms/ФормаСписка/Ext/Form.xml | 1 + .../Forms/ФормаЗаписи/Ext/Form.xml | 1 + .../КурсыВалют/Forms/ФормаЗаписи/Ext/Form.xml | 1 + .../Типы/Forms/Форма/Ext/Form.xml | 1 + .../Бригады/Forms/ФормаСписка/Ext/Form.xml | 1 + .../Товары/Forms/ФормаЭлемента/Ext/Form.xml | 1 + .../Команды/Forms/Форма/Ext/Form.xml | 1 + .../Товары/Forms/ФормаСписка/Ext/Form.xml | 1 + .../События/Forms/Форма/Ext/Form.xml | 1 + .../СГруппами/Forms/Форма/Ext/Form.xml | 1 + .../ПоляВвода/Forms/Форма/Ext/Form.xml | 1 + .../Минимальная/Forms/Форма/Ext/Form.xml | 1 + .../Тест/Forms/Форма/Ext/Form.xml | 1 + .../Таблица/Forms/Форма/Ext/Form.xml | 1 + 24 files changed, 47 insertions(+), 9 deletions(-) diff --git a/.claude/skills/form-compile/scripts/form-compile.ps1 b/.claude/skills/form-compile/scripts/form-compile.ps1 index 1025494f..599564ac 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.11 — Compile 1C managed form from JSON or object metadata +# form-compile v1.12 — Compile 1C managed form from JSON or object metadata # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$JsonPath, @@ -2805,17 +2805,26 @@ if ($formTitle) { } # 12b. Properties (skip 'title' — handled above as multilingual) +# When form-level Title is set, default autoTitle=false (≈95% of ERP forms do this; +# otherwise platform appends synonym → "Title: Synonym" double-titles). +$propsClone = New-Object PSObject +$hasAutoTitle = $false +if ($def.properties) { + foreach ($p in $def.properties.PSObject.Properties) { + if ($p.Name -eq "autoTitle") { $hasAutoTitle = $true } + } +} +if ($formTitle -and -not $hasAutoTitle) { + $propsClone | Add-Member -NotePropertyName "autoTitle" -NotePropertyValue $false +} if ($def.properties) { - $propsClone = New-Object PSObject foreach ($p in $def.properties.PSObject.Properties) { if ($p.Name -ne "title") { $propsClone | Add-Member -NotePropertyName $p.Name -NotePropertyValue $p.Value } } - Emit-Properties -props $propsClone -indent "`t" -} else { - Emit-Properties -props $null -indent "`t" } +Emit-Properties -props $propsClone -indent "`t" # 12c. CommandSet (excluded commands) if ($def.excludedCommands -and $def.excludedCommands.Count -gt 0) { diff --git a/.claude/skills/form-compile/scripts/form-compile.py b/.claude/skills/form-compile/scripts/form-compile.py index a31c5e75..f6d1f965 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.11 — Compile 1C managed form from JSON or object metadata +# form-compile v1.12 — Compile 1C managed form from JSON or object metadata # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import copy @@ -2681,9 +2681,16 @@ def main(): emit_mltext(lines, '\t', 'Title', str(form_title)) # Properties (skip 'title' — handled above) - if defn.get('properties'): - props_clone = {k: v for k, v in defn['properties'].items() if k != 'title'} - emit_properties(lines, props_clone, '\t') + # When form-level Title is set, default autoTitle=false (≈95% of ERP forms do this; + # otherwise platform appends synonym → "Title: Synonym" double-titles). + props_src = defn.get('properties') or {} + props_clone = OrderedDict() + if form_title and 'autoTitle' not in props_src: + props_clone['autoTitle'] = False + for k, v in props_src.items(): + if k != 'title': + props_clone[k] = v + emit_properties(lines, props_clone, '\t') # CommandSet (excluded commands) if defn.get('excludedCommands') and len(defn['excludedCommands']) > 0: diff --git a/tests/skills/cases/form-compile-from-object/snapshots/accumreg-list-simple/AccumulationRegisters/ДенежныеСредства/Forms/ФормаСписка/Ext/Form.xml b/tests/skills/cases/form-compile-from-object/snapshots/accumreg-list-simple/AccumulationRegisters/ДенежныеСредства/Forms/ФормаСписка/Ext/Form.xml index 54ff8a38..027f61c5 100644 --- a/tests/skills/cases/form-compile-from-object/snapshots/accumreg-list-simple/AccumulationRegisters/ДенежныеСредства/Forms/ФормаСписка/Ext/Form.xml +++ b/tests/skills/cases/form-compile-from-object/snapshots/accumreg-list-simple/AccumulationRegisters/ДенежныеСредства/Forms/ФормаСписка/Ext/Form.xml @@ -6,6 +6,7 @@ Денежные средства + false diff --git a/tests/skills/cases/form-compile-from-object/snapshots/catalog-item-simple/Catalogs/Валюты/Forms/ФормаЭлемента/Ext/Form.xml b/tests/skills/cases/form-compile-from-object/snapshots/catalog-item-simple/Catalogs/Валюты/Forms/ФормаЭлемента/Ext/Form.xml index 8997770e..d1433d96 100644 --- a/tests/skills/cases/form-compile-from-object/snapshots/catalog-item-simple/Catalogs/Валюты/Forms/ФормаЭлемента/Ext/Form.xml +++ b/tests/skills/cases/form-compile-from-object/snapshots/catalog-item-simple/Catalogs/Валюты/Forms/ФормаЭлемента/Ext/Form.xml @@ -6,6 +6,7 @@ Валюты + false diff --git a/tests/skills/cases/form-compile-from-object/snapshots/catalog-list-simple/Catalogs/Валюты/Forms/ФормаСписка/Ext/Form.xml b/tests/skills/cases/form-compile-from-object/snapshots/catalog-list-simple/Catalogs/Валюты/Forms/ФормаСписка/Ext/Form.xml index ac356343..62d0f1c7 100644 --- a/tests/skills/cases/form-compile-from-object/snapshots/catalog-list-simple/Catalogs/Валюты/Forms/ФормаСписка/Ext/Form.xml +++ b/tests/skills/cases/form-compile-from-object/snapshots/catalog-list-simple/Catalogs/Валюты/Forms/ФормаСписка/Ext/Form.xml @@ -6,6 +6,7 @@ Валюты + false
diff --git a/tests/skills/cases/form-compile-from-object/snapshots/ccoct-item-simple/ChartsOfCharacteristicTypes/ВидыНоменклатуры/Forms/ФормаЭлемента/Ext/Form.xml b/tests/skills/cases/form-compile-from-object/snapshots/ccoct-item-simple/ChartsOfCharacteristicTypes/ВидыНоменклатуры/Forms/ФормаЭлемента/Ext/Form.xml index 627849bc..d0e0ce02 100644 --- a/tests/skills/cases/form-compile-from-object/snapshots/ccoct-item-simple/ChartsOfCharacteristicTypes/ВидыНоменклатуры/Forms/ФормаЭлемента/Ext/Form.xml +++ b/tests/skills/cases/form-compile-from-object/snapshots/ccoct-item-simple/ChartsOfCharacteristicTypes/ВидыНоменклатуры/Forms/ФормаЭлемента/Ext/Form.xml @@ -6,6 +6,7 @@ Виды номенклатуры + false diff --git a/tests/skills/cases/form-compile-from-object/snapshots/chartofaccounts-item-simple/ChartsOfAccounts/Хозрасчетный/Forms/ФормаСчета/Ext/Form.xml b/tests/skills/cases/form-compile-from-object/snapshots/chartofaccounts-item-simple/ChartsOfAccounts/Хозрасчетный/Forms/ФормаСчета/Ext/Form.xml index 8fca75b0..3597f6cf 100644 --- a/tests/skills/cases/form-compile-from-object/snapshots/chartofaccounts-item-simple/ChartsOfAccounts/Хозрасчетный/Forms/ФормаСчета/Ext/Form.xml +++ b/tests/skills/cases/form-compile-from-object/snapshots/chartofaccounts-item-simple/ChartsOfAccounts/Хозрасчетный/Forms/ФормаСчета/Ext/Form.xml @@ -6,6 +6,7 @@ Хозрасчетный + false diff --git a/tests/skills/cases/form-compile-from-object/snapshots/chartofaccounts-list-simple/ChartsOfAccounts/Хозрасчетный/Forms/ФормаСписка/Ext/Form.xml b/tests/skills/cases/form-compile-from-object/snapshots/chartofaccounts-list-simple/ChartsOfAccounts/Хозрасчетный/Forms/ФормаСписка/Ext/Form.xml index af82121a..43224411 100644 --- a/tests/skills/cases/form-compile-from-object/snapshots/chartofaccounts-list-simple/ChartsOfAccounts/Хозрасчетный/Forms/ФормаСписка/Ext/Form.xml +++ b/tests/skills/cases/form-compile-from-object/snapshots/chartofaccounts-list-simple/ChartsOfAccounts/Хозрасчетный/Forms/ФормаСписка/Ext/Form.xml @@ -6,6 +6,7 @@ Хозрасчетный + false
diff --git a/tests/skills/cases/form-compile-from-object/snapshots/document-list-medium/Documents/АктВыполненныхВнутреннихРабот/Forms/ФормаСписка/Ext/Form.xml b/tests/skills/cases/form-compile-from-object/snapshots/document-list-medium/Documents/АктВыполненныхВнутреннихРабот/Forms/ФормаСписка/Ext/Form.xml index 314dfea3..47b6946e 100644 --- a/tests/skills/cases/form-compile-from-object/snapshots/document-list-medium/Documents/АктВыполненныхВнутреннихРабот/Forms/ФормаСписка/Ext/Form.xml +++ b/tests/skills/cases/form-compile-from-object/snapshots/document-list-medium/Documents/АктВыполненныхВнутреннихРабот/Forms/ФормаСписка/Ext/Form.xml @@ -6,6 +6,7 @@ Акт выполненных внутренних работ + false
diff --git a/tests/skills/cases/form-compile-from-object/snapshots/exchangeplan-item-simple/ExchangePlans/ОбменДанными/Forms/ФормаЭлемента/Ext/Form.xml b/tests/skills/cases/form-compile-from-object/snapshots/exchangeplan-item-simple/ExchangePlans/ОбменДанными/Forms/ФормаЭлемента/Ext/Form.xml index 6881ccff..18a0546b 100644 --- a/tests/skills/cases/form-compile-from-object/snapshots/exchangeplan-item-simple/ExchangePlans/ОбменДанными/Forms/ФормаЭлемента/Ext/Form.xml +++ b/tests/skills/cases/form-compile-from-object/snapshots/exchangeplan-item-simple/ExchangePlans/ОбменДанными/Forms/ФормаЭлемента/Ext/Form.xml @@ -6,6 +6,7 @@ Обмен данными + false diff --git a/tests/skills/cases/form-compile-from-object/snapshots/inforeg-list-periodic/InformationRegisters/ЦеныНоменклатуры/Forms/ФормаСписка/Ext/Form.xml b/tests/skills/cases/form-compile-from-object/snapshots/inforeg-list-periodic/InformationRegisters/ЦеныНоменклатуры/Forms/ФормаСписка/Ext/Form.xml index 0e1d23ef..6609ba2b 100644 --- a/tests/skills/cases/form-compile-from-object/snapshots/inforeg-list-periodic/InformationRegisters/ЦеныНоменклатуры/Forms/ФормаСписка/Ext/Form.xml +++ b/tests/skills/cases/form-compile-from-object/snapshots/inforeg-list-periodic/InformationRegisters/ЦеныНоменклатуры/Forms/ФормаСписка/Ext/Form.xml @@ -6,6 +6,7 @@ Цены номенклатуры + false
diff --git a/tests/skills/cases/form-compile-from-object/snapshots/inforeg-record-nonperiodic/InformationRegisters/АдресаМагазинов/Forms/ФормаЗаписи/Ext/Form.xml b/tests/skills/cases/form-compile-from-object/snapshots/inforeg-record-nonperiodic/InformationRegisters/АдресаМагазинов/Forms/ФормаЗаписи/Ext/Form.xml index e0df2b8b..fb1644b8 100644 --- a/tests/skills/cases/form-compile-from-object/snapshots/inforeg-record-nonperiodic/InformationRegisters/АдресаМагазинов/Forms/ФормаЗаписи/Ext/Form.xml +++ b/tests/skills/cases/form-compile-from-object/snapshots/inforeg-record-nonperiodic/InformationRegisters/АдресаМагазинов/Forms/ФормаЗаписи/Ext/Form.xml @@ -6,6 +6,7 @@ Адреса магазинов + falseLockOwnerWindow diff --git a/tests/skills/cases/form-compile-from-object/snapshots/inforeg-record-periodic/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Ext/Form.xml b/tests/skills/cases/form-compile-from-object/snapshots/inforeg-record-periodic/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Ext/Form.xml index f497c3df..6b67a02a 100644 --- a/tests/skills/cases/form-compile-from-object/snapshots/inforeg-record-periodic/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Ext/Form.xml +++ b/tests/skills/cases/form-compile-from-object/snapshots/inforeg-record-periodic/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Ext/Form.xml @@ -6,6 +6,7 @@ Курсы валют + false LockOwnerWindow diff --git a/tests/skills/cases/form-compile/snapshots/attributes-types/DataProcessors/Типы/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-compile/snapshots/attributes-types/DataProcessors/Типы/Forms/Форма/Ext/Form.xml index 182aea4d..ffa777f6 100644 --- a/tests/skills/cases/form-compile/snapshots/attributes-types/DataProcessors/Типы/Forms/Форма/Ext/Form.xml +++ b/tests/skills/cases/form-compile/snapshots/attributes-types/DataProcessors/Типы/Forms/Форма/Ext/Form.xml @@ -6,6 +6,7 @@ Разные типы + false diff --git a/tests/skills/cases/form-compile/snapshots/auto-cmd-bar/Catalogs/Бригады/Forms/ФормаСписка/Ext/Form.xml b/tests/skills/cases/form-compile/snapshots/auto-cmd-bar/Catalogs/Бригады/Forms/ФормаСписка/Ext/Form.xml index a4fb4c16..7691c445 100644 --- a/tests/skills/cases/form-compile/snapshots/auto-cmd-bar/Catalogs/Бригады/Forms/ФормаСписка/Ext/Form.xml +++ b/tests/skills/cases/form-compile/snapshots/auto-cmd-bar/Catalogs/Бригады/Forms/ФормаСписка/Ext/Form.xml @@ -6,6 +6,7 @@ Бригады + false
diff --git a/tests/skills/cases/form-compile/snapshots/events/DataProcessors/События/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-compile/snapshots/events/DataProcessors/События/Forms/Форма/Ext/Form.xml index 2393fec5..820f90ab 100644 --- a/tests/skills/cases/form-compile/snapshots/events/DataProcessors/События/Forms/Форма/Ext/Form.xml +++ b/tests/skills/cases/form-compile/snapshots/events/DataProcessors/События/Forms/Форма/Ext/Form.xml @@ -6,6 +6,7 @@ События + false ПриСозданииНаСервере diff --git a/tests/skills/cases/form-compile/snapshots/groups/DataProcessors/СГруппами/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-compile/snapshots/groups/DataProcessors/СГруппами/Forms/Форма/Ext/Form.xml index 3cf25ee8..ea8801a9 100644 --- a/tests/skills/cases/form-compile/snapshots/groups/DataProcessors/СГруппами/Forms/Форма/Ext/Form.xml +++ b/tests/skills/cases/form-compile/snapshots/groups/DataProcessors/СГруппами/Forms/Форма/Ext/Form.xml @@ -6,6 +6,7 @@ Группы + false false diff --git a/tests/skills/cases/form-compile/snapshots/input-fields/DataProcessors/ПоляВвода/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-compile/snapshots/input-fields/DataProcessors/ПоляВвода/Forms/Форма/Ext/Form.xml index 60f1fabc..ce898f1c 100644 --- a/tests/skills/cases/form-compile/snapshots/input-fields/DataProcessors/ПоляВвода/Forms/Форма/Ext/Form.xml +++ b/tests/skills/cases/form-compile/snapshots/input-fields/DataProcessors/ПоляВвода/Forms/Форма/Ext/Form.xml @@ -6,6 +6,7 @@ Поля ввода + false diff --git a/tests/skills/cases/form-compile/snapshots/minimal/DataProcessors/Минимальная/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-compile/snapshots/minimal/DataProcessors/Минимальная/Forms/Форма/Ext/Form.xml index 51cf9aff..9e065af0 100644 --- a/tests/skills/cases/form-compile/snapshots/minimal/DataProcessors/Минимальная/Forms/Форма/Ext/Form.xml +++ b/tests/skills/cases/form-compile/snapshots/minimal/DataProcessors/Минимальная/Forms/Форма/Ext/Form.xml @@ -6,5 +6,6 @@ Минимальная форма + false diff --git a/tests/skills/cases/form-compile/snapshots/synonyms/DataProcessors/Тест/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-compile/snapshots/synonyms/DataProcessors/Тест/Forms/Форма/Ext/Form.xml index a11fba9b..8e01c701 100644 --- a/tests/skills/cases/form-compile/snapshots/synonyms/DataProcessors/Тест/Forms/Форма/Ext/Form.xml +++ b/tests/skills/cases/form-compile/snapshots/synonyms/DataProcessors/Тест/Forms/Форма/Ext/Form.xml @@ -6,6 +6,7 @@ Тест синонимов + false