From 26c804391af772f93540947d14ad7ed6d4f65499 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 13 Jun 2026 17:05:41 +0300 Subject: [PATCH] =?UTF-8?q?fix(form-decompile):=20=D1=84=D0=B8=D0=BB=D1=8C?= =?UTF-8?q?=D1=82=D1=80=20right=20xs:string=20"1"/=D0=B4=D0=B0=D1=82=D0=B0?= =?UTF-8?q?=20=E2=80=94=20=D1=8F=D0=B2=D0=BD=D1=8B=D0=B9=20valueType=20(?= =?UTF-8?q?=D0=B0=D0=B2=D1=82=D0=BE-=D0=B4=D0=B5=D1=82=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=20=D0=B4=D0=B0=D0=BB=20=D0=B1=D1=8B=20=D1=87=D0=B8=D1=81=D0=BB?= =?UTF-8?q?=D0=BE/=D0=B4=D0=B0=D1=82=D1=83)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Значение фильтра 1 терялось как тип: декомпилятор исключал xs:-типы из захвата valueType (расчёт на авто-детект компилятора), но компилятор авто-детектит строку "1" как xs:decimal (число) → xs:string-ность терялась. Принцип (подтверждён пользователем): когда авто-вывод типа компилятором дал бы ДРУГОЙ тип, чем фактический — декомпилятор должен указать valueType явно. Фикс: при xs:string + значение-строка матчит числовой/дату-паттерн (что компилятор детектит иначе) → фиксируем valueType="xs:string". Компилятор honors явный тип. Корпус: 8 значений в 3 формах. Форма ЭлектронныйЗаказЗаявка/ТитулГрузоотправителя → match. Декомпилятор-only. ps1==py байт-в-байт. Регресс 43/43. Co-Authored-By: Claude Opus 4.8 (1M context) --- .claude/skills/form-decompile/scripts/form-decompile.ps1 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1 index 0e5faca3..83b76ed1 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.142 — Decompile 1C managed Form.xml to JSON DSL (draft) +# form-decompile v0.143 — Decompile 1C managed Form.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью. param( @@ -691,6 +691,10 @@ function Build-FilterItem { ("$($vt.value)" -match '^(Перечисление|Справочник|ПланСчетов|Документ|ПланВидовХарактеристик|ПланВидовРасчета|БизнесПроцесс|Задача|РегистрСведений|ПланОбмена|Catalog|Enum|Document|ChartOfAccounts|ChartOfCharacteristicTypes|ChartOfCalculationTypes|BusinessProcess|Task|InformationRegister|ExchangePlan)\.') if ($vt.type -and $vt.type -notmatch '^xs:' -and -not $autoDetectsDTV) { $valueTypeAttr = $vt.type + } elseif ($vt.type -eq 'xs:string' -and ($value -is [string]) -and ($value -match '^(-?\d+(\.\d+)?|\d{4}-\d{2}-\d{2}T)')) { + # Значение-строка "1"/"2020-..." с xsi:type="xs:string": компилятор авто-детектит число/дату + # (теряет xs:string). Когда авто-вывод дал бы ДРУГОЙ тип — фиксируем явный valueType. + $valueTypeAttr = 'xs:string' } } } elseif ($rightNodes.Count -gt 1) {