diff --git a/.claude/skills/cf-edit/scripts/cf-edit.ps1 b/.claude/skills/cf-edit/scripts/cf-edit.ps1
index 8f261febd..dd54f3505 100644
--- a/.claude/skills/cf-edit/scripts/cf-edit.ps1
+++ b/.claude/skills/cf-edit/scripts/cf-edit.ps1
@@ -1,4 +1,4 @@
-# cf-edit v1.24 — Edit 1C configuration root (Configuration.xml)
+# cf-edit v1.25 — Edit 1C configuration root (Configuration.xml)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
diff --git a/.claude/skills/cf-edit/scripts/cf-edit.py b/.claude/skills/cf-edit/scripts/cf-edit.py
index 101542b0a..a7f7ef2d7 100644
--- a/.claude/skills/cf-edit/scripts/cf-edit.py
+++ b/.claude/skills/cf-edit/scripts/cf-edit.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# cf-edit v1.24 — Edit 1C configuration root (Configuration.xml)
+# cf-edit v1.25 — Edit 1C configuration root (Configuration.xml)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
diff --git a/.claude/skills/cf-info/scripts/cf-info.ps1 b/.claude/skills/cf-info/scripts/cf-info.ps1
index c266fac36..b50a25252 100644
--- a/.claude/skills/cf-info/scripts/cf-info.ps1
+++ b/.claude/skills/cf-info/scripts/cf-info.ps1
@@ -1,4 +1,4 @@
-# cf-info v1.7 — Compact summary of 1C configuration root
+# cf-info v1.8 — Compact summary of 1C configuration root
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
diff --git a/.claude/skills/cf-info/scripts/cf-info.py b/.claude/skills/cf-info/scripts/cf-info.py
index 7fb6f6b53..1fa6a003e 100644
--- a/.claude/skills/cf-info/scripts/cf-info.py
+++ b/.claude/skills/cf-info/scripts/cf-info.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# cf-info v1.7 — Compact summary of 1C configuration root
+# cf-info v1.8 — Compact summary of 1C configuration root
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
diff --git a/.claude/skills/cf-validate/scripts/cf-validate.ps1 b/.claude/skills/cf-validate/scripts/cf-validate.ps1
index b9b37a79b..7ed1f5b5f 100644
--- a/.claude/skills/cf-validate/scripts/cf-validate.ps1
+++ b/.claude/skills/cf-validate/scripts/cf-validate.ps1
@@ -1,4 +1,4 @@
-# cf-validate v1.8 — Validate 1C configuration root structure
+# cf-validate v1.9 — Validate 1C configuration root structure
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
diff --git a/.claude/skills/cf-validate/scripts/cf-validate.py b/.claude/skills/cf-validate/scripts/cf-validate.py
index c4c48b463..893c4b947 100644
--- a/.claude/skills/cf-validate/scripts/cf-validate.py
+++ b/.claude/skills/cf-validate/scripts/cf-validate.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# cf-validate v1.8 — Validate 1C configuration XML structure
+# cf-validate v1.9 — Validate 1C configuration XML structure
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
"""Validates Configuration.xml: root structure, InternalInfo, properties, ChildObjects, languages."""
import sys, os, argparse, re
diff --git a/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 b/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1
index 30922d86f..6015255a2 100644
--- a/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1
+++ b/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1
@@ -1,4 +1,4 @@
-# cfe-borrow v1.34 — Borrow objects from configuration into extension (CFE)
+# cfe-borrow v1.35 — Borrow objects from configuration into extension (CFE)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
diff --git a/.claude/skills/cfe-borrow/scripts/cfe-borrow.py b/.claude/skills/cfe-borrow/scripts/cfe-borrow.py
index 775f7db2c..595357b25 100644
--- a/.claude/skills/cfe-borrow/scripts/cfe-borrow.py
+++ b/.claude/skills/cfe-borrow/scripts/cfe-borrow.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# cfe-borrow v1.34 — Borrow objects from configuration into extension (CFE)
+# cfe-borrow v1.35 — Borrow objects from configuration into extension (CFE)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
diff --git a/.claude/skills/cfe-diff/scripts/cfe-diff.ps1 b/.claude/skills/cfe-diff/scripts/cfe-diff.ps1
index 8c14313ab..7e0ee7996 100644
--- a/.claude/skills/cfe-diff/scripts/cfe-diff.ps1
+++ b/.claude/skills/cfe-diff/scripts/cfe-diff.ps1
@@ -1,4 +1,4 @@
-# cfe-diff v1.3 — Analyze and compare 1C configuration extension (CFE)
+# cfe-diff v1.4 — Analyze and compare 1C configuration extension (CFE)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
diff --git a/.claude/skills/cfe-diff/scripts/cfe-diff.py b/.claude/skills/cfe-diff/scripts/cfe-diff.py
index e284742e8..b583ba74e 100644
--- a/.claude/skills/cfe-diff/scripts/cfe-diff.py
+++ b/.claude/skills/cfe-diff/scripts/cfe-diff.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# cfe-diff v1.3 — Analyze and compare 1C configuration extension (CFE)
+# cfe-diff v1.4 — Analyze and compare 1C configuration extension (CFE)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
diff --git a/.claude/skills/cfe-validate/scripts/cfe-validate.ps1 b/.claude/skills/cfe-validate/scripts/cfe-validate.ps1
index 107eced3a..74a8420a1 100644
--- a/.claude/skills/cfe-validate/scripts/cfe-validate.ps1
+++ b/.claude/skills/cfe-validate/scripts/cfe-validate.ps1
@@ -1,4 +1,4 @@
-# cfe-validate v1.14 — Validate 1C configuration extension structure (CFE)
+# cfe-validate v1.15 — Validate 1C configuration extension structure (CFE)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
diff --git a/.claude/skills/cfe-validate/scripts/cfe-validate.py b/.claude/skills/cfe-validate/scripts/cfe-validate.py
index 600e98f13..836688b5c 100644
--- a/.claude/skills/cfe-validate/scripts/cfe-validate.py
+++ b/.claude/skills/cfe-validate/scripts/cfe-validate.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# cfe-validate v1.14 — Validate 1C configuration extension XML structure (CFE)
+# cfe-validate v1.15 — Validate 1C configuration extension XML structure (CFE)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
"""Validates extension Configuration.xml: root, InternalInfo, extension properties, ChildObjects, borrowed objects."""
import sys, os, argparse, re
diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1
index abf78cb76..1e930f668 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.100 — Compile 1C metadata object from JSON
+# meta-compile v1.101 — Compile 1C metadata object from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -5311,6 +5311,25 @@ function Compare-MetadataNames([string]$a, [string]$b) {
# Регистрация объекта в родительского XML. Общая реализация: эталон —
# meta-compile, копии — role-compile, xdto-compile. Реестр семьи: tests/skills/check-inline-drift.mjs.
# Возвращает исход: added | already | no-childobj | no-config.
+# Канонический порядок видов в — эталон в docs/1c-configuration-spec.md,
+# таблица «Порядок типов в ChildObjects». Нужен, чтобы новая группа вида вставала на своё
+# место: иначе платформа переставит её при первой же выгрузке и даст диф на ровном месте.
+# Реестр карт: tests/skills/check-type-maps.mjs.
+$childObjectTypes = @(
+ "Language","Subsystem","StyleItem","Style",
+ "CommonPicture","SessionParameter","Role","CommonTemplate",
+ "FilterCriterion","CommonModule","CommonAttribute","ExchangePlan",
+ "XDTOPackage","WebService","HTTPService","WSReference",
+ "EventSubscription","ScheduledJob","SettingsStorage","FunctionalOption",
+ "FunctionalOptionsParameter","DefinedType","Bot","PaletteColor","CommonCommand","CommandGroup",
+ "Constant","CommonForm","Catalog","Document",
+ "DocumentNumerator","Sequence","DocumentJournal","Enum",
+ "Report","DataProcessor","InformationRegister","AccumulationRegister",
+ "ChartOfCharacteristicTypes","ChartOfAccounts","AccountingRegister",
+ "ChartOfCalculationTypes","CalculationRegister",
+ "BusinessProcess","Task","IntegrationService"
+)
+
function Register-InChildObjects([string]$ParentXmlPath, [string]$ParentTag, [string]$ChildTag, [string]$ChildName) {
if (-not (Test-Path $ParentXmlPath)) { return "no-config" }
@@ -5372,10 +5391,28 @@ function Register-InChildObjects([string]$ParentXmlPath, [string]$ParentTag, [st
$insertAt = $lastSame + $closeSame.Length
$newContent = $configContent.Substring(0, $insertAt) + "$eol`t`t`t$entry" + $configContent.Substring($insertAt)
} else {
- # Объектов этого вида ещё нет: новая строка перед ,
- # отступ закрывающего тега переиспользуется
- $closeAt = $configContent.LastIndexOf("", $blockEnd - 1, $block.Length, [System.StringComparison]::Ordinal)
- $newContent = $configContent.Substring(0, $closeAt) + "`t$entry$eol`t`t" + $configContent.Substring($closeAt)
+ # Группы своего вида ещё нет: ставим её в канонический порядок видов — перед первой
+ # группой вида старше по $childObjectTypes. Дописать в конец блока нельзя: платформа
+ # переставит группу при первой же выгрузке и даст диф на ровном месте.
+ $ownIdx = $childObjectTypes.IndexOf($ChildTag)
+ $anchor = $null
+ if ($ownIdx -ge 0) {
+ $typeRx = [regex]"(?m)^([ \t]*)<(\w+)>[^<]*\2>"
+ $tm = $typeRx.Match($configContent, $block.Index, $block.Length)
+ while ($tm.Success) {
+ $otherIdx = $childObjectTypes.IndexOf($tm.Groups[2].Value)
+ if ($otherIdx -gt $ownIdx) { $anchor = $tm; break }
+ $tm = $tm.NextMatch()
+ }
+ }
+ if ($anchor) {
+ $newContent = $configContent.Substring(0, $anchor.Index) + $anchor.Groups[1].Value + $entry + $eol + $configContent.Substring($anchor.Index)
+ } else {
+ # Видов старше в файле нет — новая строка перед ,
+ # отступ закрывающего тега переиспользуется
+ $closeAt = $configContent.LastIndexOf("", $blockEnd - 1, $block.Length, [System.StringComparison]::Ordinal)
+ $newContent = $configContent.Substring(0, $closeAt) + "`t$entry$eol`t`t" + $configContent.Substring($closeAt)
+ }
}
[System.IO.File]::WriteAllText($ParentXmlPath, $newContent, $enc)
return "added"
diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py
index 8deec3073..21fb749dd 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.100 — Compile 1C metadata object from JSON
+# meta-compile v1.101 — Compile 1C metadata object from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
@@ -5285,6 +5285,26 @@ def compare_metadata_names(a, b):
return 0
+# Канонический порядок видов в — эталон в docs/1c-configuration-spec.md,
+# таблица «Порядок типов в ChildObjects». Нужен, чтобы новая группа вида вставала на своё
+# место: иначе платформа переставит её при первой же выгрузке и даст диф на ровном месте.
+# Реестр карт: tests/skills/check-type-maps.mjs.
+CHILD_OBJECT_TYPES = [
+ 'Language', 'Subsystem', 'StyleItem', 'Style',
+ 'CommonPicture', 'SessionParameter', 'Role', 'CommonTemplate',
+ 'FilterCriterion', 'CommonModule', 'CommonAttribute', 'ExchangePlan',
+ 'XDTOPackage', 'WebService', 'HTTPService', 'WSReference',
+ 'EventSubscription', 'ScheduledJob', 'SettingsStorage', 'FunctionalOption',
+ 'FunctionalOptionsParameter', 'DefinedType', 'Bot', 'PaletteColor', 'CommonCommand', 'CommandGroup',
+ 'Constant', 'CommonForm', 'Catalog', 'Document',
+ 'DocumentNumerator', 'Sequence', 'DocumentJournal', 'Enum',
+ 'Report', 'DataProcessor', 'InformationRegister', 'AccumulationRegister',
+ 'ChartOfCharacteristicTypes', 'ChartOfAccounts', 'AccountingRegister',
+ 'ChartOfCalculationTypes', 'CalculationRegister',
+ 'BusinessProcess', 'Task', 'IntegrationService',
+]
+
+
def register_in_childobjects(parent_xml_path, parent_tag, child_tag, child_name):
"""Регистрация объекта в родительского XML.
@@ -5361,12 +5381,29 @@ def register_in_childobjects(parent_xml_path, parent_tag, child_tag, child_name)
+ f'{eol}\t\t\t{entry}'
+ config_content[insert_at:])
else:
- # No element of this type yet: new line before ,
- # reusing the block's existing closing indent for .
- close_at = config_content.rfind('', block.start(), block.end())
- new_content = (config_content[:close_at]
- + f'\t{entry}{eol}\t\t'
- + config_content[close_at:])
+ # Группы своего вида ещё нет: ставим её в канонический порядок видов — перед первой
+ # группой вида старше по CHILD_OBJECT_TYPES. Дописать в конец блока нельзя: платформа
+ # переставит группу при первой же выгрузке и даст диф на ровном месте.
+ anchor = None
+ if child_tag in CHILD_OBJECT_TYPES:
+ own_idx = CHILD_OBJECT_TYPES.index(child_tag)
+ type_rx = re.compile(r'(?m)^([ \t]*)<(\w+)>[^<]*\2>')
+ for m in type_rx.finditer(config_content, block.start(), block.end()):
+ other = m.group(2)
+ if other in CHILD_OBJECT_TYPES and CHILD_OBJECT_TYPES.index(other) > own_idx:
+ anchor = m
+ break
+ if anchor is not None:
+ new_content = (config_content[:anchor.start()]
+ + f'{anchor.group(1)}{entry}{eol}'
+ + config_content[anchor.start():])
+ else:
+ # Видов старше в файле нет — новая строка перед ,
+ # отступ закрывающего тега переиспользуется.
+ close_at = config_content.rfind('', block.start(), block.end())
+ new_content = (config_content[:close_at]
+ + f'\t{entry}{eol}\t\t'
+ + config_content[close_at:])
write_utf8_bom(parent_xml_path, new_content)
return 'added'
diff --git a/.claude/skills/role-compile/scripts/role-compile.ps1 b/.claude/skills/role-compile/scripts/role-compile.ps1
index 6c914f55e..8ff0f1be9 100644
--- a/.claude/skills/role-compile/scripts/role-compile.ps1
+++ b/.claude/skills/role-compile/scripts/role-compile.ps1
@@ -1,4 +1,4 @@
-# role-compile v1.33 — Compile 1C role from JSON
+# role-compile v1.34 — Compile 1C role from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -1262,6 +1262,25 @@ function Compare-MetadataNames([string]$a, [string]$b) {
# Регистрация объекта в родительского XML. Общая реализация: эталон —
# meta-compile, копии — role-compile, xdto-compile. Реестр семьи: tests/skills/check-inline-drift.mjs.
# Возвращает исход: added | already | no-childobj | no-config.
+# Канонический порядок видов в — эталон в docs/1c-configuration-spec.md,
+# таблица «Порядок типов в ChildObjects». Нужен, чтобы новая группа вида вставала на своё
+# место: иначе платформа переставит её при первой же выгрузке и даст диф на ровном месте.
+# Реестр карт: tests/skills/check-type-maps.mjs.
+$childObjectTypes = @(
+ "Language","Subsystem","StyleItem","Style",
+ "CommonPicture","SessionParameter","Role","CommonTemplate",
+ "FilterCriterion","CommonModule","CommonAttribute","ExchangePlan",
+ "XDTOPackage","WebService","HTTPService","WSReference",
+ "EventSubscription","ScheduledJob","SettingsStorage","FunctionalOption",
+ "FunctionalOptionsParameter","DefinedType","Bot","PaletteColor","CommonCommand","CommandGroup",
+ "Constant","CommonForm","Catalog","Document",
+ "DocumentNumerator","Sequence","DocumentJournal","Enum",
+ "Report","DataProcessor","InformationRegister","AccumulationRegister",
+ "ChartOfCharacteristicTypes","ChartOfAccounts","AccountingRegister",
+ "ChartOfCalculationTypes","CalculationRegister",
+ "BusinessProcess","Task","IntegrationService"
+)
+
function Register-InChildObjects([string]$ParentXmlPath, [string]$ParentTag, [string]$ChildTag, [string]$ChildName) {
if (-not (Test-Path $ParentXmlPath)) { return "no-config" }
@@ -1323,10 +1342,28 @@ function Register-InChildObjects([string]$ParentXmlPath, [string]$ParentTag, [st
$insertAt = $lastSame + $closeSame.Length
$newContent = $configContent.Substring(0, $insertAt) + "$eol`t`t`t$entry" + $configContent.Substring($insertAt)
} else {
- # Объектов этого вида ещё нет: новая строка перед ,
- # отступ закрывающего тега переиспользуется
- $closeAt = $configContent.LastIndexOf("", $blockEnd - 1, $block.Length, [System.StringComparison]::Ordinal)
- $newContent = $configContent.Substring(0, $closeAt) + "`t$entry$eol`t`t" + $configContent.Substring($closeAt)
+ # Группы своего вида ещё нет: ставим её в канонический порядок видов — перед первой
+ # группой вида старше по $childObjectTypes. Дописать в конец блока нельзя: платформа
+ # переставит группу при первой же выгрузке и даст диф на ровном месте.
+ $ownIdx = $childObjectTypes.IndexOf($ChildTag)
+ $anchor = $null
+ if ($ownIdx -ge 0) {
+ $typeRx = [regex]"(?m)^([ \t]*)<(\w+)>[^<]*\2>"
+ $tm = $typeRx.Match($configContent, $block.Index, $block.Length)
+ while ($tm.Success) {
+ $otherIdx = $childObjectTypes.IndexOf($tm.Groups[2].Value)
+ if ($otherIdx -gt $ownIdx) { $anchor = $tm; break }
+ $tm = $tm.NextMatch()
+ }
+ }
+ if ($anchor) {
+ $newContent = $configContent.Substring(0, $anchor.Index) + $anchor.Groups[1].Value + $entry + $eol + $configContent.Substring($anchor.Index)
+ } else {
+ # Видов старше в файле нет — новая строка перед ,
+ # отступ закрывающего тега переиспользуется
+ $closeAt = $configContent.LastIndexOf("", $blockEnd - 1, $block.Length, [System.StringComparison]::Ordinal)
+ $newContent = $configContent.Substring(0, $closeAt) + "`t$entry$eol`t`t" + $configContent.Substring($closeAt)
+ }
}
[System.IO.File]::WriteAllText($ParentXmlPath, $newContent, $enc)
return "added"
diff --git a/.claude/skills/role-compile/scripts/role-compile.py b/.claude/skills/role-compile/scripts/role-compile.py
index 834c42f5c..6187d1c0c 100644
--- a/.claude/skills/role-compile/scripts/role-compile.py
+++ b/.claude/skills/role-compile/scripts/role-compile.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# role-compile v1.33 — Compile 1C role from JSON
+# role-compile v1.34 — Compile 1C role from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import json
@@ -1132,6 +1132,26 @@ def compare_metadata_names(a, b):
return 0
+# Канонический порядок видов в — эталон в docs/1c-configuration-spec.md,
+# таблица «Порядок типов в ChildObjects». Нужен, чтобы новая группа вида вставала на своё
+# место: иначе платформа переставит её при первой же выгрузке и даст диф на ровном месте.
+# Реестр карт: tests/skills/check-type-maps.mjs.
+CHILD_OBJECT_TYPES = [
+ 'Language', 'Subsystem', 'StyleItem', 'Style',
+ 'CommonPicture', 'SessionParameter', 'Role', 'CommonTemplate',
+ 'FilterCriterion', 'CommonModule', 'CommonAttribute', 'ExchangePlan',
+ 'XDTOPackage', 'WebService', 'HTTPService', 'WSReference',
+ 'EventSubscription', 'ScheduledJob', 'SettingsStorage', 'FunctionalOption',
+ 'FunctionalOptionsParameter', 'DefinedType', 'Bot', 'PaletteColor', 'CommonCommand', 'CommandGroup',
+ 'Constant', 'CommonForm', 'Catalog', 'Document',
+ 'DocumentNumerator', 'Sequence', 'DocumentJournal', 'Enum',
+ 'Report', 'DataProcessor', 'InformationRegister', 'AccumulationRegister',
+ 'ChartOfCharacteristicTypes', 'ChartOfAccounts', 'AccountingRegister',
+ 'ChartOfCalculationTypes', 'CalculationRegister',
+ 'BusinessProcess', 'Task', 'IntegrationService',
+]
+
+
def register_in_childobjects(parent_xml_path, parent_tag, child_tag, child_name):
"""Регистрация объекта в родительского XML.
@@ -1208,12 +1228,29 @@ def register_in_childobjects(parent_xml_path, parent_tag, child_tag, child_name)
+ f'{eol}\t\t\t{entry}'
+ config_content[insert_at:])
else:
- # No element of this type yet: new line before ,
- # reusing the block's existing closing indent for .
- close_at = config_content.rfind('', block.start(), block.end())
- new_content = (config_content[:close_at]
- + f'\t{entry}{eol}\t\t'
- + config_content[close_at:])
+ # Группы своего вида ещё нет: ставим её в канонический порядок видов — перед первой
+ # группой вида старше по CHILD_OBJECT_TYPES. Дописать в конец блока нельзя: платформа
+ # переставит группу при первой же выгрузке и даст диф на ровном месте.
+ anchor = None
+ if child_tag in CHILD_OBJECT_TYPES:
+ own_idx = CHILD_OBJECT_TYPES.index(child_tag)
+ type_rx = re.compile(r'(?m)^([ \t]*)<(\w+)>[^<]*\2>')
+ for m in type_rx.finditer(config_content, block.start(), block.end()):
+ other = m.group(2)
+ if other in CHILD_OBJECT_TYPES and CHILD_OBJECT_TYPES.index(other) > own_idx:
+ anchor = m
+ break
+ if anchor is not None:
+ new_content = (config_content[:anchor.start()]
+ + f'{anchor.group(1)}{entry}{eol}'
+ + config_content[anchor.start():])
+ else:
+ # Видов старше в файле нет — новая строка перед ,
+ # отступ закрывающего тега переиспользуется.
+ close_at = config_content.rfind('', block.start(), block.end())
+ new_content = (config_content[:close_at]
+ + f'\t{entry}{eol}\t\t'
+ + config_content[close_at:])
write_utf8_bom(parent_xml_path, new_content)
return 'added'
diff --git a/.claude/skills/subsystem-compile/scripts/subsystem-compile.ps1 b/.claude/skills/subsystem-compile/scripts/subsystem-compile.ps1
index 3c33caa20..fb2179db8 100644
--- a/.claude/skills/subsystem-compile/scripts/subsystem-compile.ps1
+++ b/.claude/skills/subsystem-compile/scripts/subsystem-compile.ps1
@@ -1,4 +1,4 @@
-# subsystem-compile v1.31 — Create 1C subsystem from JSON definition
+# subsystem-compile v1.32 — Create 1C subsystem from JSON definition
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -677,6 +677,25 @@ if ($children.Count -gt 0) {
# внутри подсистемы нечего — потомок там всегда один и тот же.
# Реестр семьи: tests/skills/check-inline-drift.mjs.
# Возвращает исход: added | already | no-childobj | no-config.
+# Канонический порядок видов в — эталон в docs/1c-configuration-spec.md,
+# таблица «Порядок типов в ChildObjects». Нужен, чтобы новая группа вида вставала на своё
+# место: иначе платформа переставит её при первой же выгрузке и даст диф на ровном месте.
+# Реестр карт: tests/skills/check-type-maps.mjs.
+$childObjectTypes = @(
+ "Language","Subsystem","StyleItem","Style",
+ "CommonPicture","SessionParameter","Role","CommonTemplate",
+ "FilterCriterion","CommonModule","CommonAttribute","ExchangePlan",
+ "XDTOPackage","WebService","HTTPService","WSReference",
+ "EventSubscription","ScheduledJob","SettingsStorage","FunctionalOption",
+ "FunctionalOptionsParameter","DefinedType","Bot","PaletteColor","CommonCommand","CommandGroup",
+ "Constant","CommonForm","Catalog","Document",
+ "DocumentNumerator","Sequence","DocumentJournal","Enum",
+ "Report","DataProcessor","InformationRegister","AccumulationRegister",
+ "ChartOfCharacteristicTypes","ChartOfAccounts","AccountingRegister",
+ "ChartOfCalculationTypes","CalculationRegister",
+ "BusinessProcess","Task","IntegrationService"
+)
+
function Register-InChildObjects([string]$ParentXmlPath, [string]$ParentTag, [string]$ChildTag, [string]$ChildName) {
if (-not (Test-Path $ParentXmlPath)) { return "no-config" }
@@ -708,11 +727,33 @@ function Register-InChildObjects([string]$ParentXmlPath, [string]$ParentTag, [st
$replacement = "$eol`t`t`t$entry$eol`t`t"
$rawText = $rawText.Substring(0, $empty.Index) + $replacement + $rawText.Substring($empty.Index + $empty.Length)
} else {
- # Отступ вставки берём у закрывающего тега +1 уровень: подстановка по голому
- # '' удваивала бы уже присутствующий отступ строки.
- $cm = [regex]::Match($rawText, '([ ]*)')
- if (-not $cm.Success) { return "no-childobj" }
- $rawText = $rawText.Substring(0, $cm.Index) + $cm.Groups[1].Value + "`t" + $entry + $eol + $cm.Groups[1].Value + "" + $rawText.Substring($cm.Index + $cm.Length)
+ # В корне подсистема встаёт перед первой группой вида старше по $childObjectTypes:
+ # так она попадает и в канонический порядок видов, и в конец своей группы, если та уже
+ # есть. Дописать в конец блока нельзя вдвойне: платформа переставит новую группу при
+ # первой же выгрузке, а существующую подсистема покинула бы, уехав за виды ниже.
+ # Во вложенном Subsystem.xml порядок видов неприменим — потомок там всегда один.
+ $anchor = $null
+ if ($ParentTag -eq "Configuration") {
+ $ownIdx = $childObjectTypes.IndexOf($ChildTag)
+ if ($ownIdx -ge 0) {
+ $typeRx = [regex]"(?m)^([ \t]*)<(\w+)>[^<]*\2>"
+ $tm = $typeRx.Match($rawText)
+ while ($tm.Success) {
+ $otherIdx = $childObjectTypes.IndexOf($tm.Groups[2].Value)
+ if ($otherIdx -gt $ownIdx) { $anchor = $tm; break }
+ $tm = $tm.NextMatch()
+ }
+ }
+ }
+ if ($anchor) {
+ $rawText = $rawText.Substring(0, $anchor.Index) + $anchor.Groups[1].Value + $entry + $eol + $rawText.Substring($anchor.Index)
+ } else {
+ # Отступ вставки берём у закрывающего тега +1 уровень: подстановка по голому
+ # '' удваивала бы уже присутствующий отступ строки.
+ $cm = [regex]::Match($rawText, '([ ]*)')
+ if (-not $cm.Success) { return "no-childobj" }
+ $rawText = $rawText.Substring(0, $cm.Index) + $cm.Groups[1].Value + "`t" + $entry + $eol + $cm.Groups[1].Value + "" + $rawText.Substring($cm.Index + $cm.Length)
+ }
}
[System.IO.File]::WriteAllText($ParentXmlPath, $rawText, (New-Object System.Text.UTF8Encoding($true)))
diff --git a/.claude/skills/subsystem-compile/scripts/subsystem-compile.py b/.claude/skills/subsystem-compile/scripts/subsystem-compile.py
index 7690fa80f..2c89863e8 100644
--- a/.claude/skills/subsystem-compile/scripts/subsystem-compile.py
+++ b/.claude/skills/subsystem-compile/scripts/subsystem-compile.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# subsystem-compile v1.31 — Create 1C subsystem from JSON definition
+# subsystem-compile v1.32 — Create 1C subsystem from JSON definition
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import json
@@ -450,6 +450,26 @@ def write_child_subsystem_stub(child_path, child_name, format_version):
write_utf8_bom(child_path, '\r\n'.join(lines))
+# Канонический порядок видов в — эталон в docs/1c-configuration-spec.md,
+# таблица «Порядок типов в ChildObjects». Нужен, чтобы новая группа вида вставала на своё
+# место: иначе платформа переставит её при первой же выгрузке и даст диф на ровном месте.
+# Реестр карт: tests/skills/check-type-maps.mjs.
+CHILD_OBJECT_TYPES = [
+ 'Language', 'Subsystem', 'StyleItem', 'Style',
+ 'CommonPicture', 'SessionParameter', 'Role', 'CommonTemplate',
+ 'FilterCriterion', 'CommonModule', 'CommonAttribute', 'ExchangePlan',
+ 'XDTOPackage', 'WebService', 'HTTPService', 'WSReference',
+ 'EventSubscription', 'ScheduledJob', 'SettingsStorage', 'FunctionalOption',
+ 'FunctionalOptionsParameter', 'DefinedType', 'Bot', 'PaletteColor', 'CommonCommand', 'CommandGroup',
+ 'Constant', 'CommonForm', 'Catalog', 'Document',
+ 'DocumentNumerator', 'Sequence', 'DocumentJournal', 'Enum',
+ 'Report', 'DataProcessor', 'InformationRegister', 'AccumulationRegister',
+ 'ChartOfCharacteristicTypes', 'ChartOfAccounts', 'AccountingRegister',
+ 'ChartOfCalculationTypes', 'CalculationRegister',
+ 'BusinessProcess', 'Task', 'IntegrationService',
+]
+
+
def register_in_childobjects(parent_xml_path, parent_tag, child_tag, child_name):
"""Регистрация объекта в родительского XML.
@@ -494,14 +514,32 @@ def register_in_childobjects(parent_xml_path, parent_tag, child_tag, child_name)
replacement = '' + eol + f'\t\t\t{entry}' + eol + '\t\t'
raw_text = raw_text[:empty.start()] + replacement + raw_text[empty.end():]
else:
- # Отступ вставки берём у закрывающего тега +1 уровень: подстановка
- # по голому '' удваивала бы уже присутствующий отступ
- # строки (получалось 5 табов вместо 3 — PS-порт через DOM даёт 3).
- cm = re.search(r'([ \t]*)', raw_text)
- if cm is None:
- return 'no-childobj'
- raw_text = (raw_text[:cm.start()] + cm.group(1) + '\t' + entry + eol
- + cm.group(1) + '' + raw_text[cm.end():])
+ # В корне подсистема встаёт перед первой группой вида старше по CHILD_OBJECT_TYPES:
+ # так она попадает и в канонический порядок видов, и в конец своей группы, если та уже
+ # есть. Дописать в конец блока нельзя вдвойне: платформа переставит новую группу при
+ # первой же выгрузке, а существующую подсистема покинула бы, уехав за виды ниже.
+ # Во вложенном Subsystem.xml порядок видов неприменим — потомок там всегда один.
+ anchor = None
+ if parent_tag == 'Configuration' and child_tag in CHILD_OBJECT_TYPES:
+ own_idx = CHILD_OBJECT_TYPES.index(child_tag)
+ type_rx = re.compile(r'(?m)^([ \t]*)<(\w+)>[^<]*\2>')
+ for m in type_rx.finditer(raw_text):
+ other = m.group(2)
+ if other in CHILD_OBJECT_TYPES and CHILD_OBJECT_TYPES.index(other) > own_idx:
+ anchor = m
+ break
+ if anchor is not None:
+ raw_text = (raw_text[:anchor.start()] + anchor.group(1) + entry + eol
+ + raw_text[anchor.start():])
+ else:
+ # Отступ вставки берём у закрывающего тега +1 уровень: подстановка
+ # по голому '' удваивала бы уже присутствующий отступ
+ # строки (получалось 5 табов вместо 3 — PS-порт через DOM даёт 3).
+ cm = re.search(r'([ \t]*)', raw_text)
+ if cm is None:
+ return 'no-childobj'
+ raw_text = (raw_text[:cm.start()] + cm.group(1) + '\t' + entry + eol
+ + cm.group(1) + '' + raw_text[cm.end():])
write_utf8_bom(parent_xml_path, raw_text)
return 'added'
diff --git a/.claude/skills/xdto-compile/scripts/xdto-compile.ps1 b/.claude/skills/xdto-compile/scripts/xdto-compile.ps1
index 8fc386a19..8346bf8b2 100644
--- a/.claude/skills/xdto-compile/scripts/xdto-compile.ps1
+++ b/.claude/skills/xdto-compile/scripts/xdto-compile.ps1
@@ -1,4 +1,4 @@
-# xdto-compile v1.13 — Build a 1C XDTO package from an XML Schema (XSD) (+support-guard: общая реализация вместо урезанной)
+# xdto-compile v1.14 — Build a 1C XDTO package from an XML Schema (XSD) (+support-guard: общая реализация вместо урезанной)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -1070,6 +1070,25 @@ function Compare-MetadataNames([string]$a, [string]$b) {
# Регистрация объекта в родительского XML. Общая реализация: эталон —
# meta-compile, копии — role-compile, xdto-compile. Реестр семьи: tests/skills/check-inline-drift.mjs.
# Возвращает исход: added | already | no-childobj | no-config.
+# Канонический порядок видов в — эталон в docs/1c-configuration-spec.md,
+# таблица «Порядок типов в ChildObjects». Нужен, чтобы новая группа вида вставала на своё
+# место: иначе платформа переставит её при первой же выгрузке и даст диф на ровном месте.
+# Реестр карт: tests/skills/check-type-maps.mjs.
+$childObjectTypes = @(
+ "Language","Subsystem","StyleItem","Style",
+ "CommonPicture","SessionParameter","Role","CommonTemplate",
+ "FilterCriterion","CommonModule","CommonAttribute","ExchangePlan",
+ "XDTOPackage","WebService","HTTPService","WSReference",
+ "EventSubscription","ScheduledJob","SettingsStorage","FunctionalOption",
+ "FunctionalOptionsParameter","DefinedType","Bot","PaletteColor","CommonCommand","CommandGroup",
+ "Constant","CommonForm","Catalog","Document",
+ "DocumentNumerator","Sequence","DocumentJournal","Enum",
+ "Report","DataProcessor","InformationRegister","AccumulationRegister",
+ "ChartOfCharacteristicTypes","ChartOfAccounts","AccountingRegister",
+ "ChartOfCalculationTypes","CalculationRegister",
+ "BusinessProcess","Task","IntegrationService"
+)
+
function Register-InChildObjects([string]$ParentXmlPath, [string]$ParentTag, [string]$ChildTag, [string]$ChildName) {
if (-not (Test-Path $ParentXmlPath)) { return "no-config" }
@@ -1131,10 +1150,28 @@ function Register-InChildObjects([string]$ParentXmlPath, [string]$ParentTag, [st
$insertAt = $lastSame + $closeSame.Length
$newContent = $configContent.Substring(0, $insertAt) + "$eol`t`t`t$entry" + $configContent.Substring($insertAt)
} else {
- # Объектов этого вида ещё нет: новая строка перед ,
- # отступ закрывающего тега переиспользуется
- $closeAt = $configContent.LastIndexOf("", $blockEnd - 1, $block.Length, [System.StringComparison]::Ordinal)
- $newContent = $configContent.Substring(0, $closeAt) + "`t$entry$eol`t`t" + $configContent.Substring($closeAt)
+ # Группы своего вида ещё нет: ставим её в канонический порядок видов — перед первой
+ # группой вида старше по $childObjectTypes. Дописать в конец блока нельзя: платформа
+ # переставит группу при первой же выгрузке и даст диф на ровном месте.
+ $ownIdx = $childObjectTypes.IndexOf($ChildTag)
+ $anchor = $null
+ if ($ownIdx -ge 0) {
+ $typeRx = [regex]"(?m)^([ \t]*)<(\w+)>[^<]*\2>"
+ $tm = $typeRx.Match($configContent, $block.Index, $block.Length)
+ while ($tm.Success) {
+ $otherIdx = $childObjectTypes.IndexOf($tm.Groups[2].Value)
+ if ($otherIdx -gt $ownIdx) { $anchor = $tm; break }
+ $tm = $tm.NextMatch()
+ }
+ }
+ if ($anchor) {
+ $newContent = $configContent.Substring(0, $anchor.Index) + $anchor.Groups[1].Value + $entry + $eol + $configContent.Substring($anchor.Index)
+ } else {
+ # Видов старше в файле нет — новая строка перед ,
+ # отступ закрывающего тега переиспользуется
+ $closeAt = $configContent.LastIndexOf("", $blockEnd - 1, $block.Length, [System.StringComparison]::Ordinal)
+ $newContent = $configContent.Substring(0, $closeAt) + "`t$entry$eol`t`t" + $configContent.Substring($closeAt)
+ }
}
[System.IO.File]::WriteAllText($ParentXmlPath, $newContent, $enc)
return "added"
diff --git a/.claude/skills/xdto-compile/scripts/xdto-compile.py b/.claude/skills/xdto-compile/scripts/xdto-compile.py
index 1725c0c19..d0789a15b 100644
--- a/.claude/skills/xdto-compile/scripts/xdto-compile.py
+++ b/.claude/skills/xdto-compile/scripts/xdto-compile.py
@@ -1,4 +1,4 @@
-# xdto-compile v1.13 — Build a 1C XDTO package from an XML Schema (XSD) (Python port) (+support-guard: общая реализация вместо урезанной)
+# xdto-compile v1.14 — Build a 1C XDTO package from an XML Schema (XSD) (Python port) (+support-guard: общая реализация вместо урезанной)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import json
@@ -1182,6 +1182,26 @@ def compare_metadata_names(a, b):
return 0
+# Канонический порядок видов в — эталон в docs/1c-configuration-spec.md,
+# таблица «Порядок типов в ChildObjects». Нужен, чтобы новая группа вида вставала на своё
+# место: иначе платформа переставит её при первой же выгрузке и даст диф на ровном месте.
+# Реестр карт: tests/skills/check-type-maps.mjs.
+CHILD_OBJECT_TYPES = [
+ 'Language', 'Subsystem', 'StyleItem', 'Style',
+ 'CommonPicture', 'SessionParameter', 'Role', 'CommonTemplate',
+ 'FilterCriterion', 'CommonModule', 'CommonAttribute', 'ExchangePlan',
+ 'XDTOPackage', 'WebService', 'HTTPService', 'WSReference',
+ 'EventSubscription', 'ScheduledJob', 'SettingsStorage', 'FunctionalOption',
+ 'FunctionalOptionsParameter', 'DefinedType', 'Bot', 'PaletteColor', 'CommonCommand', 'CommandGroup',
+ 'Constant', 'CommonForm', 'Catalog', 'Document',
+ 'DocumentNumerator', 'Sequence', 'DocumentJournal', 'Enum',
+ 'Report', 'DataProcessor', 'InformationRegister', 'AccumulationRegister',
+ 'ChartOfCharacteristicTypes', 'ChartOfAccounts', 'AccountingRegister',
+ 'ChartOfCalculationTypes', 'CalculationRegister',
+ 'BusinessProcess', 'Task', 'IntegrationService',
+]
+
+
def register_in_childobjects(parent_xml_path, parent_tag, child_tag, child_name):
"""Регистрация объекта в родительского XML.
@@ -1258,12 +1278,29 @@ def register_in_childobjects(parent_xml_path, parent_tag, child_tag, child_name)
+ f'{eol}\t\t\t{entry}'
+ config_content[insert_at:])
else:
- # No element of this type yet: new line before ,
- # reusing the block's existing closing indent for .
- close_at = config_content.rfind('', block.start(), block.end())
- new_content = (config_content[:close_at]
- + f'\t{entry}{eol}\t\t'
- + config_content[close_at:])
+ # Группы своего вида ещё нет: ставим её в канонический порядок видов — перед первой
+ # группой вида старше по CHILD_OBJECT_TYPES. Дописать в конец блока нельзя: платформа
+ # переставит группу при первой же выгрузке и даст диф на ровном месте.
+ anchor = None
+ if child_tag in CHILD_OBJECT_TYPES:
+ own_idx = CHILD_OBJECT_TYPES.index(child_tag)
+ type_rx = re.compile(r'(?m)^([ \t]*)<(\w+)>[^<]*\2>')
+ for m in type_rx.finditer(config_content, block.start(), block.end()):
+ other = m.group(2)
+ if other in CHILD_OBJECT_TYPES and CHILD_OBJECT_TYPES.index(other) > own_idx:
+ anchor = m
+ break
+ if anchor is not None:
+ new_content = (config_content[:anchor.start()]
+ + f'{anchor.group(1)}{entry}{eol}'
+ + config_content[anchor.start():])
+ else:
+ # Видов старше в файле нет — новая строка перед ,
+ # отступ закрывающего тега переиспользуется.
+ close_at = config_content.rfind('', block.start(), block.end())
+ new_content = (config_content[:close_at]
+ + f'\t{entry}{eol}\t\t'
+ + config_content[close_at:])
write_utf8_bom(parent_xml_path, new_content)
return 'added'
diff --git a/tests/skills/cases/cf-edit/snapshots/set-home-page/Configuration.xml b/tests/skills/cases/cf-edit/snapshots/set-home-page/Configuration.xml
index 86eab5e43..ba7fd847a 100644
--- a/tests/skills/cases/cf-edit/snapshots/set-home-page/Configuration.xml
+++ b/tests/skills/cases/cf-edit/snapshots/set-home-page/Configuration.xml
@@ -246,11 +246,11 @@
Русский
+ Оператор
+ ПолныеПрава
Товары
Контрагенты
Поиск
- Оператор
- ПолныеПрава
\ No newline at end of file
diff --git a/tests/skills/cases/cfe-borrow/snapshots/container-types/Configuration.xml b/tests/skills/cases/cfe-borrow/snapshots/container-types/Configuration.xml
index 8fcd08222..22df4c39a 100644
--- a/tests/skills/cases/cfe-borrow/snapshots/container-types/Configuration.xml
+++ b/tests/skills/cases/cfe-borrow/snapshots/container-types/Configuration.xml
@@ -246,14 +246,14 @@
Русский
- Накладная
- ОстаткиТоваров
- Складские
- ПартионныйУчет
- ОбменДанными
- СервисОбмена
ПоКонтрагенту
+ СервисОбмена
+ ОбменДанными
ХранилищеОтчетов
+ Накладная
+ ПартионныйУчет
+ Складские
+ ОстаткиТоваров
\ No newline at end of file
diff --git a/tests/skills/cases/cfe-borrow/snapshots/gentypes-full/Configuration.xml b/tests/skills/cases/cfe-borrow/snapshots/gentypes-full/Configuration.xml
index 19472a80d..201926b42 100644
--- a/tests/skills/cases/cfe-borrow/snapshots/gentypes-full/Configuration.xml
+++ b/tests/skills/cases/cfe-borrow/snapshots/gentypes-full/Configuration.xml
@@ -246,14 +246,14 @@
Русский
+ Операция
ВидыСубконто
Хозрасчетный
- ОсновныеНачисления
Хозрасчетный
+ ОсновныеНачисления
Начисления
- ЗадачаИсполнителя
Согласование
- Операция
+ ЗадачаИсполнителя
\ No newline at end of file
diff --git a/tests/skills/cases/cfe-diff/snapshots/own-service-objects/cfe/Configuration.xml b/tests/skills/cases/cfe-diff/snapshots/own-service-objects/cfe/Configuration.xml
index 1a6c96290..0eb93d1c5 100644
--- a/tests/skills/cases/cfe-diff/snapshots/own-service-objects/cfe/Configuration.xml
+++ b/tests/skills/cases/cfe-diff/snapshots/own-service-objects/cfe/Configuration.xml
@@ -66,8 +66,8 @@
Русский
Сервисы_ОсновнаяРоль
- Сервисы_API
Сервисы_Пакет
+ Сервисы_API
\ No newline at end of file
diff --git a/tests/skills/cases/form-add/snapshots/accumulation-register-recordset-form/Configuration.xml b/tests/skills/cases/form-add/snapshots/accumulation-register-recordset-form/Configuration.xml
index 72bc2f521..884bcb86b 100644
--- a/tests/skills/cases/form-add/snapshots/accumulation-register-recordset-form/Configuration.xml
+++ b/tests/skills/cases/form-add/snapshots/accumulation-register-recordset-form/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- ОстаткиТест
ПриходТест
+ ОстаткиТест
\ No newline at end of file
diff --git a/tests/skills/cases/interface-edit/snapshots/basic/Configuration.xml b/tests/skills/cases/interface-edit/snapshots/basic/Configuration.xml
index 250d41aa3..398056fd2 100644
--- a/tests/skills/cases/interface-edit/snapshots/basic/Configuration.xml
+++ b/tests/skills/cases/interface-edit/snapshots/basic/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Товары
Склад
+ Товары
\ No newline at end of file
diff --git a/tests/skills/cases/interface-edit/snapshots/hide-command/Configuration.xml b/tests/skills/cases/interface-edit/snapshots/hide-command/Configuration.xml
index 250d41aa3..398056fd2 100644
--- a/tests/skills/cases/interface-edit/snapshots/hide-command/Configuration.xml
+++ b/tests/skills/cases/interface-edit/snapshots/hide-command/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Товары
Склад
+ Товары
\ No newline at end of file
diff --git a/tests/skills/cases/interface-edit/snapshots/show-command/Configuration.xml b/tests/skills/cases/interface-edit/snapshots/show-command/Configuration.xml
index 250d41aa3..398056fd2 100644
--- a/tests/skills/cases/interface-edit/snapshots/show-command/Configuration.xml
+++ b/tests/skills/cases/interface-edit/snapshots/show-command/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Товары
Склад
+ Товары
\ No newline at end of file
diff --git a/tests/skills/cases/interface-validate/snapshots/valid/Configuration.xml b/tests/skills/cases/interface-validate/snapshots/valid/Configuration.xml
index 250d41aa3..398056fd2 100644
--- a/tests/skills/cases/interface-validate/snapshots/valid/Configuration.xml
+++ b/tests/skills/cases/interface-validate/snapshots/valid/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Товары
Склад
+ Товары
\ No newline at end of file
diff --git a/tests/skills/cases/interface-validate/snapshots/with-placement/Configuration.xml b/tests/skills/cases/interface-validate/snapshots/with-placement/Configuration.xml
index 43e1fc07a..e282e4a8f 100644
--- a/tests/skills/cases/interface-validate/snapshots/with-placement/Configuration.xml
+++ b/tests/skills/cases/interface-validate/snapshots/with-placement/Configuration.xml
@@ -246,9 +246,9 @@
Русский
+ Склад
Товары
Заказ
- Склад
\ No newline at end of file
diff --git a/tests/skills/cases/meta-compile/canonical-type-group.json b/tests/skills/cases/meta-compile/canonical-type-group.json
new file mode 100644
index 000000000..321f91ee9
--- /dev/null
+++ b/tests/skills/cases/meta-compile/canonical-type-group.json
@@ -0,0 +1,14 @@
+{
+ "name": "Первый объект нового вида встаёт в канонический порядок видов, а не в конец блока",
+ "setup": "fixture:newobjectposition",
+ "cwd": "workDir",
+ "input": { "type": "CommonModule", "name": "МойМодуль" },
+ "validatePath": "CommonModules/МойМодуль",
+ "expect": {
+ "fileContains": {
+ "file": "Configuration.xml",
+ "text": "Русский\r\n\t\t\tМойМодуль\r\n\t\t\tАльфа"
+ },
+ "preserves": { "file": "Configuration.xml", "bom": true, "eol": "crlf", "encoding": "UTF-8", "finalNewline": false, "noCR13": true }
+ }
+}
diff --git a/tests/skills/cases/meta-compile/snapshots/batch/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/batch/Configuration.xml
index b8c3dce3b..1361da1d4 100644
--- a/tests/skills/cases/meta-compile/snapshots/batch/Configuration.xml
+++ b/tests/skills/cases/meta-compile/snapshots/batch/Configuration.xml
@@ -246,9 +246,9 @@
Русский
- Статусы
- Валюты
ОсновнаяВалюта
+ Валюты
+ Статусы
\ No newline at end of file
diff --git a/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Catalogs/Альфа.xml b/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Catalogs/Альфа.xml
new file mode 100644
index 000000000..ba2d5fde3
--- /dev/null
+++ b/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Catalogs/Альфа.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+
+ Альфа
+
+
+ ru
+ Альфа
+
+
+
+ false
+ HierarchyFoldersAndItems
+ false
+ 2
+ true
+ true
+
+ ToItems
+ 9
+ 25
+ String
+ Variable
+ WholeCatalog
+ false
+ true
+ AsDescription
+
+ Auto
+ InDialog
+ false
+ BothWays
+
+ Catalog.Альфа.StandardAttribute.Description
+ Catalog.Альфа.StandardAttribute.Code
+
+ Begin
+ DontUse
+ Directly
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+ Managed
+ Use
+
+
+
+
+
+ Use
+ Auto
+ DontUse
+ false
+ false
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Catalogs/Альфа/Ext/ObjectModule.bsl
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Catalogs/Гамма.xml b/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Catalogs/Гамма.xml
new file mode 100644
index 000000000..7279f86fd
--- /dev/null
+++ b/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Catalogs/Гамма.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+
+ Гамма
+
+
+ ru
+ Гамма
+
+
+
+ false
+ HierarchyFoldersAndItems
+ false
+ 2
+ true
+ true
+
+ ToItems
+ 9
+ 25
+ String
+ Variable
+ WholeCatalog
+ false
+ true
+ AsDescription
+
+ Auto
+ InDialog
+ false
+ BothWays
+
+ Catalog.Гамма.StandardAttribute.Description
+ Catalog.Гамма.StandardAttribute.Code
+
+ Begin
+ DontUse
+ Directly
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+ Managed
+ Use
+
+
+
+
+
+ Use
+ Auto
+ DontUse
+ false
+ false
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Catalogs/Гамма/Ext/ObjectModule.bsl
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/skills/cases/meta-compile/snapshots/canonical-type-group/CommonModules/МойМодуль.xml b/tests/skills/cases/meta-compile/snapshots/canonical-type-group/CommonModules/МойМодуль.xml
new file mode 100644
index 000000000..5de8f9d25
--- /dev/null
+++ b/tests/skills/cases/meta-compile/snapshots/canonical-type-group/CommonModules/МойМодуль.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ МойМодуль
+
+
+ ru
+ Мой модуль
+
+
+
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ DontUse
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-compile/snapshots/canonical-type-group/CommonModules/МойМодуль/Ext/Module.bsl b/tests/skills/cases/meta-compile/snapshots/canonical-type-group/CommonModules/МойМодуль/Ext/Module.bsl
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Configuration.xml
new file mode 100644
index 000000000..b940f3675
--- /dev/null
+++ b/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Configuration.xml
@@ -0,0 +1,254 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+ UUID-012
+ UUID-013
+
+
+ UUID-014
+ UUID-015
+
+
+
+ TestConfig
+
+
+ ru
+ TestConfig
+
+
+
+
+ Version8_3_24
+ ManagedApplication
+
+ PlatformApplication
+
+ Russian
+
+
+
+
+ false
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Biometrics
+ true
+
+
+ Location
+ false
+
+
+ BackgroundLocation
+ false
+
+
+ BluetoothPrinters
+ false
+
+
+ WiFiPrinters
+ false
+
+
+ Contacts
+ false
+
+
+ Calendars
+ false
+
+
+ PushNotifications
+ false
+
+
+ LocalNotifications
+ false
+
+
+ InAppPurchases
+ false
+
+
+ PersonalComputerFileExchange
+ false
+
+
+ Ads
+ false
+
+
+ NumberDialing
+ false
+
+
+ CallProcessing
+ false
+
+
+ CallLog
+ false
+
+
+ AutoSendSMS
+ false
+
+
+ ReceiveSMS
+ false
+
+
+ SMSLog
+ false
+
+
+ Camera
+ false
+
+
+ Microphone
+ false
+
+
+ MusicLibrary
+ false
+
+
+ PictureAndVideoLibraries
+ false
+
+
+ AudioPlaybackAndVibration
+ false
+
+
+ BackgroundAudioPlaybackAndVibration
+ false
+
+
+ InstallPackages
+ false
+
+
+ OSBackup
+ true
+
+
+ ApplicationUsageStatistics
+ false
+
+
+ BarcodeScanning
+ false
+
+
+ BackgroundAudioRecording
+ false
+
+
+ AllFilesAccess
+ false
+
+
+ Videoconferences
+ false
+
+
+ NFC
+ false
+
+
+ DocumentScanning
+ false
+
+
+ SpeechToText
+ false
+
+
+ Geofences
+ false
+
+
+ IncomingShareRequests
+ false
+
+
+ AllIncomingShareRequestsTypesProcessing
+ false
+
+
+
+
+
+ Normal
+
+
+ Language.Русский
+
+
+
+
+
+ Managed
+ NotAutoFree
+ DontUse
+ DontUse
+ TaxiEnableVersion8_2
+ DontUse
+ Version8_3_24
+
+
+
+ Русский
+ МойМодуль
+ Альфа
+ Гамма
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Ext/ClientApplicationInterface.xml
new file mode 100644
index 000000000..3c1161b2d
--- /dev/null
+++ b/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ UUID-002
+
+
+
+
+ UUID-004
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Languages/Русский.xml
new file mode 100644
index 000000000..37c60d786
--- /dev/null
+++ b/tests/skills/cases/meta-compile/snapshots/canonical-type-group/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Configuration.xml
index 09bf62333..5147edd60 100644
--- a/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Configuration.xml
+++ b/tests/skills/cases/meta-compile/snapshots/catalog-characteristics/Configuration.xml
@@ -246,10 +246,10 @@
Русский
- ВидыСвойств
НаборыДопРеквИСвед
Организации
ДополнительныеСведения
+ ВидыСвойств
\ No newline at end of file
diff --git a/tests/skills/cases/meta-compile/snapshots/format-220-props/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/format-220-props/Configuration.xml
index b187ac05a..6250dc53f 100644
--- a/tests/skills/cases/meta-compile/snapshots/format-220-props/Configuration.xml
+++ b/tests/skills/cases/meta-compile/snapshots/format-220-props/Configuration.xml
@@ -252,8 +252,8 @@
Русский
Валюты
Договоры
- КурсыВалют
ЗагрузкаКурсов
+ КурсыВалют
\ No newline at end of file
diff --git a/tests/skills/cases/meta-compile/snapshots/format-221-pal/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/format-221-pal/Configuration.xml
index 807ab6926..4fc84024b 100644
--- a/tests/skills/cases/meta-compile/snapshots/format-221-pal/Configuration.xml
+++ b/tests/skills/cases/meta-compile/snapshots/format-221-pal/Configuration.xml
@@ -264,8 +264,8 @@
Русский
- ВидыЦен
Товары
+ ВидыЦен
\ No newline at end of file
diff --git a/tests/skills/cases/meta-validate/snapshots/valid-constant/Configuration.xml b/tests/skills/cases/meta-validate/snapshots/valid-constant/Configuration.xml
index f86cb9bf7..d28e93782 100644
--- a/tests/skills/cases/meta-validate/snapshots/valid-constant/Configuration.xml
+++ b/tests/skills/cases/meta-validate/snapshots/valid-constant/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Валюты
ОсновнаяВалюта
+ Валюты
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/basic-role/Configuration.xml b/tests/skills/cases/role-compile/snapshots/basic-role/Configuration.xml
index 312ce0da7..e4992d10e 100644
--- a/tests/skills/cases/role-compile/snapshots/basic-role/Configuration.xml
+++ b/tests/skills/cases/role-compile/snapshots/basic-role/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Товары
Кладовщик
+ Товары
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/edit-preset/Configuration.xml b/tests/skills/cases/role-compile/snapshots/edit-preset/Configuration.xml
index 16eee0e96..4fc138bed 100644
--- a/tests/skills/cases/role-compile/snapshots/edit-preset/Configuration.xml
+++ b/tests/skills/cases/role-compile/snapshots/edit-preset/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- РеализацияТоваров
РедакторДокументов
+ РеализацияТоваров
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/expand-integration-service/Configuration.xml b/tests/skills/cases/role-compile/snapshots/expand-integration-service/Configuration.xml
index c825d77fa..662286df3 100644
--- a/tests/skills/cases/role-compile/snapshots/expand-integration-service/Configuration.xml
+++ b/tests/skills/cases/role-compile/snapshots/expand-integration-service/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Сообщения
ДоступКШине
+ Сообщения
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/expand-service-dedup/Configuration.xml b/tests/skills/cases/role-compile/snapshots/expand-service-dedup/Configuration.xml
index 475842498..1253d26c3 100644
--- a/tests/skills/cases/role-compile/snapshots/expand-service-dedup/Configuration.xml
+++ b/tests/skills/cases/role-compile/snapshots/expand-service-dedup/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- ВнешнийAPI
ДоступКAPI
+ ВнешнийAPI
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/expand-service-roots/Configuration.xml b/tests/skills/cases/role-compile/snapshots/expand-service-roots/Configuration.xml
index 97142af7e..f802ea3bc 100644
--- a/tests/skills/cases/role-compile/snapshots/expand-service-roots/Configuration.xml
+++ b/tests/skills/cases/role-compile/snapshots/expand-service-roots/Configuration.xml
@@ -246,9 +246,9 @@
Русский
- ВнешнийAPI
- ОбменДанными
ДоступКСервисам
+ ОбменДанными
+ ВнешнийAPI
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/explicit-rights/Configuration.xml b/tests/skills/cases/role-compile/snapshots/explicit-rights/Configuration.xml
index fa33aceb1..d376369ee 100644
--- a/tests/skills/cases/role-compile/snapshots/explicit-rights/Configuration.xml
+++ b/tests/skills/cases/role-compile/snapshots/explicit-rights/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Цены
ПравоЦен
+ Цены
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/russian-types/Configuration.xml b/tests/skills/cases/role-compile/snapshots/russian-types/Configuration.xml
index 06997deb6..42b0f9197 100644
--- a/tests/skills/cases/role-compile/snapshots/russian-types/Configuration.xml
+++ b/tests/skills/cases/role-compile/snapshots/russian-types/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Контрагенты
ЧтениеКонтрагентов
+ Контрагенты
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/synonym-rights/Configuration.xml b/tests/skills/cases/role-compile/snapshots/synonym-rights/Configuration.xml
index 312ce0da7..e4992d10e 100644
--- a/tests/skills/cases/role-compile/snapshots/synonym-rights/Configuration.xml
+++ b/tests/skills/cases/role-compile/snapshots/synonym-rights/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Товары
Кладовщик
+ Товары
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/type-aliases-yo/Configuration.xml b/tests/skills/cases/role-compile/snapshots/type-aliases-yo/Configuration.xml
index 738fbc38b..db804b99d 100644
--- a/tests/skills/cases/role-compile/snapshots/type-aliases-yo/Configuration.xml
+++ b/tests/skills/cases/role-compile/snapshots/type-aliases-yo/Configuration.xml
@@ -246,10 +246,10 @@
Русский
+ РольАлиасы
+ Сводный
ВидыРасчета
Начисления
- Сводный
- РольАлиасы
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/view-preset/Configuration.xml b/tests/skills/cases/role-compile/snapshots/view-preset/Configuration.xml
index fb5998377..03c38f13e 100644
--- a/tests/skills/cases/role-compile/snapshots/view-preset/Configuration.xml
+++ b/tests/skills/cases/role-compile/snapshots/view-preset/Configuration.xml
@@ -246,9 +246,9 @@
Русский
+ ЧтениеНоменклатуры
Номенклатура
Загрузка
- ЧтениеНоменклатуры
\ No newline at end of file
diff --git a/tests/skills/cases/role-compile/snapshots/with-rls/Configuration.xml b/tests/skills/cases/role-compile/snapshots/with-rls/Configuration.xml
index c881bcbe7..6737e0ba0 100644
--- a/tests/skills/cases/role-compile/snapshots/with-rls/Configuration.xml
+++ b/tests/skills/cases/role-compile/snapshots/with-rls/Configuration.xml
@@ -246,9 +246,9 @@
Русский
+ ЧтениеДокументовПоОрганизации
Организации
РеализацияТоваровУслуг
- ЧтениеДокументовПоОрганизации
\ No newline at end of file
diff --git a/tests/skills/cases/role-info/snapshots/multiple-types/Configuration.xml b/tests/skills/cases/role-info/snapshots/multiple-types/Configuration.xml
index cc0beba84..8fbc4aba7 100644
--- a/tests/skills/cases/role-info/snapshots/multiple-types/Configuration.xml
+++ b/tests/skills/cases/role-info/snapshots/multiple-types/Configuration.xml
@@ -246,10 +246,10 @@
Русский
+ Комплексная
Товары
Продажа
Цены
- Комплексная
\ No newline at end of file
diff --git a/tests/skills/cases/role-info/snapshots/overview/Configuration.xml b/tests/skills/cases/role-info/snapshots/overview/Configuration.xml
index bf8daf2c8..812112d0d 100644
--- a/tests/skills/cases/role-info/snapshots/overview/Configuration.xml
+++ b/tests/skills/cases/role-info/snapshots/overview/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Товары
Тест
+ Товары
\ No newline at end of file
diff --git a/tests/skills/cases/role-info/snapshots/with-rls/Configuration.xml b/tests/skills/cases/role-info/snapshots/with-rls/Configuration.xml
index 7a7b51e71..d7388ed92 100644
--- a/tests/skills/cases/role-info/snapshots/with-rls/Configuration.xml
+++ b/tests/skills/cases/role-info/snapshots/with-rls/Configuration.xml
@@ -246,9 +246,9 @@
Русский
+ ОграниченноеЧтение
Организации
Реализация
- ОграниченноеЧтение
\ No newline at end of file
diff --git a/tests/skills/cases/role-validate/snapshots/multiple-objects/Configuration.xml b/tests/skills/cases/role-validate/snapshots/multiple-objects/Configuration.xml
index 68315833c..b5934dbda 100644
--- a/tests/skills/cases/role-validate/snapshots/multiple-objects/Configuration.xml
+++ b/tests/skills/cases/role-validate/snapshots/multiple-objects/Configuration.xml
@@ -246,9 +246,9 @@
Русский
+ Менеджер
Товары
Заказ
- Менеджер
\ No newline at end of file
diff --git a/tests/skills/cases/role-validate/snapshots/valid-role/Configuration.xml b/tests/skills/cases/role-validate/snapshots/valid-role/Configuration.xml
index bf8daf2c8..812112d0d 100644
--- a/tests/skills/cases/role-validate/snapshots/valid-role/Configuration.xml
+++ b/tests/skills/cases/role-validate/snapshots/valid-role/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Товары
Тест
+ Товары
\ No newline at end of file
diff --git a/tests/skills/cases/role-validate/snapshots/with-rls/Configuration.xml b/tests/skills/cases/role-validate/snapshots/with-rls/Configuration.xml
index 6c31e1a5a..96e25c7a4 100644
--- a/tests/skills/cases/role-validate/snapshots/with-rls/Configuration.xml
+++ b/tests/skills/cases/role-validate/snapshots/with-rls/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Продажа
СОграничениями
+ Продажа
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/canonical-type-group.json b/tests/skills/cases/subsystem-compile/canonical-type-group.json
new file mode 100644
index 000000000..ab10a9edc
--- /dev/null
+++ b/tests/skills/cases/subsystem-compile/canonical-type-group.json
@@ -0,0 +1,15 @@
+{
+ "name": "Корневая подсистема встаёт в канонический порядок видов (сразу за языками)",
+ "setup": "fixture:canonical-group",
+ "cwd": "workDir",
+ "input": {
+ "name": "Дельта"
+ },
+ "validatePath": "Subsystems/Дельта",
+ "expect": {
+ "fileContains": {
+ "file": "Configuration.xml",
+ "text": "Русский\r\n\t\t\tДельта\r\n\t\t\tМойМодуль"
+ }
+ }
+}
diff --git a/tests/skills/cases/subsystem-compile/fixtures/canonical-group/Catalogs/Альфа.xml b/tests/skills/cases/subsystem-compile/fixtures/canonical-group/Catalogs/Альфа.xml
new file mode 100644
index 000000000..1cb7b688b
--- /dev/null
+++ b/tests/skills/cases/subsystem-compile/fixtures/canonical-group/Catalogs/Альфа.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+ 5a0d9d1a-97c9-410e-8356-9f950da27be0
+ 4007b976-233c-4411-9744-8a2dcc1f3322
+
+
+ d019cb50-384f-449d-8284-e0b6df88b8b5
+ 1abdd8ea-3007-40f3-97c6-188846a5420e
+
+
+ 53fcd6f4-deb9-43b7-a6d7-4387108fd94a
+ 072eb0c5-6703-417c-8517-ad7da2c701e1
+
+
+ fd6059b4-f27c-4f70-b880-8e89a88b266b
+ 9fefc772-1969-4cc5-8d73-5f4780b748de
+
+
+ 93eaaaed-229e-4cc9-9c02-6a84b85d0daa
+ 967ebe88-90b8-4272-99be-ea8581d0b999
+
+
+
+ Альфа
+
+
+ ru
+ Альфа
+
+
+
+ false
+ HierarchyFoldersAndItems
+ false
+ 2
+ true
+ true
+
+ ToItems
+ 9
+ 25
+ String
+ Variable
+ WholeCatalog
+ false
+ true
+ AsDescription
+
+ Auto
+ InDialog
+ false
+ BothWays
+
+ Catalog.Альфа.StandardAttribute.Description
+ Catalog.Альфа.StandardAttribute.Code
+
+ Begin
+ DontUse
+ Directly
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+ Managed
+ Use
+
+
+
+
+
+ Use
+ Auto
+ DontUse
+ false
+ false
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/fixtures/canonical-group/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/subsystem-compile/fixtures/canonical-group/Catalogs/Альфа/Ext/ObjectModule.bsl
new file mode 100644
index 000000000..5f282702b
--- /dev/null
+++ b/tests/skills/cases/subsystem-compile/fixtures/canonical-group/Catalogs/Альфа/Ext/ObjectModule.bsl
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/fixtures/canonical-group/CommonModules/МойМодуль.xml b/tests/skills/cases/subsystem-compile/fixtures/canonical-group/CommonModules/МойМодуль.xml
new file mode 100644
index 000000000..fe890ebc1
--- /dev/null
+++ b/tests/skills/cases/subsystem-compile/fixtures/canonical-group/CommonModules/МойМодуль.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ МойМодуль
+
+
+ ru
+ Мой модуль
+
+
+
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ DontUse
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/fixtures/canonical-group/CommonModules/МойМодуль/Ext/Module.bsl b/tests/skills/cases/subsystem-compile/fixtures/canonical-group/CommonModules/МойМодуль/Ext/Module.bsl
new file mode 100644
index 000000000..5f282702b
--- /dev/null
+++ b/tests/skills/cases/subsystem-compile/fixtures/canonical-group/CommonModules/МойМодуль/Ext/Module.bsl
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/fixtures/canonical-group/Configuration.xml b/tests/skills/cases/subsystem-compile/fixtures/canonical-group/Configuration.xml
new file mode 100644
index 000000000..e27ecff48
--- /dev/null
+++ b/tests/skills/cases/subsystem-compile/fixtures/canonical-group/Configuration.xml
@@ -0,0 +1,253 @@
+
+
+
+
+
+ 9cd510cd-abfc-11d4-9434-004095e12fc7
+ b5ca1e47-9f34-48fb-ab2a-8354fc3ab569
+
+
+ 9fcd25a0-4822-11d4-9414-008048da11f9
+ 0ba84021-23cf-4b35-be30-fd3d9c21a2b4
+
+
+ e3687481-0a87-462c-a166-9f34594f9bba
+ 2e093290-3736-4634-849a-438a194728ba
+
+
+ 9de14907-ec23-4a07-96f0-85521cb6b53b
+ 976e87b0-6af2-438d-9ea7-a10543fbe8d2
+
+
+ 51f2d5d8-ea4d-4064-8892-82951750031e
+ 7c439300-4352-48e7-88dc-2f898308791c
+
+
+ e68182ea-4237-4383-967f-90c1e3370bc7
+ f0b9e2ff-c0e3-4e3f-977b-d09b50e050a3
+
+
+ fb282519-d103-4dd3-bc12-cb271d631dfc
+ 9817af51-f055-4516-a1c2-2b3ba39f5e37
+
+
+
+ TestConfig
+
+
+ ru
+ TestConfig
+
+
+
+
+ Version8_3_24
+ ManagedApplication
+
+ PlatformApplication
+
+ Russian
+
+
+
+
+ false
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Biometrics
+ true
+
+
+ Location
+ false
+
+
+ BackgroundLocation
+ false
+
+
+ BluetoothPrinters
+ false
+
+
+ WiFiPrinters
+ false
+
+
+ Contacts
+ false
+
+
+ Calendars
+ false
+
+
+ PushNotifications
+ false
+
+
+ LocalNotifications
+ false
+
+
+ InAppPurchases
+ false
+
+
+ PersonalComputerFileExchange
+ false
+
+
+ Ads
+ false
+
+
+ NumberDialing
+ false
+
+
+ CallProcessing
+ false
+
+
+ CallLog
+ false
+
+
+ AutoSendSMS
+ false
+
+
+ ReceiveSMS
+ false
+
+
+ SMSLog
+ false
+
+
+ Camera
+ false
+
+
+ Microphone
+ false
+
+
+ MusicLibrary
+ false
+
+
+ PictureAndVideoLibraries
+ false
+
+
+ AudioPlaybackAndVibration
+ false
+
+
+ BackgroundAudioPlaybackAndVibration
+ false
+
+
+ InstallPackages
+ false
+
+
+ OSBackup
+ true
+
+
+ ApplicationUsageStatistics
+ false
+
+
+ BarcodeScanning
+ false
+
+
+ BackgroundAudioRecording
+ false
+
+
+ AllFilesAccess
+ false
+
+
+ Videoconferences
+ false
+
+
+ NFC
+ false
+
+
+ DocumentScanning
+ false
+
+
+ SpeechToText
+ false
+
+
+ Geofences
+ false
+
+
+ IncomingShareRequests
+ false
+
+
+ AllIncomingShareRequestsTypesProcessing
+ false
+
+
+
+
+
+ Normal
+
+
+ Language.Русский
+
+
+
+
+
+ Managed
+ NotAutoFree
+ DontUse
+ DontUse
+ TaxiEnableVersion8_2
+ DontUse
+ Version8_3_24
+
+
+
+ Русский
+ МойМодуль
+ Альфа
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/fixtures/canonical-group/Ext/ClientApplicationInterface.xml b/tests/skills/cases/subsystem-compile/fixtures/canonical-group/Ext/ClientApplicationInterface.xml
new file mode 100644
index 000000000..5092ac554
--- /dev/null
+++ b/tests/skills/cases/subsystem-compile/fixtures/canonical-group/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ cbab57f2-a0f3-4f0a-89ea-4cb19570ab75
+
+
+
+
+ b553047f-c9aa-4157-978d-448ecad24248
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/fixtures/canonical-group/Languages/Русский.xml b/tests/skills/cases/subsystem-compile/fixtures/canonical-group/Languages/Русский.xml
new file mode 100644
index 000000000..f80aa3c8c
--- /dev/null
+++ b/tests/skills/cases/subsystem-compile/fixtures/canonical-group/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/snapshots/basic/Configuration.xml b/tests/skills/cases/subsystem-compile/snapshots/basic/Configuration.xml
index 250d41aa3..398056fd2 100644
--- a/tests/skills/cases/subsystem-compile/snapshots/basic/Configuration.xml
+++ b/tests/skills/cases/subsystem-compile/snapshots/basic/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Товары
Склад
+ Товары
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Catalogs/Альфа.xml b/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Catalogs/Альфа.xml
new file mode 100644
index 000000000..ba2d5fde3
--- /dev/null
+++ b/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Catalogs/Альфа.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+
+ Альфа
+
+
+ ru
+ Альфа
+
+
+
+ false
+ HierarchyFoldersAndItems
+ false
+ 2
+ true
+ true
+
+ ToItems
+ 9
+ 25
+ String
+ Variable
+ WholeCatalog
+ false
+ true
+ AsDescription
+
+ Auto
+ InDialog
+ false
+ BothWays
+
+ Catalog.Альфа.StandardAttribute.Description
+ Catalog.Альфа.StandardAttribute.Code
+
+ Begin
+ DontUse
+ Directly
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+ Managed
+ Use
+
+
+
+
+
+ Use
+ Auto
+ DontUse
+ false
+ false
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Catalogs/Альфа/Ext/ObjectModule.bsl
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/CommonModules/МойМодуль.xml b/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/CommonModules/МойМодуль.xml
new file mode 100644
index 000000000..5de8f9d25
--- /dev/null
+++ b/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/CommonModules/МойМодуль.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ МойМодуль
+
+
+ ru
+ Мой модуль
+
+
+
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ DontUse
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/CommonModules/МойМодуль/Ext/Module.bsl b/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/CommonModules/МойМодуль/Ext/Module.bsl
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Configuration.xml b/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Configuration.xml
new file mode 100644
index 000000000..c7fac4d97
--- /dev/null
+++ b/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Configuration.xml
@@ -0,0 +1,254 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+ UUID-012
+ UUID-013
+
+
+ UUID-014
+ UUID-015
+
+
+
+ TestConfig
+
+
+ ru
+ TestConfig
+
+
+
+
+ Version8_3_24
+ ManagedApplication
+
+ PlatformApplication
+
+ Russian
+
+
+
+
+ false
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Biometrics
+ true
+
+
+ Location
+ false
+
+
+ BackgroundLocation
+ false
+
+
+ BluetoothPrinters
+ false
+
+
+ WiFiPrinters
+ false
+
+
+ Contacts
+ false
+
+
+ Calendars
+ false
+
+
+ PushNotifications
+ false
+
+
+ LocalNotifications
+ false
+
+
+ InAppPurchases
+ false
+
+
+ PersonalComputerFileExchange
+ false
+
+
+ Ads
+ false
+
+
+ NumberDialing
+ false
+
+
+ CallProcessing
+ false
+
+
+ CallLog
+ false
+
+
+ AutoSendSMS
+ false
+
+
+ ReceiveSMS
+ false
+
+
+ SMSLog
+ false
+
+
+ Camera
+ false
+
+
+ Microphone
+ false
+
+
+ MusicLibrary
+ false
+
+
+ PictureAndVideoLibraries
+ false
+
+
+ AudioPlaybackAndVibration
+ false
+
+
+ BackgroundAudioPlaybackAndVibration
+ false
+
+
+ InstallPackages
+ false
+
+
+ OSBackup
+ true
+
+
+ ApplicationUsageStatistics
+ false
+
+
+ BarcodeScanning
+ false
+
+
+ BackgroundAudioRecording
+ false
+
+
+ AllFilesAccess
+ false
+
+
+ Videoconferences
+ false
+
+
+ NFC
+ false
+
+
+ DocumentScanning
+ false
+
+
+ SpeechToText
+ false
+
+
+ Geofences
+ false
+
+
+ IncomingShareRequests
+ false
+
+
+ AllIncomingShareRequestsTypesProcessing
+ false
+
+
+
+
+
+ Normal
+
+
+ Language.Русский
+
+
+
+
+
+ Managed
+ NotAutoFree
+ DontUse
+ DontUse
+ TaxiEnableVersion8_2
+ DontUse
+ Version8_3_24
+
+
+
+ Русский
+ Дельта
+ МойМодуль
+ Альфа
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Ext/ClientApplicationInterface.xml b/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Ext/ClientApplicationInterface.xml
new file mode 100644
index 000000000..3c1161b2d
--- /dev/null
+++ b/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ UUID-002
+
+
+
+
+ UUID-004
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Languages/Русский.xml b/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Languages/Русский.xml
new file mode 100644
index 000000000..37c60d786
--- /dev/null
+++ b/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Subsystems/Дельта.xml b/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Subsystems/Дельта.xml
new file mode 100644
index 000000000..177d3c1d2
--- /dev/null
+++ b/tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Subsystems/Дельта.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ Дельта
+
+
+ ru
+ Дельта
+
+
+
+ true
+ true
+ false
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/snapshots/full/Configuration.xml b/tests/skills/cases/subsystem-compile/snapshots/full/Configuration.xml
index 3ac63be74..a05031527 100644
--- a/tests/skills/cases/subsystem-compile/snapshots/full/Configuration.xml
+++ b/tests/skills/cases/subsystem-compile/snapshots/full/Configuration.xml
@@ -246,9 +246,9 @@
Русский
+ Продажи
Товары
ОтчетПоПродажам
- Продажи
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/snapshots/synonym-objects/Configuration.xml b/tests/skills/cases/subsystem-compile/snapshots/synonym-objects/Configuration.xml
index 250d41aa3..398056fd2 100644
--- a/tests/skills/cases/subsystem-compile/snapshots/synonym-objects/Configuration.xml
+++ b/tests/skills/cases/subsystem-compile/snapshots/synonym-objects/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Товары
Склад
+ Товары
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-compile/snapshots/with-content/Configuration.xml b/tests/skills/cases/subsystem-compile/snapshots/with-content/Configuration.xml
index a9feab1d1..dc1c5c094 100644
--- a/tests/skills/cases/subsystem-compile/snapshots/with-content/Configuration.xml
+++ b/tests/skills/cases/subsystem-compile/snapshots/with-content/Configuration.xml
@@ -246,9 +246,9 @@
Русский
+ Продажи
Товары
Заказ
- Продажи
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-edit/snapshots/add-content/Configuration.xml b/tests/skills/cases/subsystem-edit/snapshots/add-content/Configuration.xml
index 43e1fc07a..e282e4a8f 100644
--- a/tests/skills/cases/subsystem-edit/snapshots/add-content/Configuration.xml
+++ b/tests/skills/cases/subsystem-edit/snapshots/add-content/Configuration.xml
@@ -246,9 +246,9 @@
Русский
+ Склад
Товары
Заказ
- Склад
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-edit/snapshots/remove-content/Configuration.xml b/tests/skills/cases/subsystem-edit/snapshots/remove-content/Configuration.xml
index 43e1fc07a..e282e4a8f 100644
--- a/tests/skills/cases/subsystem-edit/snapshots/remove-content/Configuration.xml
+++ b/tests/skills/cases/subsystem-edit/snapshots/remove-content/Configuration.xml
@@ -246,9 +246,9 @@
Русский
+ Склад
Товары
Заказ
- Склад
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-info/snapshots/content-mode/Configuration.xml b/tests/skills/cases/subsystem-info/snapshots/content-mode/Configuration.xml
index a9feab1d1..dc1c5c094 100644
--- a/tests/skills/cases/subsystem-info/snapshots/content-mode/Configuration.xml
+++ b/tests/skills/cases/subsystem-info/snapshots/content-mode/Configuration.xml
@@ -246,9 +246,9 @@
Русский
+ Продажи
Товары
Заказ
- Продажи
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-info/snapshots/overview/Configuration.xml b/tests/skills/cases/subsystem-info/snapshots/overview/Configuration.xml
index 250d41aa3..398056fd2 100644
--- a/tests/skills/cases/subsystem-info/snapshots/overview/Configuration.xml
+++ b/tests/skills/cases/subsystem-info/snapshots/overview/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Товары
Склад
+ Товары
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-validate/snapshots/valid/Configuration.xml b/tests/skills/cases/subsystem-validate/snapshots/valid/Configuration.xml
index 250d41aa3..398056fd2 100644
--- a/tests/skills/cases/subsystem-validate/snapshots/valid/Configuration.xml
+++ b/tests/skills/cases/subsystem-validate/snapshots/valid/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Товары
Склад
+ Товары
\ No newline at end of file
diff --git a/tests/skills/cases/subsystem-validate/snapshots/with-content/Configuration.xml b/tests/skills/cases/subsystem-validate/snapshots/with-content/Configuration.xml
index 3938d5619..e1fc18cb8 100644
--- a/tests/skills/cases/subsystem-validate/snapshots/with-content/Configuration.xml
+++ b/tests/skills/cases/subsystem-validate/snapshots/with-content/Configuration.xml
@@ -246,8 +246,8 @@
Русский
- Товары
Продажи
+ Товары
\ No newline at end of file
diff --git a/tests/skills/check-type-maps.mjs b/tests/skills/check-type-maps.mjs
index 3775d21ac..3a6a482ed 100644
--- a/tests/skills/check-type-maps.mjs
+++ b/tests/skills/check-type-maps.mjs
@@ -53,6 +53,12 @@ const MAPS = [
{ skill: 'cf-validate', file: 'cf-validate', kind: 'order', py: 'CHILD_OBJECT_TYPES', ps1: '$childObjectTypes' },
{ skill: 'cfe-validate', file: 'cfe-validate', kind: 'order', py: 'CHILD_OBJECT_TYPES', ps1: '$childObjectTypes' },
{ skill: 'cfe-borrow', file: 'cfe-borrow', kind: 'order', py: 'TYPE_ORDER', ps1: '$script:typeOrder' },
+ // Навыки-создатели: список нужен, чтобы новая группа вида встала на своё место, а не в конец
+ // блока — иначе платформа переставит её при первой же выгрузке.
+ { skill: 'meta-compile', file: 'meta-compile', kind: 'order', py: 'CHILD_OBJECT_TYPES', ps1: '$childObjectTypes' },
+ { skill: 'role-compile', file: 'role-compile', kind: 'order', py: 'CHILD_OBJECT_TYPES', ps1: '$childObjectTypes' },
+ { skill: 'xdto-compile', file: 'xdto-compile', kind: 'order', py: 'CHILD_OBJECT_TYPES', ps1: '$childObjectTypes' },
+ { skill: 'subsystem-compile', file: 'subsystem-compile', kind: 'order', py: 'CHILD_OBJECT_TYPES', ps1: '$childObjectTypes' },
// ключи — канонические имена
{ skill: 'cf-info', file: 'cf-info', kind: 'keys', py: 'type_ru_names', ps1: '$typeRuNames' },