From 89537e9b5dc904e350a472b4c25d469edd32f1fd Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Mon, 6 Jul 2026 17:26:30 +0300 Subject: [PATCH] =?UTF-8?q?fix(meta-decompile):=20decimal=20FillValue=20?= =?UTF-8?q?=D1=82=D0=B5=D1=80=D1=8F=D0=BB=20=D1=82=D0=B8=D0=BF=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=81=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D0=BD=D0=BE=D0=BC?= =?UTF-8?q?=20=D1=80=D0=B5=D0=BA=D0=B2=D0=B8=D0=B7=D0=B8=D1=82=D0=B5=20(v0?= =?UTF-8?q?.35)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Декомпилятор клал xs:decimal FillValue как строку ($fvText) → на составном типе компилятор берёт xsi-тип из JSON-значения (строка "0" → xs:string, число 0 → xs:decimal) → тип терялся, регенерился xs:string вместо xs:decimal. У плоского Number эмиссия и так type-aware, поэтому вылезало только на составных. Фикс: захват decimal как число ([long]/[double]). Роундтрип Document match 130→142, TOTAL 62→24. Catalog без изменений (52/12), 0 крашей. Co-Authored-By: Claude Opus 4.8 (1M context) --- .claude/skills/meta-decompile/scripts/meta-decompile.ps1 | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 b/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 index 2b03dcce..fb8d7a5d 100644 --- a/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 +++ b/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 @@ -1,4 +1,4 @@ -# meta-decompile v0.34 — XML объекта метаданных 1С → JSON-черновик формата meta-compile +# meta-decompile v0.35 — XML объекта метаданных 1С → JSON-черновик формата meta-compile # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # # Поддержаны: Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document. Инверс meta-compile (omit-on-default: ключ эмитим только @@ -328,7 +328,11 @@ function Attr-ToDsl { } elseif ($xsiT -match 'boolean$') { $extra['fillValue'] = ($fvText -eq 'true') } elseif ($xsiT -match 'decimal$') { - if (-not ($fcat -eq 'Number' -and ($fvText -eq '0' -or $fvText -eq ''))) { $extra['fillValue'] = $fvText } + # Захватываем как ЧИСЛО (не строку): на составном типе компилятор берёт xsi-тип из JSON-значения — + # строка "0" дала бы xs:string, число 0 → xs:decimal. У плоского Number эмиссия и так type-aware. + if (-not ($fcat -eq 'Number' -and ($fvText -eq '0' -or $fvText -eq ''))) { + $extra['fillValue'] = if ($fvText -match '^-?\d+$') { [long]$fvText } else { [double]$fvText } + } } elseif ($xsiT -match 'string$') { if (-not ($fcat -eq 'String' -and $fvText -eq '')) { $extra['fillValue'] = $fvText } } elseif ($xsiT -match 'dateTime$') {