mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-28 05:59:41 +03:00
feat(form-decompile,form-compile): ConditionalAppearance формы из ring-3 (переиспользование DCS-грамматики)
Снят fast-fail на ConditionalAppearance (1304 формы, 4%). Структура — та же DCS-грамматика, что settings.conditionalAppearance дин-списка, поэтому переиспользованы Build-ConditionalAppearance (декомпилятор) и Emit-ConditionalAppearance (компилятор) как есть. Отличия от настроек списка: тег-обёртка <ConditionalAppearance> (без dcsset:, параметр wrapTag) + нет блок-мета viewMode/userSettingID + размещение (последний child <Attributes>, не отдельный Form-child). Форменный ключ conditionalAppearance (selection/filter/appearance/presentation). Scope в формах не встречается (0/6186) → fail-ring3 только при scope. Заодно фикс: мультиязык-presentation элемента CA → xsi:type="v8:LocalStringType" (был голый <dcsset:presentation>; чинит и settings CA path). Выборка 2.17: ring3 7→4 (остаток — только chart-семейство), match 211→214, CA-формы бит-в-бит. Зеркало py байт-в-байт, кейс input-fields (+conditionalAppearance: selection+filter+appearance+presentation) сертифицирован загрузкой в 1С. Регресс 40/40 (ps1+py). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
ca96a7413a
commit
5ebc02d0b3
@@ -1,4 +1,4 @@
|
||||
# form-decompile v0.76 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# form-decompile v0.77 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
||||
param(
|
||||
@@ -145,7 +145,8 @@ function Fail-Ring3 {
|
||||
[Console]::Error.WriteLine("Для точечной работы с этой формой используй /form-edit.")
|
||||
exit 3
|
||||
}
|
||||
foreach ($el in $xmlDoc.SelectNodes("//*[local-name()='ConditionalAppearance']")) { Fail-Ring3 -kind "ConditionalAppearance" -loc "form/ConditionalAppearance" }
|
||||
# ConditionalAppearance со scope (привязка к области) пока не воспроизводим — fail-ring3 только в этом случае.
|
||||
foreach ($el in $xmlDoc.SelectNodes("//*[local-name()='ConditionalAppearance']/*[local-name()='item']/*[local-name()='scope'][node()]")) { Fail-Ring3 -kind "ConditionalAppearance со scope" -loc "form/ConditionalAppearance/item/scope" }
|
||||
|
||||
# --- 1c. Compact JSON serializer (созвучно skd-decompile: 2-проб. indent, inline в пределах lineLimit) ---
|
||||
function Convert-StringToJsonLiteral {
|
||||
@@ -2099,6 +2100,16 @@ if ($attrsNode) {
|
||||
if ($attrs.Count -gt 0) { $dsl['attributes'] = @($attrs) }
|
||||
}
|
||||
|
||||
# conditionalAppearance формы (<ConditionalAppearance> — последний child <Attributes>;
|
||||
# та же DCS-грамматика, что settings.conditionalAppearance → переиспользуем Build-ConditionalAppearance)
|
||||
if ($attrsNode) {
|
||||
$caNode = $attrsNode.SelectSingleNode("lf:ConditionalAppearance", $ns)
|
||||
if ($caNode) {
|
||||
$ca = Build-ConditionalAppearance -caNode $caNode -loc "form/conditionalAppearance"
|
||||
if (@($ca).Count -gt 0) { $dsl['conditionalAppearance'] = @($ca) }
|
||||
}
|
||||
}
|
||||
|
||||
# parameters
|
||||
$parsNode = $root.SelectSingleNode("lf:Parameters", $ns)
|
||||
if ($parsNode) {
|
||||
|
||||
Reference in New Issue
Block a user