diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1 index 6805e963..8166b47e 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.ps1 +++ b/.claude/skills/meta-compile/scripts/meta-compile.ps1 @@ -547,6 +547,10 @@ $script:typeNamespaceMap = @{ } # Типы current-config пространства (cfg:, объявлено в корне): объектные (CatalogObject.X/DataProcessorObject.X/…) # и голые (ConstantsSet/ReportBuilder). Ссылочные (*Ref.X/DefinedType.X) идут ОТДЕЛЬНО через локальный d5p1 (§memory). +# Префикс current-config для ссылочных типов. 'cfg' — для файлов, чья шапка его объявляет +# (объектный XML, Ext/Form.xml общей формы). $null на время сборки Ext/Predefined.xml, чья +# шапка его НЕ объявляет: там и платформа уходит на локальное объявление. +$script:cfgPrefix = 'cfg' $script:cfgBareTypes = @("ConstantsSet", "ReportBuilder", "FilterCriterion") $script:cfgObjectKinds = @("Catalog","Document","Enum","ChartOfAccounts","ChartOfCharacteristicTypes", "ChartOfCalculationTypes","ExchangePlan","BusinessProcess","Task","InformationRegister","AccumulationRegister", @@ -767,8 +771,15 @@ function Emit-TypeContent { # в cfg: — то есть давал diff-шум на ровном месте. Форма пришла из СКД, где cfg: # действительно не работает; в метаданных такого ограничения нет. # NB: локальная xmlns остаётся законной для ЧУЖИХ пространств — см. $script:typeNamespaceMap. + # $script:cfgPrefix = $null означает «пишем файл, корень которого cfg НЕ объявляет» + # (Ext/Predefined.xml — его шапка это predef/v8/xr/xs/xsi). Там платформа сама уходит + # на локальную форму: в корпусе `d6p1:CatalogRef.Валюты`. if ($typeStr -match '^(CatalogRef|DocumentRef|EnumRef|ChartOfAccountsRef|ChartOfCharacteristicTypesRef|ChartOfCalculationTypesRef|ExchangePlanRef|BusinessProcessRef|BusinessProcessRoutePointRef|TaskRef)\.(.+)$') { - X "$indentcfg:$typeStr" + if ($script:cfgPrefix) { + X "$indent$($script:cfgPrefix):$typeStr" + } else { + X "$indentd5p1:$typeStr" + } return } @@ -4673,7 +4684,11 @@ function Build-PredefinedXml { $sb = New-Object System.Text.StringBuilder [void]$sb.Append("`n") [void]$sb.Append("`n") - foreach ($it in $items) { Emit-PredefItem $sb $it "`t" $codeType } + # Шапка Predefined.xml не объявляет cfg (predef/v8/xr/xs/xsi) — на время сборки этого + # файла ссылочный тип уходит на локальную форму, как делает и платформа. + $savedCfgPrefix = $script:cfgPrefix; $script:cfgPrefix = $null + try { foreach ($it in $items) { Emit-PredefItem $sb $it "`t" $codeType } } + finally { $script:cfgPrefix = $savedCfgPrefix } [void]$sb.Append("`n") return ($sb.ToString() -replace "`r`n", "`n") -replace "`n", "`r`n" } @@ -4761,7 +4776,10 @@ function Build-PredefinedAccountXml { $sb = New-Object System.Text.StringBuilder [void]$sb.Append("`n") [void]$sb.Append("`n") - foreach ($it in $items) { Emit-PredefAccount $sb $it "`t" $objName $acctFlagNames $extDimFlagNames $extDimTypesRef } + # См. Build-PredefinedXml: шапка этого файла cfg не объявляет. + $savedCfgPrefix = $script:cfgPrefix; $script:cfgPrefix = $null + try { foreach ($it in $items) { Emit-PredefAccount $sb $it "`t" $objName $acctFlagNames $extDimFlagNames $extDimTypesRef } } + finally { $script:cfgPrefix = $savedCfgPrefix } [void]$sb.Append("`n") return ($sb.ToString() -replace "`r`n", "`n") -replace "`n", "`r`n" } diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py index 47b35720..8da7fa90 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.py +++ b/.claude/skills/meta-compile/scripts/meta-compile.py @@ -637,6 +637,10 @@ type_namespace_map = { "SpreadsheetDocument": {"ns": "http://v8.1c.ru/8.2/data/spreadsheet", "prefix": "mxl"}, } # Типы current-config пространства (cfg:, объявлено в корне): голые и объектные. Ссылочные — отдельно (d5p1). +# Префикс current-config для ссылочных типов. 'cfg' — для файлов, чья шапка его объявляет +# (объектный XML, Ext/Form.xml общей формы). None на время сборки Ext/Predefined.xml, чья +# шапка его НЕ объявляет: там и платформа уходит на локальное объявление. +cfg_prefix = 'cfg' cfg_bare_types = {"ConstantsSet", "ReportBuilder", "FilterCriterion"} cfg_object_kinds = {"Catalog", "Document", "Enum", "ChartOfAccounts", "ChartOfCharacteristicTypes", "ChartOfCalculationTypes", "ExchangePlan", "BusinessProcess", "Task", "InformationRegister", @@ -813,9 +817,15 @@ def emit_type_content(indent, type_str): # то есть давал diff-шум на ровном месте. Форма пришла из СКД, где cfg: # действительно не работает; в метаданных такого ограничения нет. # NB: локальная xmlns остаётся законной для ЧУЖИХ пространств — см. type_namespace_map. + # cfg_prefix = None означает «пишем файл, корень которого cfg НЕ объявляет» + # (Ext/Predefined.xml — его шапка это predef/v8/xr/xs/xsi). Там платформа сама уходит + # на локальную форму: в корпусе `d6p1:CatalogRef.Валюты`. m = re.match(r'^(CatalogRef|DocumentRef|EnumRef|ChartOfAccountsRef|ChartOfCharacteristicTypesRef|ChartOfCalculationTypesRef|ExchangePlanRef|BusinessProcessRef|BusinessProcessRoutePointRef|TaskRef)\.(.+)$', type_str) if m: - X(f'{indent}cfg:{type_str}') + if cfg_prefix: + X(f'{indent}{cfg_prefix}:{type_str}') + else: + X(f'{indent}d5p1:{type_str}') return # Fallback X(f'{indent}{type_str}') @@ -4659,8 +4669,16 @@ def emit_predef_item(out, val, indent, code_type): def build_predefined_xml(items, xsi_type, code_type): out = [''] out.append(f'') - for it in items: - emit_predef_item(out, it, '\t', code_type) + # Шапка Predefined.xml не объявляет cfg (predef/v8/xr/xs/xsi) — на время сборки этого + # файла ссылочный тип уходит на локальную форму, как делает и платформа. + global cfg_prefix + saved_cfg_prefix = cfg_prefix + cfg_prefix = None + try: + for it in items: + emit_predef_item(out, it, '\t', code_type) + finally: + cfg_prefix = saved_cfg_prefix out.append('') return '\r\n'.join(out) @@ -4757,8 +4775,15 @@ def emit_predef_account(out, val, indent, obj_nm, acct_flag_names, ext_dim_flag_ def build_predefined_account_xml(items, obj_nm, acct_flag_names, ext_dim_flag_names, ext_dim_types_ref=''): out = [''] out.append(f'') - for it in items: - emit_predef_account(out, it, '\t', obj_nm, acct_flag_names, ext_dim_flag_names, ext_dim_types_ref) + # См. build_predefined_xml: шапка этого файла cfg не объявляет. + global cfg_prefix + saved_cfg_prefix = cfg_prefix + cfg_prefix = None + try: + for it in items: + emit_predef_account(out, it, '\t', obj_nm, acct_flag_names, ext_dim_flag_names, ext_dim_types_ref) + finally: + cfg_prefix = saved_cfg_prefix out.append('') return '\r\n'.join(out) diff --git a/tests/skills/cases/meta-compile/snapshots/chart-of-characteristic-types/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Ext/Predefined.xml b/tests/skills/cases/meta-compile/snapshots/chart-of-characteristic-types/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Ext/Predefined.xml index d51b9c09..3f31c7f2 100644 --- a/tests/skills/cases/meta-compile/snapshots/chart-of-characteristic-types/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Ext/Predefined.xml +++ b/tests/skills/cases/meta-compile/snapshots/chart-of-characteristic-types/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Ext/Predefined.xml @@ -5,7 +5,7 @@ 000001 Цвет - cfg:CatalogRef.ЗначенияСвойств + d5p1:CatalogRef.ЗначенияСвойств false