diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1 index fd93a5b3..c8f9fa83 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.ps1 +++ b/.claude/skills/meta-compile/scripts/meta-compile.ps1 @@ -1,4 +1,4 @@ -# meta-compile v1.83 — Compile 1C metadata object from JSON +# meta-compile v1.84 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -608,10 +608,44 @@ function Emit-TypeContent { if (-not $typeStr) { return } # Composite type: "Type1 + Type2 + Type3" + # Платформа пишет сначала ВСЕ /, и только потом блоки + # квалификаторов — а рекурсия ниже печатала бы каждую часть целиком (тип вместе со + # своими квалификаторами). На одиночном типе оба порядка совпадают, поэтому + # расхождение вылезало только на составном. + # Порядок самих блоков квалификаторов тоже канонический и НЕ зеркалит порядок типов: + # Number, String, Date (корпус acc+erp, контрпримеров нет — при типах + # boolean,string,dateTime,decimal квалификаторы идут Number,String,Date). + # Порядок типов при этом сохраняем как в DSL: он и есть порядок источника. if ($typeStr.Contains(' + ')) { $parts = $typeStr -split '\s*\+\s*' + $typeLines = New-Object System.Collections.ArrayList + $qualBlocks = @{} # 'Number'|'String'|'Date' → строки блока foreach ($part in $parts) { + # X пишет в StringBuilder, поэтому «перехват» — это запомнить длину, вызвать + # эмиттер и откатить добавленное. В py-порту X добавляет в список, и там тот + # же алгоритм выражен срезом — различие рантаймов, не логики. + $before = $script:xml.Length Emit-TypeContent $indent $part.Trim() + $chunk = $script:xml.ToString($before, $script:xml.Length - $before) + [void]$script:xml.Remove($before, $script:xml.Length - $before) + $curQual = $null + foreach ($line in ($chunk -split "`r?`n")) { + if ($line -eq '') { continue } + if ($line -match '') { + $curQual = $Matches[1] + $qualBlocks[$curQual] = New-Object System.Collections.ArrayList + } + if ($curQual) { + [void]$qualBlocks[$curQual].Add($line) + if ($line -match '') { $curQual = $null } + } else { + [void]$typeLines.Add($line) + } + } + } + foreach ($line in $typeLines) { X $line } + foreach ($q in @('Number', 'String', 'Date')) { + if ($qualBlocks.ContainsKey($q)) { foreach ($line in $qualBlocks[$q]) { X $line } } } return } @@ -1256,7 +1290,10 @@ $script:standardAttributesByType = @{ "ChartOfCalculationTypes" = @("PredefinedDataName","Predefined","Ref","DeletionMark","ActionPeriodIsBasic","Description","Code") "BusinessProcess" = @("Ref","DeletionMark","Date","Number","Started","Completed","HeadTask") "Task" = @("Ref","DeletionMark","Date","Number","Executed","Description","RoutePoint","BusinessProcess") - "ExchangePlan" = @("Ref","DeletionMark","Code","Description","ThisNode","SentNo","ReceivedNo") + # Порядок снят с выгрузки: у плана обмена блок начинается с ThisNode, а не с Ref + # (acc+erp, 8 объектов, разброса нет). Прочие типы в этой таблице совпадают с + # платформой — расхождений порядка по ним корпусный раундтрип не показал. + "ExchangePlan" = @("ThisNode","ReceivedNo","SentNo","Ref","DeletionMark","Description","Code") "DocumentJournal" = @("Type","Ref","Date","Posted","DeletionMark","Number") } @@ -4362,16 +4399,31 @@ if ($objType -in @("InformationRegister","AccumulationRegister","AccountingRegis $regCtx = switch ($objType) { "InformationRegister" { "register-info" } "CalculationRegister" { "register-calc" } default { "register-other" } } # Все семейства регистров: ресурсы/измерения — через богатый Emit-Attribute (общий слой object-свойств). $dimResCtx = switch ($objType) { "InformationRegister" { "register-info" } "AccumulationRegister" { "register-accum" } "CalculationRegister" { "register-calc" } "AccountingRegister" { "register-account" } default { $null } } - foreach ($r in $resources) { - if ($dimResCtx) { Emit-Attribute "`t`t`t" $r $dimResCtx "Resource" } - else { Emit-Resource "`t`t`t" $r $objType } - } - foreach ($d in $dims) { - if ($dimResCtx) { Emit-Attribute "`t`t`t" $d $dimResCtx "Dimension" } - else { Emit-Dimension "`t`t`t" $d $objType } - } - foreach ($a in $regAttrs) { - Emit-Attribute "`t`t`t" $a $regCtx + # Порядок видов детей — канон выгрузки, снят с корпуса (acc+erp, разброса внутри + # типа нет): у большинства регистров Resource, Attribute, Dimension, а у + # бухгалтерского — Dimension, Resource, Attribute. Команды у платформы идут + # последними, как и здесь. + $kindOrder = if ($objType -eq "AccountingRegister") { @('dim','res','attr') } else { @('res','attr','dim') } + foreach ($kind in $kindOrder) { + switch ($kind) { + 'res' { + foreach ($r in $resources) { + if ($dimResCtx) { Emit-Attribute "`t`t`t" $r $dimResCtx "Resource" } + else { Emit-Resource "`t`t`t" $r $objType } + } + } + 'dim' { + foreach ($d in $dims) { + if ($dimResCtx) { Emit-Attribute "`t`t`t" $d $dimResCtx "Dimension" } + else { Emit-Dimension "`t`t`t" $d $objType } + } + } + 'attr' { + foreach ($a in $regAttrs) { + Emit-Attribute "`t`t`t" $a $regCtx + } + } + } } foreach ($cmd in $regCommands) { Emit-Command "`t`t`t" $cmd.name $cmd.def diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py index 48db5c48..a5de5791 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.py +++ b/.claude/skills/meta-compile/scripts/meta-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# meta-compile v1.83 — Compile 1C metadata object from JSON +# meta-compile v1.84 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -674,10 +674,46 @@ def emit_type_content(indent, type_str): if not type_str: return # Composite type: "Type1 + Type2 + Type3" + # Платформа пишет сначала ВСЕ /, и только потом блоки + # квалификаторов — а рекурсия ниже печатала бы каждую часть целиком (тип вместе со + # своими квалификаторами). На одиночном типе оба порядка совпадают, поэтому + # расхождение вылезало только на составном. + # Порядок самих блоков квалификаторов тоже канонический и НЕ зеркалит порядок типов: + # Number, String, Date (корпус acc+erp, контрпримеров нет — при типах + # boolean,string,dateTime,decimal квалификаторы идут Number,String,Date). + # Порядок типов при этом сохраняем как в DSL: он и есть порядок источника. if ' + ' in type_str: parts = [p.strip() for p in type_str.split('+')] + type_lines = [] + qual_blocks = {} for part in parts: + # X добавляет в список lines, поэтому «перехват» — это срез и откат хвоста. + # В PS-порту X пишет в StringBuilder и тот же алгоритм выражен через + # Length/Remove — различие рантаймов, не логики. + before = len(lines) emit_type_content(indent, part) + chunk = lines[before:] + del lines[before:] + cur_qual = None + for line in chunk: + if not line: + continue + m = re.search(r'', line) + if m: + cur_qual = m.group(1) + qual_blocks[cur_qual] = [] + if cur_qual: + qual_blocks[cur_qual].append(line) + if re.search(r'', line): + cur_qual = None + else: + type_lines.append(line) + for line in type_lines: + X(line) + for q in ('Number', 'String', 'Date'): + if q in qual_blocks: + for line in qual_blocks[q]: + X(line) return type_str = resolve_type_str(type_str) # Boolean @@ -1288,7 +1324,10 @@ standard_attributes_by_type = { 'ChartOfCalculationTypes': ['PredefinedDataName', 'Predefined', 'Ref', 'DeletionMark', 'ActionPeriodIsBasic', 'Description', 'Code'], 'BusinessProcess': ['Ref', 'DeletionMark', 'Date', 'Number', 'Started', 'Completed', 'HeadTask'], 'Task': ['Ref', 'DeletionMark', 'Date', 'Number', 'Executed', 'Description', 'RoutePoint', 'BusinessProcess'], - 'ExchangePlan': ['Ref', 'DeletionMark', 'Code', 'Description', 'ThisNode', 'SentNo', 'ReceivedNo'], + # Порядок снят с выгрузки: у плана обмена блок начинается с ThisNode, а не с Ref + # (acc+erp, 8 объектов, разброса нет). Прочие типы в этой таблице совпадают с + # платформой — расхождений порядка по ним корпусный раундтрип не показал. + 'ExchangePlan': ['ThisNode', 'ReceivedNo', 'SentNo', 'Ref', 'DeletionMark', 'Description', 'Code'], 'DocumentJournal': ['Type', 'Ref', 'Date', 'Posted', 'DeletionMark', 'Number'], } @@ -4261,18 +4300,27 @@ if obj_type in ('InformationRegister', 'AccumulationRegister', 'AccountingRegist # Все семейства регистров: ресурсы/измерения — через богатый emit_attribute (общий слой object-свойств). dim_res_ctx = {'InformationRegister': 'register-info', 'AccumulationRegister': 'register-accum', 'CalculationRegister': 'register-calc', 'AccountingRegister': 'register-account'}.get(obj_type) - for r in resources: - if dim_res_ctx: - emit_attribute('\t\t\t', r, dim_res_ctx, 'Resource') + # Порядок видов детей — канон выгрузки, снят с корпуса (acc+erp, разброса внутри + # типа нет): у большинства регистров Resource, Attribute, Dimension, а у + # бухгалтерского — Dimension, Resource, Attribute. Команды у платформы идут + # последними, как и здесь. + kind_order = ['dim', 'res', 'attr'] if obj_type == 'AccountingRegister' else ['res', 'attr', 'dim'] + for kind in kind_order: + if kind == 'res': + for r in resources: + if dim_res_ctx: + emit_attribute('\t\t\t', r, dim_res_ctx, 'Resource') + else: + emit_resource('\t\t\t', r, obj_type) + elif kind == 'dim': + for d in dims: + if dim_res_ctx: + emit_attribute('\t\t\t', d, dim_res_ctx, 'Dimension') + else: + emit_dimension('\t\t\t', d, obj_type) else: - emit_resource('\t\t\t', r, obj_type) - for d in dims: - if dim_res_ctx: - emit_attribute('\t\t\t', d, dim_res_ctx, 'Dimension') - else: - emit_dimension('\t\t\t', d, obj_type) - for a in reg_attrs: - emit_attribute('\t\t\t', a, reg_ctx) + for a in reg_attrs: + emit_attribute('\t\t\t', a, reg_ctx) for cmd in reg_commands: emit_command('\t\t\t', cmd['name'], cmd['def']) X('\t\t') diff --git a/tests/skills/cases/form-compile-from-object/snapshots/inforeg-record-nonperiodic/InformationRegisters/АдресаМагазинов.xml b/tests/skills/cases/form-compile-from-object/snapshots/inforeg-record-nonperiodic/InformationRegisters/АдресаМагазинов.xml index f899134c..8876577b 100644 --- a/tests/skills/cases/form-compile-from-object/snapshots/inforeg-record-nonperiodic/InformationRegisters/АдресаМагазинов.xml +++ b/tests/skills/cases/form-compile-from-object/snapshots/inforeg-record-nonperiodic/InformationRegisters/АдресаМагазинов.xml @@ -213,7 +213,50 @@ Use - + + + Комментарий + + + ru + Комментарий + + + + + xs:string + + 500 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + Магазин @@ -259,49 +302,6 @@ Use - - - Комментарий - - - ru - Комментарий - - - - - xs:string - - 500 - Variable - - - false - - - - false - - false - false - - - false - - DontCheck - Items - - - Auto - Auto - - - Auto - DontIndex - Use - Use - -
ФормаЗаписи
diff --git a/tests/skills/cases/meta-compile/snapshots/accounting-register/AccountingRegisters/Хозрасчетный.xml b/tests/skills/cases/meta-compile/snapshots/accounting-register/AccountingRegisters/Хозрасчетный.xml index d4d8bc9a..0a1edb69 100644 --- a/tests/skills/cases/meta-compile/snapshots/accounting-register/AccountingRegisters/Хозрасчетный.xml +++ b/tests/skills/cases/meta-compile/snapshots/accounting-register/AccountingRegisters/Хозрасчетный.xml @@ -187,7 +187,46 @@ - + + + Организация + + + ru + Организация + + + + + d5p1:CatalogRef.Организации + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + false + + false + DontIndex + Use + + + Сумма @@ -230,45 +269,6 @@ Use - - - Организация - - - ru - Организация - - - - - d5p1:CatalogRef.Организации - - false - - - - false - - false - false - - - DontCheck - Items - - - Auto - Auto - - - Auto - false - - false - DontIndex - Use - - Содержание diff --git a/tests/skills/cases/meta-compile/snapshots/accumulation-register/AccumulationRegisters/ОстаткиТоваров.xml b/tests/skills/cases/meta-compile/snapshots/accumulation-register/AccumulationRegisters/ОстаткиТоваров.xml index 174e828e..1112cc83 100644 --- a/tests/skills/cases/meta-compile/snapshots/accumulation-register/AccumulationRegisters/ОстаткиТоваров.xml +++ b/tests/skills/cases/meta-compile/snapshots/accumulation-register/AccumulationRegisters/ОстаткиТоваров.xml @@ -195,83 +195,7 @@ Use - - - Номенклатура - - - ru - Номенклатура - - - - - d5p1:CatalogRef.Номенклатура - - false - - - - false - - false - false - - - DontCheck - Items - - - Auto - Auto - - - Auto - false - DontIndex - Use - true - - - - - Склад - - - ru - Склад - - - - - d5p1:CatalogRef.Склады - - false - - - - false - - false - false - - - DontCheck - Items - - - Auto - Auto - - - Auto - false - DontIndex - Use - true - - - + Комментарий @@ -311,6 +235,82 @@ Use + + + Номенклатура + + + ru + Номенклатура + + + + + d5p1:CatalogRef.Номенклатура + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + false + DontIndex + Use + true + + + + + Склад + + + ru + Склад + + + + + d5p1:CatalogRef.Склады + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + false + DontIndex + Use + true + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/calculation-register/CalculationRegisters/Начисления.xml b/tests/skills/cases/meta-compile/snapshots/calculation-register/CalculationRegisters/Начисления.xml index a9e56023..469d8862 100644 --- a/tests/skills/cases/meta-compile/snapshots/calculation-register/CalculationRegisters/Начисления.xml +++ b/tests/skills/cases/meta-compile/snapshots/calculation-register/CalculationRegisters/Начисления.xml @@ -296,46 +296,7 @@ Use - - - Сотрудник - - - ru - Сотрудник - - - - - d5p1:CatalogRef.Сотрудники - - false - - - - false - - false - false - - - DontCheck - Items - - - Auto - Auto - - - Auto - false - false - - DontIndex - Use - - - + Комментарий @@ -376,6 +337,45 @@ Use + + + Сотрудник + + + ru + Сотрудник + + + + + d5p1:CatalogRef.Сотрудники + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + false + false + + DontIndex + Use + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/ChartsOfCharacteristicTypes/ВидыСвойств.xml b/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/ChartsOfCharacteristicTypes/ВидыСвойств.xml index 3e07de82..9c098025 100644 --- a/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/ChartsOfCharacteristicTypes/ВидыСвойств.xml +++ b/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/ChartsOfCharacteristicTypes/ВидыСвойств.xml @@ -41,17 +41,17 @@ xs:string - - 100 - Variable - xs:decimal + xs:boolean 15 2 Any - xs:boolean + + 100 + Variable + false true diff --git a/tests/skills/cases/meta-compile/snapshots/chart-of-characteristic-types/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения.xml b/tests/skills/cases/meta-compile/snapshots/chart-of-characteristic-types/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения.xml index 9dba34bb..1e9d3fd4 100644 --- a/tests/skills/cases/meta-compile/snapshots/chart-of-characteristic-types/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения.xml +++ b/tests/skills/cases/meta-compile/snapshots/chart-of-characteristic-types/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения.xml @@ -41,22 +41,22 @@ Catalog.ЗначенияСвойств xs:string - - 200 - Variable - xs:decimal + xs:boolean + xs:dateTime + d5p1:CatalogRef.ЗначенияСвойств 15 2 Any - xs:boolean - xs:dateTime + + 200 + Variable + Date - d5p1:CatalogRef.ЗначенияСвойств true true 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 61fb79af..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 @@ -15,16 +15,16 @@ Размер одежды xs:string - - 50 - Variable - xs:decimal 3 0 Any + + 50 + Variable + false diff --git a/tests/skills/cases/meta-compile/snapshots/exchange-plan/ExchangePlans/ОбменСФилиалами.xml b/tests/skills/cases/meta-compile/snapshots/exchange-plan/ExchangePlans/ОбменСФилиалами.xml index acd3048d..d2e225f8 100644 --- a/tests/skills/cases/meta-compile/snapshots/exchange-plan/ExchangePlans/ОбменСФилиалами.xml +++ b/tests/skills/cases/meta-compile/snapshots/exchange-plan/ExchangePlans/ОбменСФилиалами.xml @@ -55,6 +55,84 @@ + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + DontCheck @@ -107,32 +185,6 @@ - - - ShowError - false - false - Auto - - - false - - - Auto - Auto - - false - Use - false - - - - Use - - - - - ShowError @@ -164,61 +216,9 @@ - + - DontCheck - false - false - Auto - - - false - - - Auto - Auto - - false - Use - false - - - - Use - - - - - - - - DontCheck - false - false - Auto - - - false - - - Auto - Auto - - false - Use - false - - - - Use - - - - - - - - DontCheck + ShowError false false Auto diff --git a/tests/skills/cases/meta-info/snapshots/cct-value-type-collapsed/ChartsOfCharacteristicTypes/ВидыСубконто.xml b/tests/skills/cases/meta-info/snapshots/cct-value-type-collapsed/ChartsOfCharacteristicTypes/ВидыСубконто.xml index e61964f1..c3983d5d 100644 --- a/tests/skills/cases/meta-info/snapshots/cct-value-type-collapsed/ChartsOfCharacteristicTypes/ВидыСубконто.xml +++ b/tests/skills/cases/meta-info/snapshots/cct-value-type-collapsed/ChartsOfCharacteristicTypes/ВидыСубконто.xml @@ -41,23 +41,23 @@ xs:string - - 100 - Variable - xs:decimal + xs:dateTime + xs:boolean + cfg:CatalogRef + cfg:DocumentRef 10 2 Any - xs:dateTime + + 100 + Variable + Date - xs:boolean - cfg:CatalogRef - cfg:DocumentRef false true diff --git a/tests/skills/cases/meta-info/snapshots/drilldown-value-type/ChartsOfCharacteristicTypes/ВидыСубконто.xml b/tests/skills/cases/meta-info/snapshots/drilldown-value-type/ChartsOfCharacteristicTypes/ВидыСубконто.xml index e61964f1..c3983d5d 100644 --- a/tests/skills/cases/meta-info/snapshots/drilldown-value-type/ChartsOfCharacteristicTypes/ВидыСубконто.xml +++ b/tests/skills/cases/meta-info/snapshots/drilldown-value-type/ChartsOfCharacteristicTypes/ВидыСубконто.xml @@ -41,23 +41,23 @@ xs:string - - 100 - Variable - xs:decimal + xs:dateTime + xs:boolean + cfg:CatalogRef + cfg:DocumentRef 10 2 Any - xs:dateTime + + 100 + Variable + Date - xs:boolean - cfg:CatalogRef - cfg:DocumentRef false true