From cd6d305eea483ed0c88cb91371ee3d0510b5f318 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Mon, 6 Jul 2026 17:51:56 +0300 Subject: [PATCH] =?UTF-8?q?feat(meta-compile,meta-decompile):=20object-?= =?UTF-8?q?=D1=81=D0=B2=D0=BE=D0=B9=D1=81=D1=82=D0=B2=D0=BE=20fullTextSear?= =?UTF-8?q?chOnInputByString=20(v1.44/v0.36)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Компилятор хардкодил DontUse в 8 местах (все типы), декомпилятор не захватывал → значение Use терялось при раундтрипе. Корпус: DontUse 2757 / Use 4 (все Catalog) — дефолт эмиссии DontUse верен, чистый omit-on-default редкий override. Компилятор → Get-EnumProp (+validEnumValues Use/DontUse), декомпилятор Add-EnumProp дефолт DontUse. Таргет 4/4 match TOTAL 0, регресс 49/49 ps1+py identical. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../meta-compile/scripts/meta-compile.ps1 | 19 ++++++++++--------- .../meta-compile/scripts/meta-compile.py | 19 ++++++++++--------- .../meta-decompile/scripts/meta-decompile.ps1 | 3 ++- docs/meta-dsl-spec.md | 1 + .../meta-compile/catalog-object-props.json | 1 + .../Catalogs/НастройкиОбмена.xml | 2 +- 6 files changed, 25 insertions(+), 20 deletions(-) diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1 index c8bb5731..0f7eb6ea 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.43 — Compile 1C metadata object from JSON +# meta-compile v1.44 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -263,6 +263,7 @@ $script:validEnumValues = @{ "ChoiceHistoryOnInput" = @("Auto","DontUse") "PredefinedDataUpdate" = @("Auto","DontAutoUpdate","AutoUpdate") "SearchStringModeOnInputByString"= @("Begin","AnyPart") + "FullTextSearchOnInputByString" = @("Use","DontUse") } function Normalize-EnumValue { @@ -2021,7 +2022,7 @@ function Emit-CatalogProperties { } Emit-FieldBlock $i "InputByString" $ibFields X "$i$(Get-EnumProp 'SearchStringModeOnInputByString' 'searchStringModeOnInputByString' 'Begin')" - X "$iDontUse" + X "$i$(Get-EnumProp 'FullTextSearchOnInputByString' 'fullTextSearchOnInputByString' 'DontUse')" X "$iDirectly" Emit-FormRef $i "DefaultObjectForm" $def.defaultObjectForm Emit-FormRef $i "DefaultFolderForm" $def.defaultFolderForm @@ -2095,7 +2096,7 @@ function Emit-DocumentProperties { Emit-FieldBlock $i "InputByString" $ibFields X "$i$(Get-EnumProp 'CreateOnInput' 'createOnInput' 'Use')" X "$i$(Get-EnumProp 'SearchStringModeOnInputByString' 'searchStringModeOnInputByString' 'Begin')" - X "$iDontUse" + X "$i$(Get-EnumProp 'FullTextSearchOnInputByString' 'fullTextSearchOnInputByString' 'DontUse')" X "$iDirectly" Emit-FormRef $i "DefaultObjectForm" $def.defaultObjectForm Emit-FormRef $i "DefaultListForm" $def.defaultListForm @@ -2547,7 +2548,7 @@ function Emit-ExchangePlanProperties { } Emit-FieldBlock $i "InputByString" $ibFields X "$i$(Get-EnumProp 'SearchStringModeOnInputByString' 'searchStringModeOnInputByString' 'Begin')" - X "$iDontUse" + X "$i$(Get-EnumProp 'FullTextSearchOnInputByString' 'fullTextSearchOnInputByString' 'DontUse')" X "$iDirectly" Emit-FormRef $i "DefaultObjectForm" $def.defaultObjectForm Emit-FormRef $i "DefaultListForm" $def.defaultListForm @@ -2666,7 +2667,7 @@ function Emit-ChartOfCharacteristicTypesProperties { X "$i$(Get-EnumProp 'CreateOnInput' 'createOnInput' 'DontUse')" X "$i$(Get-EnumProp 'SearchStringModeOnInputByString' 'searchStringModeOnInputByString' 'Begin')" X "$iDirectly" - X "$iDontUse" + X "$i$(Get-EnumProp 'FullTextSearchOnInputByString' 'fullTextSearchOnInputByString' 'DontUse')" X "$i$(Get-EnumProp 'ChoiceHistoryOnInput' 'choiceHistoryOnInput' 'Auto')" Emit-FormRef $i "DefaultObjectForm" $def.defaultObjectForm Emit-FormRef $i "DefaultFolderForm" $def.defaultFolderForm @@ -2828,7 +2829,7 @@ function Emit-ChartOfAccountsProperties { } Emit-FieldBlock $i "InputByString" $ibFields X "$i$(Get-EnumProp 'SearchStringModeOnInputByString' 'searchStringModeOnInputByString' 'Begin')" - X "$iDontUse" + X "$i$(Get-EnumProp 'FullTextSearchOnInputByString' 'fullTextSearchOnInputByString' 'DontUse')" X "$iDirectly" X "$i$(Get-EnumProp 'CreateOnInput' 'createOnInput' 'DontUse')" X "$i$(Get-EnumProp 'ChoiceHistoryOnInput' 'choiceHistoryOnInput' 'Auto')" @@ -2961,7 +2962,7 @@ function Emit-ChartOfCalculationTypesProperties { } Emit-FieldBlock $i "InputByString" $ibFields X "$i$(Get-EnumProp 'SearchStringModeOnInputByString' 'searchStringModeOnInputByString' 'Begin')" - X "$iDontUse" + X "$i$(Get-EnumProp 'FullTextSearchOnInputByString' 'fullTextSearchOnInputByString' 'DontUse')" X "$iDirectly" X "$i$(Get-EnumProp 'CreateOnInput' 'createOnInput' 'DontUse')" X "$i$(Get-EnumProp 'ChoiceHistoryOnInput' 'choiceHistoryOnInput' 'Auto')" @@ -3098,7 +3099,7 @@ function Emit-BusinessProcessProperties { X "$i" X "$iDontUse" X "$iBegin" - X "$iDontUse" + X "$i$(Get-EnumProp 'FullTextSearchOnInputByString' 'fullTextSearchOnInputByString' 'DontUse')" X "$iDirectly" X "$i" X "$i" @@ -3171,7 +3172,7 @@ function Emit-TaskProperties { X "$i" X "$iDontUse" X "$iBegin" - X "$iDontUse" + X "$i$(Get-EnumProp 'FullTextSearchOnInputByString' 'fullTextSearchOnInputByString' 'DontUse')" X "$iDirectly" X "$i" X "$i" diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py index 0624131d..fdc65cb6 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.43 — Compile 1C metadata object from JSON +# meta-compile v1.44 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -380,6 +380,7 @@ valid_enum_values = { 'ChoiceHistoryOnInput': ['Auto', 'DontUse'], 'PredefinedDataUpdate': ['Auto', 'DontAutoUpdate', 'AutoUpdate'], 'SearchStringModeOnInputByString': ['Begin', 'AnyPart'], + 'FullTextSearchOnInputByString': ['Use', 'DontUse'], } def normalize_enum_value(prop_name, value): @@ -2035,7 +2036,7 @@ def emit_catalog_properties(indent): ib_fields.append(f'Catalog.{obj_name}.StandardAttribute.Code') emit_field_block(i, 'InputByString', ib_fields) X(f'{i}{get_enum_prop("SearchStringModeOnInputByString", "searchStringModeOnInputByString", "Begin")}') - X(f'{i}DontUse') + X(f'{i}{get_enum_prop("FullTextSearchOnInputByString", "fullTextSearchOnInputByString", "DontUse")}') X(f'{i}Directly') emit_form_ref(i, 'DefaultObjectForm', defn.get('defaultObjectForm')) emit_form_ref(i, 'DefaultFolderForm', defn.get('defaultFolderForm')) @@ -2104,7 +2105,7 @@ def emit_document_properties(indent): emit_field_block(i, 'InputByString', ib_fields) X(f'{i}{get_enum_prop("CreateOnInput", "createOnInput", "Use")}') X(f'{i}{get_enum_prop("SearchStringModeOnInputByString", "searchStringModeOnInputByString", "Begin")}') - X(f'{i}DontUse') + X(f'{i}{get_enum_prop("FullTextSearchOnInputByString", "fullTextSearchOnInputByString", "DontUse")}') X(f'{i}Directly') emit_form_ref(i, 'DefaultObjectForm', defn.get('defaultObjectForm')) emit_form_ref(i, 'DefaultListForm', defn.get('defaultListForm')) @@ -2494,7 +2495,7 @@ def emit_exchange_plan_properties(indent): ib_fields.append(f'ExchangePlan.{obj_name}.StandardAttribute.Code') emit_field_block(i, 'InputByString', ib_fields) X(f'{i}{get_enum_prop("SearchStringModeOnInputByString", "searchStringModeOnInputByString", "Begin")}') - X(f'{i}DontUse') + X(f'{i}{get_enum_prop("FullTextSearchOnInputByString", "fullTextSearchOnInputByString", "DontUse")}') X(f'{i}Directly') emit_form_ref(i, 'DefaultObjectForm', defn.get('defaultObjectForm')) emit_form_ref(i, 'DefaultListForm', defn.get('defaultListForm')) @@ -2594,7 +2595,7 @@ def emit_chart_of_characteristic_types_properties(indent): X(f'{i}{get_enum_prop("CreateOnInput", "createOnInput", "DontUse")}') X(f'{i}{get_enum_prop("SearchStringModeOnInputByString", "searchStringModeOnInputByString", "Begin")}') X(f'{i}Directly') - X(f'{i}DontUse') + X(f'{i}{get_enum_prop("FullTextSearchOnInputByString", "fullTextSearchOnInputByString", "DontUse")}') X(f'{i}{get_enum_prop("ChoiceHistoryOnInput", "choiceHistoryOnInput", "Auto")}') emit_form_ref(i, 'DefaultObjectForm', defn.get('defaultObjectForm')) emit_form_ref(i, 'DefaultFolderForm', defn.get('defaultFolderForm')) @@ -2734,7 +2735,7 @@ def emit_chart_of_accounts_properties(indent): ib_fields.append(f'ChartOfAccounts.{obj_name}.StandardAttribute.Code') emit_field_block(i, 'InputByString', ib_fields) X(f'{i}{get_enum_prop("SearchStringModeOnInputByString", "searchStringModeOnInputByString", "Begin")}') - X(f'{i}DontUse') + X(f'{i}{get_enum_prop("FullTextSearchOnInputByString", "fullTextSearchOnInputByString", "DontUse")}') X(f'{i}Directly') X(f'{i}{get_enum_prop("CreateOnInput", "createOnInput", "DontUse")}') X(f'{i}{get_enum_prop("ChoiceHistoryOnInput", "choiceHistoryOnInput", "Auto")}') @@ -2847,7 +2848,7 @@ def emit_chart_of_calculation_types_properties(indent): ib_fields.append(f'ChartOfCalculationTypes.{obj_name}.StandardAttribute.Code') emit_field_block(i, 'InputByString', ib_fields) X(f'{i}{get_enum_prop("SearchStringModeOnInputByString", "searchStringModeOnInputByString", "Begin")}') - X(f'{i}DontUse') + X(f'{i}{get_enum_prop("FullTextSearchOnInputByString", "fullTextSearchOnInputByString", "DontUse")}') X(f'{i}Directly') X(f'{i}{get_enum_prop("CreateOnInput", "createOnInput", "DontUse")}') X(f'{i}{get_enum_prop("ChoiceHistoryOnInput", "choiceHistoryOnInput", "Auto")}') @@ -2961,7 +2962,7 @@ def emit_business_process_properties(indent): X(f'{i}') X(f'{i}DontUse') X(f'{i}Begin') - X(f'{i}DontUse') + X(f'{i}{get_enum_prop("FullTextSearchOnInputByString", "fullTextSearchOnInputByString", "DontUse")}') X(f'{i}Directly') X(f'{i}') X(f'{i}') @@ -3028,7 +3029,7 @@ def emit_task_properties(indent): X(f'{i}') X(f'{i}DontUse') X(f'{i}Begin') - X(f'{i}DontUse') + X(f'{i}{get_enum_prop("FullTextSearchOnInputByString", "fullTextSearchOnInputByString", "DontUse")}') X(f'{i}Directly') X(f'{i}') X(f'{i}') diff --git a/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 b/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 index fb8d7a5d..6c10a445 100644 --- a/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 +++ b/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 @@ -1,4 +1,4 @@ -# meta-decompile v0.35 — XML объекта метаданных 1С → JSON-черновик формата meta-compile +# meta-decompile v0.36 — XML объекта метаданных 1С → JSON-черновик формата meta-compile # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # # Поддержаны: Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document. Инверс meta-compile (omit-on-default: ключ эмитим только @@ -425,6 +425,7 @@ Add-BoolProp 'includeHelpInContents' 'IncludeHelpInContents' $false Add-EnumProp 'choiceHistoryOnInput' 'ChoiceHistoryOnInput' 'Auto' Add-EnumProp 'predefinedDataUpdate' 'PredefinedDataUpdate' 'Auto' Add-EnumProp 'searchStringModeOnInputByString' 'SearchStringModeOnInputByString' 'Begin' +Add-EnumProp 'fullTextSearchOnInputByString' 'FullTextSearchOnInputByString' 'DontUse' # ExchangePlan-специфичные свойства (у Catalog этих тегов нет → блок не трогает его). if ($objType -eq 'ExchangePlan') { Add-BoolProp 'distributedInfoBase' 'DistributedInfoBase' $false diff --git a/docs/meta-dsl-spec.md b/docs/meta-dsl-spec.md index 2c931c68..19938f50 100644 --- a/docs/meta-dsl-spec.md +++ b/docs/meta-dsl-spec.md @@ -378,6 +378,7 @@ LineNumber дефолтные. Ключ `lineNumber` на объектной ф | `choiceHistoryOnInput` | `Auto` | ChoiceHistoryOnInput (Auto/DontUse) | | `predefinedDataUpdate` | `Auto` | PredefinedDataUpdate (Auto/DontAutoUpdate/AutoUpdate) | | `searchStringModeOnInputByString` | `Begin` | SearchStringModeOnInputByString (Begin/AnyPart) | +| `fullTextSearchOnInputByString` | `DontUse` | FullTextSearchOnInputByString (Use/DontUse) | | `includeHelpInContents` | `false` | IncludeHelpInContents (bool) | | `dataLockControlMode` | `Automatic` | DataLockControlMode | | `fullTextSearch` | `Use` | FullTextSearch | diff --git a/tests/skills/cases/meta-compile/catalog-object-props.json b/tests/skills/cases/meta-compile/catalog-object-props.json index 8c694f29..46d3eecc 100644 --- a/tests/skills/cases/meta-compile/catalog-object-props.json +++ b/tests/skills/cases/meta-compile/catalog-object-props.json @@ -12,6 +12,7 @@ "choiceHistoryOnInput": "DontUse", "predefinedDataUpdate": "DontAutoUpdate", "searchStringModeOnInputByString": "AnyPart", + "fullTextSearchOnInputByString": "Use", "defaultObjectForm": "Catalog.НастройкиОбмена.Form.ФормаЭлемента", "defaultListForm": "Справочник.НастройкиОбмена.Форма.ФормаСписка", "defaultChoiceForm": "Справочник.НастройкиОбмена.ФормаВыбора", diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-object-props/Catalogs/НастройкиОбмена.xml b/tests/skills/cases/meta-compile/snapshots/catalog-object-props/Catalogs/НастройкиОбмена.xml index 62739aa9..7e2d65ab 100644 --- a/tests/skills/cases/meta-compile/snapshots/catalog-object-props/Catalogs/НастройкиОбмена.xml +++ b/tests/skills/cases/meta-compile/snapshots/catalog-object-props/Catalogs/НастройкиОбмена.xml @@ -58,7 +58,7 @@ Catalog.НастройкиОбмена.StandardAttribute.Code AnyPart - DontUse + Use Directly Catalog.НастройкиОбмена.Form.ФормаЭлемента