diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1
index 60d4eb95..c219e76a 100644
--- a/.claude/skills/meta-compile/scripts/meta-compile.ps1
+++ b/.claude/skills/meta-compile/scripts/meta-compile.ps1
@@ -1380,11 +1380,11 @@ function Emit-CatalogProperties {
$fullTextSearch = Get-EnumProp "FullTextSearch" "fullTextSearch" "Use"
X "$i$fullTextSearch"
- X "$i"
- X "$i"
- X "$i"
- X "$i"
- X "$i"
+ Emit-MLText $i "ObjectPresentation" $def.objectPresentation
+ Emit-MLText $i "ExtendedObjectPresentation" $def.extendedObjectPresentation
+ Emit-MLText $i "ListPresentation" $def.listPresentation
+ Emit-MLText $i "ExtendedListPresentation" $def.extendedListPresentation
+ Emit-MLText $i "Explanation" $def.explanation
X "$iDontUse"
X "$iAuto"
X "$iDontUse"
@@ -1489,11 +1489,11 @@ function Emit-DocumentProperties {
$fullTextSearch = Get-EnumProp "FullTextSearch" "fullTextSearch" "Use"
X "$i$fullTextSearch"
- X "$i"
- X "$i"
- X "$i"
- X "$i"
- X "$i"
+ Emit-MLText $i "ObjectPresentation" $def.objectPresentation
+ Emit-MLText $i "ExtendedObjectPresentation" $def.extendedObjectPresentation
+ Emit-MLText $i "ListPresentation" $def.listPresentation
+ Emit-MLText $i "ExtendedListPresentation" $def.extendedListPresentation
+ Emit-MLText $i "Explanation" $def.explanation
X "$iAuto"
X "$iDontUse"
X "$ifalse"
@@ -1910,11 +1910,11 @@ function Emit-ExchangePlanProperties {
$fullTextSearch = Get-EnumProp "FullTextSearch" "fullTextSearch" "Use"
X "$i$fullTextSearch"
- X "$i"
- X "$i"
- X "$i"
- X "$i"
- X "$i"
+ Emit-MLText $i "ObjectPresentation" $def.objectPresentation
+ Emit-MLText $i "ExtendedObjectPresentation" $def.extendedObjectPresentation
+ Emit-MLText $i "ListPresentation" $def.listPresentation
+ Emit-MLText $i "ExtendedListPresentation" $def.extendedListPresentation
+ Emit-MLText $i "Explanation" $def.explanation
X "$iDontUse"
X "$iAuto"
X "$iDontUse"
@@ -2017,11 +2017,11 @@ function Emit-ChartOfCharacteristicTypesProperties {
$fullTextSearch = Get-EnumProp "FullTextSearch" "fullTextSearch" "Use"
X "$i$fullTextSearch"
- X "$i"
- X "$i"
- X "$i"
- X "$i"
- X "$i"
+ Emit-MLText $i "ObjectPresentation" $def.objectPresentation
+ Emit-MLText $i "ExtendedObjectPresentation" $def.extendedObjectPresentation
+ Emit-MLText $i "ListPresentation" $def.listPresentation
+ Emit-MLText $i "ExtendedListPresentation" $def.extendedListPresentation
+ Emit-MLText $i "Explanation" $def.explanation
X "$iDontUse"
X "$iAuto"
X "$iDontUse"
@@ -2155,11 +2155,11 @@ function Emit-ChartOfAccountsProperties {
$fullTextSearch = Get-EnumProp "FullTextSearch" "fullTextSearch" "Use"
X "$i$fullTextSearch"
- X "$i"
- X "$i"
- X "$i"
- X "$i"
- X "$i"
+ Emit-MLText $i "ObjectPresentation" $def.objectPresentation
+ Emit-MLText $i "ExtendedObjectPresentation" $def.extendedObjectPresentation
+ Emit-MLText $i "ListPresentation" $def.listPresentation
+ Emit-MLText $i "ExtendedListPresentation" $def.extendedListPresentation
+ Emit-MLText $i "Explanation" $def.explanation
X "$iDontUse"
X "$iAuto"
X "$iDontUse"
@@ -2272,11 +2272,11 @@ function Emit-ChartOfCalculationTypesProperties {
$fullTextSearch = Get-EnumProp "FullTextSearch" "fullTextSearch" "Use"
X "$i$fullTextSearch"
- X "$i"
- X "$i"
- X "$i"
- X "$i"
- X "$i"
+ Emit-MLText $i "ObjectPresentation" $def.objectPresentation
+ Emit-MLText $i "ExtendedObjectPresentation" $def.extendedObjectPresentation
+ Emit-MLText $i "ListPresentation" $def.listPresentation
+ Emit-MLText $i "ExtendedListPresentation" $def.extendedListPresentation
+ Emit-MLText $i "Explanation" $def.explanation
X "$iDontUse"
X "$iAuto"
}
@@ -2388,11 +2388,11 @@ function Emit-BusinessProcessProperties {
$fullTextSearch = Get-EnumProp "FullTextSearch" "fullTextSearch" "Use"
X "$i$fullTextSearch"
- X "$i"
- X "$i"
- X "$i"
- X "$i"
- X "$i"
+ Emit-MLText $i "ObjectPresentation" $def.objectPresentation
+ Emit-MLText $i "ExtendedObjectPresentation" $def.extendedObjectPresentation
+ Emit-MLText $i "ListPresentation" $def.listPresentation
+ Emit-MLText $i "ExtendedListPresentation" $def.extendedListPresentation
+ Emit-MLText $i "Explanation" $def.explanation
X "$iAuto"
X "$iDontUse"
X "$ifalse"
@@ -2461,11 +2461,11 @@ function Emit-TaskProperties {
$fullTextSearch = Get-EnumProp "FullTextSearch" "fullTextSearch" "Use"
X "$i$fullTextSearch"
- X "$i"
- X "$i"
- X "$i"
- X "$i"
- X "$i"
+ Emit-MLText $i "ObjectPresentation" $def.objectPresentation
+ Emit-MLText $i "ExtendedObjectPresentation" $def.extendedObjectPresentation
+ Emit-MLText $i "ListPresentation" $def.listPresentation
+ Emit-MLText $i "ExtendedListPresentation" $def.extendedListPresentation
+ Emit-MLText $i "Explanation" $def.explanation
X "$iAuto"
X "$iDontUse"
X "$ifalse"
diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py
index 31e14afa..1f87367e 100644
--- a/.claude/skills/meta-compile/scripts/meta-compile.py
+++ b/.claude/skills/meta-compile/scripts/meta-compile.py
@@ -1319,11 +1319,11 @@ def emit_catalog_properties(indent):
X(f'{i}{data_lock_control_mode}')
full_text_search = get_enum_prop('FullTextSearch', 'fullTextSearch', 'Use')
X(f'{i}{full_text_search}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
+ emit_mltext(i, 'ObjectPresentation', defn.get('objectPresentation'))
+ emit_mltext(i, 'ExtendedObjectPresentation', defn.get('extendedObjectPresentation'))
+ emit_mltext(i, 'ListPresentation', defn.get('listPresentation'))
+ emit_mltext(i, 'ExtendedListPresentation', defn.get('extendedListPresentation'))
+ emit_mltext(i, 'Explanation', defn.get('explanation'))
X(f'{i}DontUse')
X(f'{i}Auto')
X(f'{i}DontUse')
@@ -1406,11 +1406,11 @@ def emit_document_properties(indent):
X(f'{i}{data_lock_control_mode}')
full_text_search = get_enum_prop('FullTextSearch', 'fullTextSearch', 'Use')
X(f'{i}{full_text_search}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
+ emit_mltext(i, 'ObjectPresentation', defn.get('objectPresentation'))
+ emit_mltext(i, 'ExtendedObjectPresentation', defn.get('extendedObjectPresentation'))
+ emit_mltext(i, 'ListPresentation', defn.get('listPresentation'))
+ emit_mltext(i, 'ExtendedListPresentation', defn.get('extendedListPresentation'))
+ emit_mltext(i, 'Explanation', defn.get('explanation'))
X(f'{i}Auto')
X(f'{i}DontUse')
X(f'{i}false')
@@ -1762,11 +1762,11 @@ def emit_exchange_plan_properties(indent):
X(f'{i}{data_lock_control_mode}')
full_text_search = get_enum_prop('FullTextSearch', 'fullTextSearch', 'Use')
X(f'{i}{full_text_search}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
+ emit_mltext(i, 'ObjectPresentation', defn.get('objectPresentation'))
+ emit_mltext(i, 'ExtendedObjectPresentation', defn.get('extendedObjectPresentation'))
+ emit_mltext(i, 'ListPresentation', defn.get('listPresentation'))
+ emit_mltext(i, 'ExtendedListPresentation', defn.get('extendedListPresentation'))
+ emit_mltext(i, 'Explanation', defn.get('explanation'))
X(f'{i}DontUse')
X(f'{i}Auto')
X(f'{i}DontUse')
@@ -1854,11 +1854,11 @@ def emit_chart_of_characteristic_types_properties(indent):
X(f'{i}{data_lock_control_mode}')
full_text_search = get_enum_prop('FullTextSearch', 'fullTextSearch', 'Use')
X(f'{i}{full_text_search}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
+ emit_mltext(i, 'ObjectPresentation', defn.get('objectPresentation'))
+ emit_mltext(i, 'ExtendedObjectPresentation', defn.get('extendedObjectPresentation'))
+ emit_mltext(i, 'ListPresentation', defn.get('listPresentation'))
+ emit_mltext(i, 'ExtendedListPresentation', defn.get('extendedListPresentation'))
+ emit_mltext(i, 'Explanation', defn.get('explanation'))
X(f'{i}DontUse')
X(f'{i}Auto')
X(f'{i}DontUse')
@@ -1967,11 +1967,11 @@ def emit_chart_of_accounts_properties(indent):
X(f'{i}{data_lock_control_mode}')
full_text_search = get_enum_prop('FullTextSearch', 'fullTextSearch', 'Use')
X(f'{i}{full_text_search}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
+ emit_mltext(i, 'ObjectPresentation', defn.get('objectPresentation'))
+ emit_mltext(i, 'ExtendedObjectPresentation', defn.get('extendedObjectPresentation'))
+ emit_mltext(i, 'ListPresentation', defn.get('listPresentation'))
+ emit_mltext(i, 'ExtendedListPresentation', defn.get('extendedListPresentation'))
+ emit_mltext(i, 'Explanation', defn.get('explanation'))
X(f'{i}DontUse')
X(f'{i}Auto')
X(f'{i}DontUse')
@@ -2059,11 +2059,11 @@ def emit_chart_of_calculation_types_properties(indent):
X(f'{i}{data_lock_control_mode}')
full_text_search = get_enum_prop('FullTextSearch', 'fullTextSearch', 'Use')
X(f'{i}{full_text_search}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
+ emit_mltext(i, 'ObjectPresentation', defn.get('objectPresentation'))
+ emit_mltext(i, 'ExtendedObjectPresentation', defn.get('extendedObjectPresentation'))
+ emit_mltext(i, 'ListPresentation', defn.get('listPresentation'))
+ emit_mltext(i, 'ExtendedListPresentation', defn.get('extendedListPresentation'))
+ emit_mltext(i, 'Explanation', defn.get('explanation'))
X(f'{i}DontUse')
X(f'{i}Auto')
@@ -2156,11 +2156,11 @@ def emit_business_process_properties(indent):
X(f'{i}{data_lock_control_mode}')
full_text_search = get_enum_prop('FullTextSearch', 'fullTextSearch', 'Use')
X(f'{i}{full_text_search}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
+ emit_mltext(i, 'ObjectPresentation', defn.get('objectPresentation'))
+ emit_mltext(i, 'ExtendedObjectPresentation', defn.get('extendedObjectPresentation'))
+ emit_mltext(i, 'ListPresentation', defn.get('listPresentation'))
+ emit_mltext(i, 'ExtendedListPresentation', defn.get('extendedListPresentation'))
+ emit_mltext(i, 'Explanation', defn.get('explanation'))
X(f'{i}Auto')
X(f'{i}DontUse')
X(f'{i}false')
@@ -2223,11 +2223,11 @@ def emit_task_properties(indent):
X(f'{i}{data_lock_control_mode}')
full_text_search = get_enum_prop('FullTextSearch', 'fullTextSearch', 'Use')
X(f'{i}{full_text_search}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
- X(f'{i}')
+ emit_mltext(i, 'ObjectPresentation', defn.get('objectPresentation'))
+ emit_mltext(i, 'ExtendedObjectPresentation', defn.get('extendedObjectPresentation'))
+ emit_mltext(i, 'ListPresentation', defn.get('listPresentation'))
+ emit_mltext(i, 'ExtendedListPresentation', defn.get('extendedListPresentation'))
+ emit_mltext(i, 'Explanation', defn.get('explanation'))
X(f'{i}Auto')
X(f'{i}DontUse')
X(f'{i}false')
diff --git a/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 b/.claude/skills/meta-decompile/scripts/meta-decompile.ps1
index eb739842..33423711 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.9 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
+# meta-decompile v0.10 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
#
# Пилот: только Catalog. Инверс meta-compile (omit-on-default: ключ эмитим только
@@ -274,6 +274,15 @@ Add-EnumProp 'choiceMode' 'ChoiceMode' 'BothWays'
Add-EnumProp 'dataLockControlMode' 'DataLockControlMode' 'Automatic'
Add-EnumProp 'fullTextSearch' 'FullTextSearch' 'Use'
+# Презентации (ML, компилятор пишет пусто → omit-on-empty).
+foreach ($pp in @(
+ @('ObjectPresentation','objectPresentation'), @('ExtendedObjectPresentation','extendedObjectPresentation'),
+ @('ListPresentation','listPresentation'), @('ExtendedListPresentation','extendedListPresentation'),
+ @('Explanation','explanation'))) {
+ $pv = Get-MLValue ($props.SelectSingleNode("md:$($pp[0])", $nsm))
+ if ($null -ne $pv) { $dsl[$pp[1]] = $pv }
+}
+
# --- StandardAttributes: блок есть ⟺ кастомизация ≥1 стандартного реквизита.
# Захватываем ОТКЛОНЕНИЯ от профиля материализованного блока (профиль компилятор восстановит сам).
# Профиль Catalog: Owner{FC=ShowError,FFV=true}, Parent{FFV=true}, Description{FC=ShowError}. ---
diff --git a/docs/meta-dsl-spec.md b/docs/meta-dsl-spec.md
index ce48b43a..0bcd84f3 100644
--- a/docs/meta-dsl-spec.md
+++ b/docs/meta-dsl-spec.md
@@ -272,6 +272,11 @@ JSON DSL для описания объектов метаданных конф
| `dataLockControlMode` | `Automatic` | DataLockControlMode |
| `fullTextSearch` | `Use` | FullTextSearch |
| `owners` | `[]` | Owners |
+| `objectPresentation` | пусто | ObjectPresentation (ML) |
+| `extendedObjectPresentation` | пусто | ExtendedObjectPresentation (ML) |
+| `listPresentation` | пусто | ListPresentation (ML) |
+| `extendedListPresentation` | пусто | ExtendedListPresentation (ML) |
+| `explanation` | пусто | Explanation (ML) |
| `standardAttributes` | *(ключа нет → блок опущен)* | StandardAttributes |
| `attributes` | `[]` | → Attribute в ChildObjects |
| `tabularSections` | `{}` | → TabularSection в ChildObjects |
diff --git a/tests/skills/cases/meta-compile/catalog-attr-ml.json b/tests/skills/cases/meta-compile/catalog-attr-ml.json
index 10f1a04d..c05f5da5 100644
--- a/tests/skills/cases/meta-compile/catalog-attr-ml.json
+++ b/tests/skills/cases/meta-compile/catalog-attr-ml.json
@@ -3,6 +3,8 @@
"input": {
"type": "Catalog", "name": "Контрагенты",
"synonym": { "ru": "Контрагенты", "en": "Counterparties" },
+ "objectPresentation": { "ru": "Контрагент", "en": "Counterparty" },
+ "explanation": "Список контрагентов организации",
"attributes": [
{ "name": "ИНН", "type": "String(12)", "synonym": { "ru": "ИНН", "en": "TIN" }, "tooltip": "Идентификационный номер налогоплательщика" },
{ "name": "Комментарий", "type": "String(200)", "tooltip": { "ru": "Произвольный комментарий", "en": "Free-form comment" } }
diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-attr-ml/Catalogs/Контрагенты.xml b/tests/skills/cases/meta-compile/snapshots/catalog-attr-ml/Catalogs/Контрагенты.xml
index aabf9db8..9519affc 100644
--- a/tests/skills/cases/meta-compile/snapshots/catalog-attr-ml/Catalogs/Контрагенты.xml
+++ b/tests/skills/cases/meta-compile/snapshots/catalog-attr-ml/Catalogs/Контрагенты.xml
@@ -79,11 +79,25 @@
Automatic
Use
-
+
+
+ ru
+ Контрагент
+
+
+ en
+ Counterparty
+
+
-
+
+
+ ru
+ Список контрагентов организации
+
+
DontUse
Auto
DontUse