mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-06 19:50:20 +03:00
fix(meta-decompile): decimal FillValue терял тип на составном реквизите (v0.35)
Декомпилятор клал 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) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
87c7ca0e23
commit
89537e9b5d
@@ -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
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
#
|
#
|
||||||
# Поддержаны: Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document. Инверс meta-compile (omit-on-default: ключ эмитим только
|
# Поддержаны: Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document. Инверс meta-compile (omit-on-default: ключ эмитим только
|
||||||
@@ -328,7 +328,11 @@ function Attr-ToDsl {
|
|||||||
} elseif ($xsiT -match 'boolean$') {
|
} elseif ($xsiT -match 'boolean$') {
|
||||||
$extra['fillValue'] = ($fvText -eq 'true')
|
$extra['fillValue'] = ($fvText -eq 'true')
|
||||||
} elseif ($xsiT -match 'decimal$') {
|
} 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$') {
|
} elseif ($xsiT -match 'string$') {
|
||||||
if (-not ($fcat -eq 'String' -and $fvText -eq '')) { $extra['fillValue'] = $fvText }
|
if (-not ($fcat -eq 'String' -and $fvText -eq '')) { $extra['fillValue'] = $fvText }
|
||||||
} elseif ($xsiT -match 'dateTime$') {
|
} elseif ($xsiT -match 'dateTime$') {
|
||||||
|
|||||||
Reference in New Issue
Block a user