mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-14 06:45:17 +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:
@@ -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$') {
|
||||
|
||||
Reference in New Issue
Block a user