mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-22 20:51:03 +03:00
feat(meta-compile,meta-decompile): значение заполнения реквизита fillValue (v1.27/v0.12)
Пара FillFromFillingValue+FillValue — единый блок «заполнения» (у top-level реквизитов всегда, у ТЧ нет). Класс-2 фикс: boolean дефолт пустого FillValue false→nil (модальная форма платформы, 3734 мисматча). Дефолт по типу: String→typed-empty, Number→0, всё прочее→nil. DSL-ключ fillValue (интерпретация по типу реквизита): bool/число/строка/дата- литерал + null→nil-override + DTR-путь (полный рус/англ, GUID.GUID, короткая запись по типу: EmptyRef / имя-значения перечисления / предопределённое). Ref-резолвер портирован из form-compile (+ПустаяСсылка/Истина/Ложь, гард составного типа). Декомпилятор: захват FillValue с omit-при-дефолте. remaining=0 на выборке категории Attribute>FillValue (baseline-impact 7222), регресс 39/39 ps1+py. spec v2.7 §4.2, кейс catalog-attr-fillvalue. 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
d8146e1f1b
commit
b93fd0807f
@@ -1,4 +1,4 @@
|
||||
# meta-decompile v0.11 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||
# meta-decompile v0.12 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
#
|
||||
# Пилот: только Catalog. Инверс meta-compile (omit-on-default: ключ эмитим только
|
||||
@@ -221,6 +221,36 @@ function Attr-ToDsl {
|
||||
$fmtV = Get-MLValue ($ap.SelectSingleNode('md:Format', $nsm)); if ($null -ne $fmtV) { $extra['format'] = $fmtV }
|
||||
$efmtV = Get-MLValue ($ap.SelectSingleNode('md:EditFormat', $nsm)); if ($null -ne $efmtV) { $extra['editFormat'] = $efmtV }
|
||||
|
||||
# FillValue (значение заполнения). Форма по умолчанию зависит от типа реквизита: String→typed-empty,
|
||||
# Number→zero, всё остальное→nil. Эмитим `fillValue` только при отклонении от дефолта (§4.2 spec).
|
||||
# nil у String/Number → JSON null (nil-override); реальное значение → строка/bool/число/DTR-путь verbatim.
|
||||
$fvNode = $ap.SelectSingleNode('md:FillValue', $nsm)
|
||||
if ($fvNode) {
|
||||
$fcat = 'Other'
|
||||
if ($ts -match '\+') { $fcat = 'Other' }
|
||||
elseif ($ts -match '^Boolean') { $fcat = 'Boolean' }
|
||||
elseif ($ts -match '^String') { $fcat = 'String' }
|
||||
elseif ($ts -match '^Number') { $fcat = 'Number' }
|
||||
elseif ($ts -match '^(Date|DateTime)') { $fcat = 'Date' }
|
||||
$nilAttr = $fvNode.GetAttribute('nil', 'http://www.w3.org/2001/XMLSchema-instance')
|
||||
$xsiT = $fvNode.GetAttribute('type', 'http://www.w3.org/2001/XMLSchema-instance')
|
||||
$fvText = $fvNode.InnerText
|
||||
if ($nilAttr -eq 'true') {
|
||||
if ($fcat -eq 'String' -or $fcat -eq 'Number') { $extra['fillValue'] = $null } # nil-override
|
||||
# иначе nil — это дефолт → пропускаем
|
||||
} 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 }
|
||||
} elseif ($xsiT -match 'string$') {
|
||||
if (-not ($fcat -eq 'String' -and $fvText -eq '')) { $extra['fillValue'] = $fvText }
|
||||
} elseif ($xsiT -match 'dateTime$') {
|
||||
$extra['fillValue'] = $fvText
|
||||
} elseif ($xsiT -match 'DesignTimeRef$') {
|
||||
$extra['fillValue'] = $fvText
|
||||
}
|
||||
}
|
||||
|
||||
if ($synCustom -or ($null -ne $ttVal) -or $extra.Count -gt 0) {
|
||||
$o = [ordered]@{ name = $nm }
|
||||
if ($ts) { $o['type'] = $ts }
|
||||
|
||||
Reference in New Issue
Block a user