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): суппресс авто-вывода (MainAttribute/SavedData/AutoTitle) + AutoFillAvailableFields + SaveWindowSettings
Раундтрип TOTAL 40→25, match 138→146. Три класса «компилятор додумывает на main/titled формах» (декомпилятор не давал суппресс-маркера) + два непокрытых свойства. - MainAttribute: эвристика 11b.3 (нет явного main + ровно 1 объектный реквизит → помечает main). Декомпилятор зеркалит условие → ставит main:false (компилятор уже исключает такие кандидаты). Объектные реквизиты часто НЕ main (DynamicList 1207 без, RecordSet 226 без, и т.д.). Decompiler-only. - SavedData: эвристика $mainSaved (main + Catalog/Document/ChartOf*/ExchangePlan/ BusinessProcess/Task Object + RecordManager → SavedData=true). Часто отсутствует (DocumentObject 332 без = 23%). Компилятор: явный savedData:false побеждает; декомпилятор ставит savedData:false для main-реквизита saved-типа без <SavedData>. - AutoTitle: компилятор инъектит false при наличии title (~95% форм). Редкие 5% (Title есть, AutoTitle нет) → декомпилятор ставит autoTitle:"", компилятор пропускает пустую строку в Emit-Properties (общий ""-суппресс). - AutoFillAvailableFields: свойство <Settings> дин-списка (дефолт true, эмит только отклонение false; ключ settings.autoFillAvailableFields). - SaveWindowSettings: форменный bool (KNOWN_FORM_PROPS + auto-PascalCase). Зеркало py (компилятор). Кейс dynamic-list-form +saveWindowSettings (сертифицирован). Формы ЗадачаИсполнителя/Дополнительно, БизнесСеть/*, АнализПравДоступа → чисто. Регресс 39/39 в обоих рантаймах. 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
1a601a4d0c
commit
bc81faf892
@@ -1,4 +1,4 @@
|
||||
# form-compile v1.90 — Compile 1C managed form from JSON or object metadata
|
||||
# form-compile v1.91 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[string]$JsonPath,
|
||||
@@ -4555,7 +4555,9 @@ function Emit-Attributes {
|
||||
if ($attr.main -eq $true -and $attr.type) {
|
||||
$mainSaved = ("$($attr.type)") -match '^(CatalogObject|DocumentObject|ChartOfAccountsObject|ChartOfCalculationTypesObject|ChartOfCharacteristicTypesObject|ExchangePlanObject|BusinessProcessObject|TaskObject)\.' -or ("$($attr.type)") -match 'RecordManager\.'
|
||||
}
|
||||
if ($attr.savedData -eq $true -or $mainSaved) {
|
||||
# Явный ключ savedData побеждает (в т.ч. false → суппресс авто-вывода $mainSaved); нет ключа → авто.
|
||||
$emitSaved = if ($null -ne $attr.PSObject.Properties['savedData']) { $attr.savedData -eq $true } else { $mainSaved }
|
||||
if ($emitSaved) {
|
||||
X "$inner<SavedData>true</SavedData>"
|
||||
}
|
||||
# Save: сохранение значения реквизита в пользовательских настройках. true → <Field>имя</Field>;
|
||||
@@ -4655,7 +4657,9 @@ function Emit-Attributes {
|
||||
$st = $attr.settings
|
||||
X "$inner<Settings xsi:type=`"DynamicList`">"
|
||||
$si = "$inner`t"
|
||||
# Порядок платформы: ManualQuery, DynamicDataRead, QueryText, Field*, MainTable, ListSettings
|
||||
# Порядок платформы: AutoFillAvailableFields, ManualQuery, DynamicDataRead, QueryText, Field*, MainTable, ListSettings
|
||||
# AutoFillAvailableFields — дефолт true; эмитим только при заданном ключе (отклонение).
|
||||
if ($null -ne $st.autoFillAvailableFields) { X "$si<AutoFillAvailableFields>$(if ($st.autoFillAvailableFields){'true'}else{'false'})</AutoFillAvailableFields>" }
|
||||
$hasQuery = $st.query -and "$($st.query)".Trim()
|
||||
$mq = if ($hasQuery -or $st.manualQuery -eq $true) { "true" } else { "false" }
|
||||
X "$si<ManualQuery>$mq</ManualQuery>"
|
||||
@@ -4830,6 +4834,8 @@ function Emit-Properties {
|
||||
}
|
||||
# Convert boolean to lowercase string (PS renders as True/False)
|
||||
$val = $p.Value
|
||||
# Пустая строка = суппресс-маркер (напр. autoTitle:"" — не эмитить и не додумывать)
|
||||
if ($val -is [string] -and $val -eq '') { continue }
|
||||
if ($val -is [bool]) {
|
||||
$val = if ($val) { "true" } else { "false" }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user