mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-20 17:40:59 +03:00
feat(form-decompile,form-compile): userSettingPresentation контейнера ListSettings (filter/order/CA)
Контейнер настроек компоновщика (<dcsset:filter>/<order>/<conditionalAppearance>)
может нести собственный <dcsset:userSettingPresentation> — кастомную подпись
пользовательской настройки (после userSettingID). Декомпилятор кодировал контейнер
только как блок-мету "vu"/"u"/"v" (viewMode/userSettingID), теряя presentation;
компилятор не эмитил.
Дескриптор listSettings[tag] теперь — строка-код "vu" ИЛИ объект
{ meta:"vu", presentation:<текст/{ru,en}> }. Декомпилятор: Get-PresByType сохраняет
форму по xsi:type (ru-only LocalString ≠ xs:string). Компилятор: новый параметр
blockUserSettingPresentation в Emit-Filter/Order/ConditionalAppearance (+ в гейт
hasBlockMeta — иначе контейнер только-с-presentation, без items/viewMode/userSettingID,
не эмитился). Зеркало py.
Корпус 8.3.24: 6 контейнеров-presentation в 6 формах. Выборка 6 форм
(ОтветственныеЗаАктуализацию/ЗаПодписание acc+erp, ПравилаФормированияРезервов,
СтавкиНДСНоменклатуры): match 0→6, TOTAL→0. ps1==py байт-в-байт. Регресс 43/43.
Spec обновлён. Cert: раундтрип (формат платформы, позиция как в оригинале).
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
9af86b7810
commit
668173121d
@@ -1,4 +1,4 @@
|
||||
# form-decompile v0.126 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# form-decompile v0.127 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
||||
param(
|
||||
@@ -134,7 +134,14 @@ function Get-ListSettingsShape {
|
||||
if ($tag -in @('filter','order','conditionalAppearance')) {
|
||||
$hasVM = $null -ne $child.SelectSingleNode("dcsset:viewMode", $ns)
|
||||
$hasUS = $null -ne $child.SelectSingleNode("dcsset:userSettingID", $ns)
|
||||
$shape[$tag] = "$(if ($hasVM) {'v'})$(if ($hasUS) {'u'})"
|
||||
$code = "$(if ($hasVM) {'v'})$(if ($hasUS) {'u'})"
|
||||
# Контейнер может нести собственный <dcsset:userSettingPresentation> (кастомная подпись
|
||||
# настройки) — сохраняем форму по xsi:type (Get-PresByType: ru-only LocalString ≠ xs:string).
|
||||
$uspNode = $child.SelectSingleNode("dcsset:userSettingPresentation", $ns)
|
||||
if ($uspNode) {
|
||||
$usp = Get-PresByType $uspNode
|
||||
$shape[$tag] = [ordered]@{ meta = $code; presentation = $usp }
|
||||
} else { $shape[$tag] = $code }
|
||||
} elseif ($tag -eq 'itemsViewMode') { $shape['itemsViewMode'] = $true }
|
||||
elseif ($tag -eq 'itemsUserSettingID') { $shape['itemsUserSettingID'] = $true }
|
||||
elseif ($tag -eq 'item') { if ($hasGrouping) { $shape['structure'] = $true } else { return $null } }
|
||||
|
||||
Reference in New Issue
Block a user