From 1bc943e846ab14397753ca6a998e71f05d81b3ad Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 29 Aug 2026 21:53:52 +0300 Subject: [PATCH] =?UTF-8?q?feat(skills):=20=D0=BD=D0=BE=D0=B2=D0=B0=D1=8F?= =?UTF-8?q?=20=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=B0=20=D0=B2=D0=B8=D0=B4?= =?UTF-8?q?=D0=B0=20=D0=B2=D1=81=D1=82=D0=B0=D1=91=D1=82=20=D0=B2=20=D0=BA?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=BD=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8?= =?UTF-8?q?=D0=B9=20=D0=BF=D0=BE=D1=80=D1=8F=D0=B4=D0=BE=D0=BA,=20=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B5=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D0=B5=D1=86=20?= =?UTF-8?q?=D0=B1=D0=BB=D0=BE=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Навыки-создатели дописывали первый объект нового вида перед . Собранная ими конфигурация выходила в неканоническом порядке видов, и первая же загрузка-выгрузка давала диф: на стенде подали Language -> Catalog -> Document -> CommandGroup -> CommonCommand, платформа вернула Language -> CommonCommand -> CommandGroup -> Catalog -> Document. При этом cf-edit add-childObject и cfe-borrow канонический порядок уже держали — очередная «одна работа, разные реализации». Логика перенесена из cf-edit в семью Register-InChildObjects и в вариант nested-parent: запись встаёт перед первой группой вида старше по CHILD_OBJECT_TYPES. Для этого список канонического порядка добавлен в meta-compile, role-compile, xdto-compile и subsystem-compile (оба порта) и заведён в check-type-maps — копий стало 9 вместо 5, зато все под гардом. У подсистем нашлось больше, чем планировалось: вставка шла в конец ВСЕГО блока, поэтому подсистема покидала и собственную группу, если ниже были другие виды. Одно правило закрывает оба случая. Во вложенном Subsystem.xml порядок видов неприменим — потомок там всегда один, поведение не изменилось. Сдвиг эталонов широкий, но проверяемый: 42 файла в 12 навыках, 53 добавленные строки против 53 удалённых с совпадающим мультимножеством — чистая перестановка, все изменённые строки вида <Тег>Имя. Из 425 эталонов с ChildObjects неканоничными осталось 15: 11 фикстур сортировки (неканоничны по замыслу) и 4 статические фикстуры на сохранение EOL и разбор форм, которые мы намеренно не переупорядочиваем. Версии подняты в обоих портах и за эту правку, и за предыдущую (карты типов). Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01QoAJmoNbgWKobA7JGgN5S3 --- .claude/skills/cf-edit/scripts/cf-edit.ps1 | 2 +- .claude/skills/cf-edit/scripts/cf-edit.py | 2 +- .claude/skills/cf-info/scripts/cf-info.ps1 | 2 +- .claude/skills/cf-info/scripts/cf-info.py | 2 +- .../cf-validate/scripts/cf-validate.ps1 | 2 +- .../skills/cf-validate/scripts/cf-validate.py | 2 +- .../skills/cfe-borrow/scripts/cfe-borrow.ps1 | 2 +- .../skills/cfe-borrow/scripts/cfe-borrow.py | 2 +- .claude/skills/cfe-diff/scripts/cfe-diff.ps1 | 2 +- .claude/skills/cfe-diff/scripts/cfe-diff.py | 2 +- .../cfe-validate/scripts/cfe-validate.ps1 | 2 +- .../cfe-validate/scripts/cfe-validate.py | 2 +- .../meta-compile/scripts/meta-compile.ps1 | 47 +++- .../meta-compile/scripts/meta-compile.py | 51 +++- .../role-compile/scripts/role-compile.ps1 | 47 +++- .../role-compile/scripts/role-compile.py | 51 +++- .../scripts/subsystem-compile.ps1 | 53 +++- .../scripts/subsystem-compile.py | 56 +++- .../xdto-compile/scripts/xdto-compile.ps1 | 47 +++- .../xdto-compile/scripts/xdto-compile.py | 51 +++- .../snapshots/set-home-page/Configuration.xml | 4 +- .../container-types/Configuration.xml | 12 +- .../snapshots/gentypes-full/Configuration.xml | 6 +- .../own-service-objects/cfe/Configuration.xml | 2 +- .../Configuration.xml | 2 +- .../snapshots/basic/Configuration.xml | 2 +- .../snapshots/hide-command/Configuration.xml | 2 +- .../snapshots/show-command/Configuration.xml | 2 +- .../snapshots/valid/Configuration.xml | 2 +- .../with-placement/Configuration.xml | 2 +- .../meta-compile/canonical-type-group.json | 14 + .../snapshots/batch/Configuration.xml | 4 +- .../canonical-type-group/Catalogs/Альфа.xml | 91 +++++++ .../Catalogs/Альфа/Ext/ObjectModule.bsl | 0 .../canonical-type-group/Catalogs/Гамма.xml | 91 +++++++ .../Catalogs/Гамма/Ext/ObjectModule.bsl | 0 .../CommonModules/МойМодуль.xml | 23 ++ .../CommonModules/МойМодуль/Ext/Module.bsl | 0 .../canonical-type-group/Configuration.xml | 254 ++++++++++++++++++ .../Ext/ClientApplicationInterface.xml | 18 ++ .../Languages/Русский.xml | 16 ++ .../catalog-characteristics/Configuration.xml | 2 +- .../format-220-props/Configuration.xml | 2 +- .../format-221-pal/Configuration.xml | 2 +- .../valid-constant/Configuration.xml | 2 +- .../snapshots/basic-role/Configuration.xml | 2 +- .../snapshots/edit-preset/Configuration.xml | 2 +- .../Configuration.xml | 2 +- .../expand-service-dedup/Configuration.xml | 2 +- .../expand-service-roots/Configuration.xml | 4 +- .../explicit-rights/Configuration.xml | 2 +- .../snapshots/russian-types/Configuration.xml | 2 +- .../synonym-rights/Configuration.xml | 2 +- .../type-aliases-yo/Configuration.xml | 4 +- .../snapshots/view-preset/Configuration.xml | 2 +- .../snapshots/with-rls/Configuration.xml | 2 +- .../multiple-types/Configuration.xml | 2 +- .../snapshots/overview/Configuration.xml | 2 +- .../snapshots/with-rls/Configuration.xml | 2 +- .../multiple-objects/Configuration.xml | 2 +- .../snapshots/valid-role/Configuration.xml | 2 +- .../snapshots/with-rls/Configuration.xml | 2 +- .../canonical-type-group.json | 15 ++ .../canonical-group/Catalogs/Альфа.xml | 91 +++++++ .../Catalogs/Альфа/Ext/ObjectModule.bsl | 1 + .../CommonModules/МойМодуль.xml | 23 ++ .../CommonModules/МойМодуль/Ext/Module.bsl | 1 + .../canonical-group/Configuration.xml | 253 +++++++++++++++++ .../Ext/ClientApplicationInterface.xml | 18 ++ .../canonical-group/Languages/Русский.xml | 16 ++ .../snapshots/basic/Configuration.xml | 2 +- .../canonical-type-group/Catalogs/Альфа.xml | 91 +++++++ .../Catalogs/Альфа/Ext/ObjectModule.bsl | 0 .../CommonModules/МойМодуль.xml | 23 ++ .../CommonModules/МойМодуль/Ext/Module.bsl | 0 .../canonical-type-group/Configuration.xml | 254 ++++++++++++++++++ .../Ext/ClientApplicationInterface.xml | 18 ++ .../Languages/Русский.xml | 16 ++ .../Subsystems/Дельта.xml | 22 ++ .../snapshots/full/Configuration.xml | 2 +- .../synonym-objects/Configuration.xml | 2 +- .../snapshots/with-content/Configuration.xml | 2 +- .../snapshots/add-content/Configuration.xml | 2 +- .../remove-content/Configuration.xml | 2 +- .../snapshots/content-mode/Configuration.xml | 2 +- .../snapshots/overview/Configuration.xml | 2 +- .../snapshots/valid/Configuration.xml | 2 +- .../snapshots/with-content/Configuration.xml | 2 +- tests/skills/check-type-maps.mjs | 6 + 89 files changed, 1772 insertions(+), 116 deletions(-) create mode 100644 tests/skills/cases/meta-compile/canonical-type-group.json create mode 100644 tests/skills/cases/meta-compile/snapshots/canonical-type-group/Catalogs/Альфа.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/canonical-type-group/Catalogs/Альфа/Ext/ObjectModule.bsl create mode 100644 tests/skills/cases/meta-compile/snapshots/canonical-type-group/Catalogs/Гамма.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/canonical-type-group/Catalogs/Гамма/Ext/ObjectModule.bsl create mode 100644 tests/skills/cases/meta-compile/snapshots/canonical-type-group/CommonModules/МойМодуль.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/canonical-type-group/CommonModules/МойМодуль/Ext/Module.bsl create mode 100644 tests/skills/cases/meta-compile/snapshots/canonical-type-group/Configuration.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/canonical-type-group/Ext/ClientApplicationInterface.xml create mode 100644 tests/skills/cases/meta-compile/snapshots/canonical-type-group/Languages/Русский.xml create mode 100644 tests/skills/cases/subsystem-compile/canonical-type-group.json create mode 100644 tests/skills/cases/subsystem-compile/fixtures/canonical-group/Catalogs/Альфа.xml create mode 100644 tests/skills/cases/subsystem-compile/fixtures/canonical-group/Catalogs/Альфа/Ext/ObjectModule.bsl create mode 100644 tests/skills/cases/subsystem-compile/fixtures/canonical-group/CommonModules/МойМодуль.xml create mode 100644 tests/skills/cases/subsystem-compile/fixtures/canonical-group/CommonModules/МойМодуль/Ext/Module.bsl create mode 100644 tests/skills/cases/subsystem-compile/fixtures/canonical-group/Configuration.xml create mode 100644 tests/skills/cases/subsystem-compile/fixtures/canonical-group/Ext/ClientApplicationInterface.xml create mode 100644 tests/skills/cases/subsystem-compile/fixtures/canonical-group/Languages/Русский.xml create mode 100644 tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Catalogs/Альфа.xml create mode 100644 tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Catalogs/Альфа/Ext/ObjectModule.bsl create mode 100644 tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/CommonModules/МойМодуль.xml create mode 100644 tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/CommonModules/МойМодуль/Ext/Module.bsl create mode 100644 tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Configuration.xml create mode 100644 tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Ext/ClientApplicationInterface.xml create mode 100644 tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Languages/Русский.xml create mode 100644 tests/skills/cases/subsystem-compile/snapshots/canonical-type-group/Subsystems/Дельта.xml 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+)>[^<]*" + $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+)>[^<]*') + 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+)>[^<]*" + $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+)>[^<]*') + 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+)>[^<]*" + $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+)>[^<]*') + 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+)>[^<]*" + $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+)>[^<]*') + 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' },