mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-08 04:30:19 +03:00
fix(meta-compile): в Predefined.xml ссылочный тип остаётся локальным
Регрессия предыдущего коммита: cfg: применялся безусловно, а шапка Ext/Predefined.xml объявляет только predef/v8/xr/xs/xsi — cfg там нет. Получался неразрешимый префикс, и платформа отказывалась грузить конфигурацию (1С-сертификация meta-compile/chart-of-characteristic-types: FAIL на LoadConfigFromFiles; на коде до правки кейс проходил). Правило платформы, снятое с корпуса, ровно то же, что уже заложено в meta-edit: префикс из корня, если он там объявлен, иначе локальное объявление. В самом Predefined.xml платформа пишет `<v8:Type xmlns:d6p1="…current-config">d6p1:CatalogRef.Валюты</v8:Type>`. Типизированные предопределённые есть только у ПВХ, а ПВХ не входит ни в один из шести списков раундтрипа — поэтому корпус эту поломку поймать не мог, её поймала только 1С-сертификация. Добавлен список list-cct-all.txt (24 объекта acc+erp), чтобы пробел закрылся: content match 24/24, TOTAL diff 0. Проверка: 1С-сертификация кейса проходит, runner 648/648 ps1 и 645/648 py. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
683e370938
commit
0a2dba33cf
@@ -547,6 +547,10 @@ $script:typeNamespaceMap = @{
|
|||||||
}
|
}
|
||||||
# Типы current-config пространства (cfg:, объявлено в корне): объектные (CatalogObject.X/DataProcessorObject.X/…)
|
# Типы current-config пространства (cfg:, объявлено в корне): объектные (CatalogObject.X/DataProcessorObject.X/…)
|
||||||
# и голые (ConstantsSet/ReportBuilder). Ссылочные (*Ref.X/DefinedType.X) идут ОТДЕЛЬНО через локальный d5p1 (§memory).
|
# и голые (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:cfgBareTypes = @("ConstantsSet", "ReportBuilder", "FilterCriterion")
|
||||||
$script:cfgObjectKinds = @("Catalog","Document","Enum","ChartOfAccounts","ChartOfCharacteristicTypes",
|
$script:cfgObjectKinds = @("Catalog","Document","Enum","ChartOfAccounts","ChartOfCharacteristicTypes",
|
||||||
"ChartOfCalculationTypes","ExchangePlan","BusinessProcess","Task","InformationRegister","AccumulationRegister",
|
"ChartOfCalculationTypes","ExchangePlan","BusinessProcess","Task","InformationRegister","AccumulationRegister",
|
||||||
@@ -767,8 +771,15 @@ function Emit-TypeContent {
|
|||||||
# в cfg: — то есть давал diff-шум на ровном месте. Форма пришла из СКД, где cfg:
|
# в cfg: — то есть давал diff-шум на ровном месте. Форма пришла из СКД, где cfg:
|
||||||
# действительно не работает; в метаданных такого ограничения нет.
|
# действительно не работает; в метаданных такого ограничения нет.
|
||||||
# NB: локальная xmlns остаётся законной для ЧУЖИХ пространств — см. $script:typeNamespaceMap.
|
# NB: локальная xmlns остаётся законной для ЧУЖИХ пространств — см. $script:typeNamespaceMap.
|
||||||
|
# $script:cfgPrefix = $null означает «пишем файл, корень которого cfg НЕ объявляет»
|
||||||
|
# (Ext/Predefined.xml — его шапка это predef/v8/xr/xs/xsi). Там платформа сама уходит
|
||||||
|
# на локальную форму: в корпусе `<v8:Type xmlns:d6p1="…current-config">d6p1:CatalogRef.Валюты`.
|
||||||
if ($typeStr -match '^(CatalogRef|DocumentRef|EnumRef|ChartOfAccountsRef|ChartOfCharacteristicTypesRef|ChartOfCalculationTypesRef|ExchangePlanRef|BusinessProcessRef|BusinessProcessRoutePointRef|TaskRef)\.(.+)$') {
|
if ($typeStr -match '^(CatalogRef|DocumentRef|EnumRef|ChartOfAccountsRef|ChartOfCharacteristicTypesRef|ChartOfCalculationTypesRef|ExchangePlanRef|BusinessProcessRef|BusinessProcessRoutePointRef|TaskRef)\.(.+)$') {
|
||||||
X "$indent<v8:Type>cfg:$typeStr</v8:Type>"
|
if ($script:cfgPrefix) {
|
||||||
|
X "$indent<v8:Type>$($script:cfgPrefix):$typeStr</v8:Type>"
|
||||||
|
} else {
|
||||||
|
X "$indent<v8:Type xmlns:d5p1=`"http://v8.1c.ru/8.1/data/enterprise/current-config`">d5p1:$typeStr</v8:Type>"
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4673,7 +4684,11 @@ function Build-PredefinedXml {
|
|||||||
$sb = New-Object System.Text.StringBuilder
|
$sb = New-Object System.Text.StringBuilder
|
||||||
[void]$sb.Append("<?xml version=`"1.0`" encoding=`"UTF-8`"?>`n")
|
[void]$sb.Append("<?xml version=`"1.0`" encoding=`"UTF-8`"?>`n")
|
||||||
[void]$sb.Append("<PredefinedData xmlns=`"http://v8.1c.ru/8.3/xcf/predef`" xmlns:v8=`"http://v8.1c.ru/8.1/data/core`" xmlns:xr=`"http://v8.1c.ru/8.3/xcf/readable`" xmlns:xs=`"http://www.w3.org/2001/XMLSchema`" xmlns:xsi=`"http://www.w3.org/2001/XMLSchema-instance`" xsi:type=`"$xsiType`" version=`"$($script:formatVersion)`">`n")
|
[void]$sb.Append("<PredefinedData xmlns=`"http://v8.1c.ru/8.3/xcf/predef`" xmlns:v8=`"http://v8.1c.ru/8.1/data/core`" xmlns:xr=`"http://v8.1c.ru/8.3/xcf/readable`" xmlns:xs=`"http://www.w3.org/2001/XMLSchema`" xmlns:xsi=`"http://www.w3.org/2001/XMLSchema-instance`" xsi:type=`"$xsiType`" version=`"$($script:formatVersion)`">`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("</PredefinedData>`n")
|
[void]$sb.Append("</PredefinedData>`n")
|
||||||
return ($sb.ToString() -replace "`r`n", "`n") -replace "`n", "`r`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
|
$sb = New-Object System.Text.StringBuilder
|
||||||
[void]$sb.Append("<?xml version=`"1.0`" encoding=`"UTF-8`"?>`n")
|
[void]$sb.Append("<?xml version=`"1.0`" encoding=`"UTF-8`"?>`n")
|
||||||
[void]$sb.Append("<PredefinedData xmlns=`"http://v8.1c.ru/8.3/xcf/predef`" xmlns:v8=`"http://v8.1c.ru/8.1/data/core`" xmlns:xr=`"http://v8.1c.ru/8.3/xcf/readable`" xmlns:xs=`"http://www.w3.org/2001/XMLSchema`" xmlns:xsi=`"http://www.w3.org/2001/XMLSchema-instance`" xsi:type=`"ChartOfAccountsPredefinedItems`" version=`"$($script:formatVersion)`">`n")
|
[void]$sb.Append("<PredefinedData xmlns=`"http://v8.1c.ru/8.3/xcf/predef`" xmlns:v8=`"http://v8.1c.ru/8.1/data/core`" xmlns:xr=`"http://v8.1c.ru/8.3/xcf/readable`" xmlns:xs=`"http://www.w3.org/2001/XMLSchema`" xmlns:xsi=`"http://www.w3.org/2001/XMLSchema-instance`" xsi:type=`"ChartOfAccountsPredefinedItems`" version=`"$($script:formatVersion)`">`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("</PredefinedData>`n")
|
[void]$sb.Append("</PredefinedData>`n")
|
||||||
return ($sb.ToString() -replace "`r`n", "`n") -replace "`n", "`r`n"
|
return ($sb.ToString() -replace "`r`n", "`n") -replace "`n", "`r`n"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -637,6 +637,10 @@ type_namespace_map = {
|
|||||||
"SpreadsheetDocument": {"ns": "http://v8.1c.ru/8.2/data/spreadsheet", "prefix": "mxl"},
|
"SpreadsheetDocument": {"ns": "http://v8.1c.ru/8.2/data/spreadsheet", "prefix": "mxl"},
|
||||||
}
|
}
|
||||||
# Типы current-config пространства (cfg:, объявлено в корне): голые и объектные. Ссылочные — отдельно (d5p1).
|
# Типы 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_bare_types = {"ConstantsSet", "ReportBuilder", "FilterCriterion"}
|
||||||
cfg_object_kinds = {"Catalog", "Document", "Enum", "ChartOfAccounts", "ChartOfCharacteristicTypes",
|
cfg_object_kinds = {"Catalog", "Document", "Enum", "ChartOfAccounts", "ChartOfCharacteristicTypes",
|
||||||
"ChartOfCalculationTypes", "ExchangePlan", "BusinessProcess", "Task", "InformationRegister",
|
"ChartOfCalculationTypes", "ExchangePlan", "BusinessProcess", "Task", "InformationRegister",
|
||||||
@@ -813,9 +817,15 @@ def emit_type_content(indent, type_str):
|
|||||||
# то есть давал diff-шум на ровном месте. Форма пришла из СКД, где cfg:
|
# то есть давал diff-шум на ровном месте. Форма пришла из СКД, где cfg:
|
||||||
# действительно не работает; в метаданных такого ограничения нет.
|
# действительно не работает; в метаданных такого ограничения нет.
|
||||||
# NB: локальная xmlns остаётся законной для ЧУЖИХ пространств — см. type_namespace_map.
|
# NB: локальная xmlns остаётся законной для ЧУЖИХ пространств — см. type_namespace_map.
|
||||||
|
# cfg_prefix = None означает «пишем файл, корень которого cfg НЕ объявляет»
|
||||||
|
# (Ext/Predefined.xml — его шапка это predef/v8/xr/xs/xsi). Там платформа сама уходит
|
||||||
|
# на локальную форму: в корпусе `<v8:Type xmlns:d6p1="…current-config">d6p1:CatalogRef.Валюты`.
|
||||||
m = re.match(r'^(CatalogRef|DocumentRef|EnumRef|ChartOfAccountsRef|ChartOfCharacteristicTypesRef|ChartOfCalculationTypesRef|ExchangePlanRef|BusinessProcessRef|BusinessProcessRoutePointRef|TaskRef)\.(.+)$', type_str)
|
m = re.match(r'^(CatalogRef|DocumentRef|EnumRef|ChartOfAccountsRef|ChartOfCharacteristicTypesRef|ChartOfCalculationTypesRef|ExchangePlanRef|BusinessProcessRef|BusinessProcessRoutePointRef|TaskRef)\.(.+)$', type_str)
|
||||||
if m:
|
if m:
|
||||||
X(f'{indent}<v8:Type>cfg:{type_str}</v8:Type>')
|
if cfg_prefix:
|
||||||
|
X(f'{indent}<v8:Type>{cfg_prefix}:{type_str}</v8:Type>')
|
||||||
|
else:
|
||||||
|
X(f'{indent}<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:{type_str}</v8:Type>')
|
||||||
return
|
return
|
||||||
# Fallback
|
# Fallback
|
||||||
X(f'{indent}<v8:Type>{type_str}</v8:Type>')
|
X(f'{indent}<v8:Type>{type_str}</v8:Type>')
|
||||||
@@ -4659,8 +4669,16 @@ def emit_predef_item(out, val, indent, code_type):
|
|||||||
def build_predefined_xml(items, xsi_type, code_type):
|
def build_predefined_xml(items, xsi_type, code_type):
|
||||||
out = ['<?xml version="1.0" encoding="UTF-8"?>']
|
out = ['<?xml version="1.0" encoding="UTF-8"?>']
|
||||||
out.append(f'<PredefinedData xmlns="http://v8.1c.ru/8.3/xcf/predef" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="{xsi_type}" version="{format_version}">')
|
out.append(f'<PredefinedData xmlns="http://v8.1c.ru/8.3/xcf/predef" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="{xsi_type}" version="{format_version}">')
|
||||||
for it in items:
|
# Шапка Predefined.xml не объявляет cfg (predef/v8/xr/xs/xsi) — на время сборки этого
|
||||||
emit_predef_item(out, it, '\t', code_type)
|
# файла ссылочный тип уходит на локальную форму, как делает и платформа.
|
||||||
|
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('</PredefinedData>')
|
out.append('</PredefinedData>')
|
||||||
return '\r\n'.join(out)
|
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=''):
|
def build_predefined_account_xml(items, obj_nm, acct_flag_names, ext_dim_flag_names, ext_dim_types_ref=''):
|
||||||
out = ['<?xml version="1.0" encoding="UTF-8"?>']
|
out = ['<?xml version="1.0" encoding="UTF-8"?>']
|
||||||
out.append(f'<PredefinedData xmlns="http://v8.1c.ru/8.3/xcf/predef" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ChartOfAccountsPredefinedItems" version="{format_version}">')
|
out.append(f'<PredefinedData xmlns="http://v8.1c.ru/8.3/xcf/predef" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ChartOfAccountsPredefinedItems" version="{format_version}">')
|
||||||
for it in items:
|
# См. build_predefined_xml: шапка этого файла cfg не объявляет.
|
||||||
emit_predef_account(out, it, '\t', obj_nm, acct_flag_names, ext_dim_flag_names, ext_dim_types_ref)
|
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('</PredefinedData>')
|
out.append('</PredefinedData>')
|
||||||
return '\r\n'.join(out)
|
return '\r\n'.join(out)
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
<Code>000001</Code>
|
<Code>000001</Code>
|
||||||
<Description>Цвет</Description>
|
<Description>Цвет</Description>
|
||||||
<Type>
|
<Type>
|
||||||
<v8:Type>cfg:CatalogRef.ЗначенияСвойств</v8:Type>
|
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.ЗначенияСвойств</v8:Type>
|
||||||
</Type>
|
</Type>
|
||||||
<IsFolder>false</IsFolder>
|
<IsFolder>false</IsFolder>
|
||||||
</Item>
|
</Item>
|
||||||
|
|||||||
Reference in New Issue
Block a user