From 0fc2d738a206487a0e3244df6ad37c4c437cabb8 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Thu, 6 Aug 2026 17:37:25 +0300 Subject: [PATCH] =?UTF-8?q?fix(meta-compile):=20=D0=BF=D0=BE=D1=80=D1=8F?= =?UTF-8?q?=D0=B4=D0=BE=D0=BA=20=D1=81=D1=82=D0=B0=D0=BD=D0=B4=D0=B0=D1=80?= =?UTF-8?q?=D1=82=D0=BD=D1=8B=D1=85=20=D1=80=D0=B5=D0=BA=D0=B2=D0=B8=D0=B7?= =?UTF-8?q?=D0=B8=D1=82=D0=BE=D0=B2=20=D0=B5=D1=89=D1=91=20=D1=87=D0=B5?= =?UTF-8?q?=D1=82=D1=8B=D1=80=D1=91=D1=85=20=D1=82=D0=B8=D0=BF=D0=BE=D0=B2?= =?UTF-8?q?=20+=20Use=20=D1=83=20=D0=9F=D0=92=D0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Раундтрип покрывал пять видов объектов из сорока с лишним, поэтому расхождения порядка в остальных были не видны. Списки расширены до «по три объекта из каждого вида» (112 объектов, 42 вида) — содержательных расхождений нет нигде, но всплыли перестановки. 1. Порядок стандартных реквизитов, снят с корпуса acc+erp: - ChartOfCharacteristicTypes: PredefinedDataName, ValueType, Description, Code, IsFolder, Parent, Predefined, DeletionMark, Ref; - BusinessProcess: Started, HeadTask, Completed, Ref, DeletionMark, Date, Number; - Task: Executed, Description, RoutePoint, BusinessProcess, Ref, DeletionMark, Date, Number; - AccountingRegister: Account, Active, LineNumber, Recorder, Period. IsFolder добавлен в фикс-список ПВХ: он есть во всех 47 объектных блоках корпуса (5 выгрузок) и НЕ связан с иерархичностью — плоских ПВХ вдвое больше иерархических (36 против 15), и у них он тоже есть. 2. Новый контекст реквизита `cct` для ПВХ. Структурно реквизит ПВХ совпадает со справочником, но у него идёт ПОСЛЕ , а у справочника — перед (корпус: Catalog `Use,Indexing,FullTextSearch`, ПВХ `Indexing,Use,FullTextSearch,DataHistory`). Раньше оба шли одним контекстом. Проверка: - ПВХ (24 объекта): порядок ≠ 23 → 0; все виды (112): 7 → 1; - шесть основных списков (4897 объектов) без регрессии: порядок ≠ 0, TOTAL diff lines 0, match не просел; - юнит-тесты 648/648 ps1, 645/648 py; - 1С-сертификация на 8.3.24: accounting-register, business-process, task, chart-of-characteristic-types — все приняты; - дрейф эталонов 6 файлов: перестановки плюс единственное новое содержимое — блок IsFolder (проверено вырезанием: без него мультимножества совпадают). Остаётся известным: у бухрегистра условные стандартные реквизиты стоят по обе стороны фикс-списка (PeriodAdjustment перед, ExtDimension1..3 и ExtDimensionType1..3 после), а эмиттер кладёт все «лишние» ключи вперёд. Это правка механизма, а не таблицы — отдельной задачей. Co-Authored-By: Claude Opus 5 (1M context) --- .../meta-compile/scripts/meta-compile.ps1 | 27 ++- .../meta-compile/scripts/meta-compile.py | 25 ++- .../AccountingRegisters/Хозрасчетный.xml | 106 ++++----- .../СогласованиеДокумента.xml | 156 ++++++------- .../ДополнительныеРеквизитыИСведения.xml | 136 +++++++----- .../task/Tasks/ЗадачаИсполнителя.xml | 208 +++++++++--------- .../ВидыСведений.xml | 138 +++++++----- .../ccot-value-type-marker/draft.json | 3 +- 8 files changed, 434 insertions(+), 365 deletions(-) diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1 index 8166b47e..a5e18f94 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.85 — Compile 1C metadata object from JSON +# meta-compile v1.86 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -1300,16 +1300,17 @@ $script:standardAttributesByType = @{ "Enum" = @("Order","Ref") "InformationRegister" = @("Active","LineNumber","Recorder","Period") "AccumulationRegister" = @("Active","LineNumber","Recorder","Period") - "AccountingRegister" = @("Active","Period","Recorder","LineNumber","Account") + "AccountingRegister" = @("Account","Active","LineNumber","Recorder","Period") "CalculationRegister" = @("Active","Recorder","LineNumber","RegistrationPeriod","CalculationType","ReversingEntry") "ChartOfAccounts" = @("PredefinedDataName","Order","OffBalance","Type","Description","Code","Parent","Predefined","DeletionMark","Ref") - "ChartOfCharacteristicTypes" = @("PredefinedDataName","Predefined","Ref","DeletionMark","Description","Code","Parent","ValueType") + "ChartOfCharacteristicTypes" = @("PredefinedDataName","ValueType","Description","Code","IsFolder","Parent","Predefined","DeletionMark","Ref") "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") - # Порядок снят с выгрузки: у плана обмена блок начинается с ThisNode, а не с Ref - # (acc+erp, 8 объектов, разброса нет). Прочие типы в этой таблице совпадают с - # платформой — расхождений порядка по ним корпусный раундтрип не показал. + "BusinessProcess" = @("Started","HeadTask","Completed","Ref","DeletionMark","Date","Number") + "Task" = @("Executed","Description","RoutePoint","BusinessProcess","Ref","DeletionMark","Date","Number") + # Порядок в каждом списке — канон выгрузки, снят с корпуса acc+erp (внутри типа разброса нет). + # У ПВХ IsFolder входит в фикс-список: он есть у всех 23 объектов корпуса с этим блоком. + # У бухрегистра PeriodAdjustment, наоборот, условен (1 из 3) — он приходит как «лишний» + # ключ и эмитится ПЕРЕД фикс-списком, что совпадает с платформой. "ExchangePlan" = @("ThisNode","ReceivedNo","SentNo","Ref","DeletionMark","Description","Code") "DocumentJournal" = @("Type","Ref","Date","Posted","DeletionMark","Number") } @@ -2003,9 +2004,12 @@ function Emit-Attribute { } } - # Use — only for catalog top-level attributes + # Use — у реквизитов справочника и ПВХ. Позиция РАЗНАЯ: справочник пишет Use ПЕРЕД + # Indexing, ПВХ — ПОСЛЕ него (корпус acc+erp: Catalog `Use,Indexing,FullTextSearch`, + # ПВХ `Indexing,Use,FullTextSearch,DataHistory`). Отсюда отдельный контекст "cct": + # структурно реквизит ПВХ совпадает со справочником, расходится только этим порядком. + $use = if ($parsed.use) { $parsed.use } else { "ForItem" } if ($context -eq "catalog") { - $use = if ($parsed.use) { $parsed.use } else { "ForItem" } X "$indent`t`t$use" } @@ -2021,6 +2025,7 @@ function Emit-Attribute { if ($parsed.indexing) { $indexing = $parsed.indexing } X "$indent`t`t$indexing" } + if ($context -eq "cct") { X "$indent`t`t$use" } # Реквизит адресации задачи: AddressingDimension (ссылка на измерение регистра исполнителей), между Indexing и FullTextSearch. if ($context -eq "task-addressing" -and $elemTag -eq "AddressingAttribute") { @@ -4328,7 +4333,7 @@ if ($objType -in $typesWithAttrTS) { "Catalog" { "catalog" } "Document" { "document" } { $_ -in @("DataProcessor","Report") } { "processor" } - "ChartOfCharacteristicTypes" { "catalog" } # реквизиты ПВХ структурно как у справочника (Use/FillFromFillingValue/DataHistory) + "ChartOfCharacteristicTypes" { "cct" } # как catalog (Use/FillFromFillingValue/DataHistory), но Use ПОСЛЕ Indexing { $_ -in @("ChartOfAccounts","ChartOfCalculationTypes") } { "account" } # как catalog, но БЕЗ (реквизиты ПС/ПВР не иерархичны как справочник) default { "object" } } diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py index 8da7fa90..e98ca59a 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.85 — Compile 1C metadata object from JSON +# meta-compile v1.86 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -1333,13 +1333,17 @@ standard_attributes_by_type = { 'Enum': ['Order', 'Ref'], 'InformationRegister': ['Active', 'LineNumber', 'Recorder', 'Period'], 'AccumulationRegister': ['Active', 'LineNumber', 'Recorder', 'Period'], - 'AccountingRegister': ['Active', 'Period', 'Recorder', 'LineNumber', 'Account'], + 'AccountingRegister': ['Account', 'Active', 'LineNumber', 'Recorder', 'Period'], 'CalculationRegister': ['Active', 'Recorder', 'LineNumber', 'RegistrationPeriod', 'CalculationType', 'ReversingEntry'], 'ChartOfAccounts': ['PredefinedDataName', 'Order', 'OffBalance', 'Type', 'Description', 'Code', 'Parent', 'Predefined', 'DeletionMark', 'Ref'], - 'ChartOfCharacteristicTypes': ['PredefinedDataName', 'Predefined', 'Ref', 'DeletionMark', 'Description', 'Code', 'Parent', 'ValueType'], + 'ChartOfCharacteristicTypes': ['PredefinedDataName', 'ValueType', 'Description', 'Code', 'IsFolder', 'Parent', 'Predefined', 'DeletionMark', 'Ref'], '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'], + # Порядок в каждом списке — канон выгрузки, снят с корпуса acc+erp (внутри типа разброса нет). + # У ПВХ IsFolder входит в фикс-список: он есть у всех 23 объектов корпуса с этим блоком. + # У бухрегистра PeriodAdjustment, наоборот, условен (1 из 3) — он приходит как «лишний» + # ключ и эмитится ПЕРЕД фикс-списком, что совпадает с платформой. + 'BusinessProcess': ['Started', 'HeadTask', 'Completed', 'Ref', 'DeletionMark', 'Date', 'Number'], + 'Task': ['Executed', 'Description', 'RoutePoint', 'BusinessProcess', 'Ref', 'DeletionMark', 'Date', 'Number'], # Порядок снят с выгрузки: у плана обмена блок начинается с ThisNode, а не с Ref # (acc+erp, 8 объектов, разброса нет). Прочие типы в этой таблице совпадают с # платформой — расхождений порядка по ним корпусный раундтрип не показал. @@ -2081,8 +2085,13 @@ def emit_attribute(indent, parsed, context, elem_tag='Attribute'): X(f'{indent}\t\t{esc_xml_text(str(parsed["extDimensionAccountingFlag"]))}') else: X(f'{indent}\t\t') + # Use — у реквизитов справочника и ПВХ. Позиция РАЗНАЯ: справочник пишет Use ПЕРЕД + # Indexing, ПВХ — ПОСЛЕ него (корпус acc+erp: Catalog `Use,Indexing,FullTextSearch`, + # ПВХ `Indexing,Use,FullTextSearch,DataHistory`). Отсюда отдельный контекст 'cct': + # структурно реквизит ПВХ совпадает со справочником, расходится только этим порядком. + use_value = parsed.get("use") or "ForItem" if context == 'catalog': - X(f'{indent}\t\t{parsed.get("use") or "ForItem"}') + X(f'{indent}\t\t{use_value}') if context not in ('processor', 'processor-tabular'): # Признаки учёта ПС (account-flag) не имеют /, но имеют . if context != 'account-flag': @@ -2096,6 +2105,8 @@ def emit_attribute(indent, parsed, context, elem_tag='Attribute'): if parsed.get('indexing'): indexing = parsed['indexing'] X(f'{indent}\t\t{indexing}') + if context == 'cct': + X(f'{indent}\t\t{use_value}') # Реквизит адресации задачи: AddressingDimension (между Indexing и FullTextSearch). if context == 'task-addressing' and elem_tag == 'AddressingAttribute': if parsed.get('addressingDimension'): @@ -4245,7 +4256,7 @@ if obj_type in types_with_attr_ts: elif obj_type in ('DataProcessor', 'Report'): context = 'processor' elif obj_type == 'ChartOfCharacteristicTypes': - context = 'catalog' # реквизиты ПВХ структурно как у справочника (Use/FillFromFillingValue/DataHistory) + context = 'cct' # как catalog (Use/FillFromFillingValue/DataHistory), но Use ПОСЛЕ Indexing elif obj_type in ('ChartOfAccounts', 'ChartOfCalculationTypes'): context = 'account' # как catalog, но БЕЗ (реквизиты ПС/ПВР не иерархичны как справочник) else: 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 f90a91ca..fce7b5b5 100644 --- a/tests/skills/cases/meta-compile/snapshots/accounting-register/AccountingRegisters/Хозрасчетный.xml +++ b/tests/skills/cases/meta-compile/snapshots/accounting-register/AccountingRegisters/Хозрасчетный.xml @@ -48,6 +48,32 @@ + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + DontCheck @@ -74,58 +100,6 @@ - - - DontCheck - false - false - Auto - - - false - - - Auto - Auto - - false - Use - false - - - - Use - - - - - - - - DontCheck - false - false - Auto - - - false - - - Auto - Auto - - false - Use - false - - - - Use - - - - - DontCheck @@ -152,7 +126,33 @@ - + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + DontCheck false diff --git a/tests/skills/cases/meta-compile/snapshots/business-process/BusinessProcesses/СогласованиеДокумента.xml b/tests/skills/cases/meta-compile/snapshots/business-process/BusinessProcesses/СогласованиеДокумента.xml index 60093cd6..00734df7 100644 --- a/tests/skills/cases/meta-compile/snapshots/business-process/BusinessProcesses/СогласованиеДокумента.xml +++ b/tests/skills/cases/meta-compile/snapshots/business-process/BusinessProcesses/СогласованиеДокумента.xml @@ -57,6 +57,84 @@ Variable true + + + 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 @@ -161,84 +239,6 @@ - - - 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 - - - - - 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 8099e88e..1e75a304 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 @@ -94,59 +94,7 @@ - - - DontCheck - false - false - Auto - - - false - - - Auto - Auto - - false - Use - false - - - - Use - - - - - - - - DontCheck - false - false - Auto - - - false - - - Auto - Auto - - false - Use - false - - - - Use - - - - - - + DontCheck false @@ -229,6 +177,32 @@ + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + DontCheck @@ -255,7 +229,59 @@ - + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + DontCheck false @@ -358,8 +384,8 @@ Auto - ForItem DontIndex + ForItem Use Use diff --git a/tests/skills/cases/meta-compile/snapshots/task/Tasks/ЗадачаИсполнителя.xml b/tests/skills/cases/meta-compile/snapshots/task/Tasks/ЗадачаИсполнителя.xml index c48fb3d6..3a1812e3 100644 --- a/tests/skills/cases/meta-compile/snapshots/task/Tasks/ЗадачаИсполнителя.xml +++ b/tests/skills/cases/meta-compile/snapshots/task/Tasks/ЗадачаИсполнителя.xml @@ -45,110 +45,6 @@ - - - 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 - false - false - Auto - - - false - - - Auto - Auto - - false - Use - false - - - - Use - - - - - DontCheck @@ -253,6 +149,110 @@ + + + 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 + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + AsDescription diff --git a/tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/ChartsOfCharacteristicTypes/ВидыСведений.xml b/tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/ChartsOfCharacteristicTypes/ВидыСведений.xml index dd5db385..c91f59d2 100644 --- a/tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/ChartsOfCharacteristicTypes/ВидыСведений.xml +++ b/tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/ChartsOfCharacteristicTypes/ВидыСведений.xml @@ -82,7 +82,7 @@ - + DontCheck false @@ -104,59 +104,7 @@ Use - - - - - - - DontCheck - false - false - Auto - - - false - - - Auto - Auto - - false - Use - false - - - - Use - - - - - - - - DontCheck - false - false - Auto - - - false - - - Auto - Auto - - false - Use - false - - - - Use - - + @@ -212,6 +160,32 @@ + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + DontCheck @@ -238,7 +212,7 @@ - + DontCheck false @@ -260,7 +234,59 @@ Use - + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + diff --git a/tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/draft.json b/tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/draft.json index 93cc5991..38eee826 100644 --- a/tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/draft.json +++ b/tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/draft.json @@ -7,6 +7,7 @@ "fillValue": { "typeDescription": true } - } + }, + "IsFolder": {} } } \ No newline at end of file