diff --git a/.claude/skills/cf-edit/SKILL.md b/.claude/skills/cf-edit/SKILL.md index bbb38c52f..679840ce6 100644 --- a/.claude/skills/cf-edit/SKILL.md +++ b/.claude/skills/cf-edit/SKILL.md @@ -34,7 +34,7 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/cf-edit.ps1" -Confi | `modify-property` | `Ключ=Значение` (batch `;;`) | Изменить свойство | | `add-childObject` | `Type.Name` (batch `;;`) | Зарегистрировать уже существующий файл объекта в ChildObjects. Для создания нового объекта используй `/meta-compile`, `/role-compile`, `/subsystem-compile` — они регистрируют автоматически | | `remove-childObject` | `Type.Name` (batch `;;`) | Удалить объект из ChildObjects | -| `sort-childObjects` | вид, напр. `Catalog` (batch `;;`), либо пусто | Упорядочить ChildObjects по имени внутри вида. Без значения — все виды, кроме `Subsystem` | +| `sort-childObjects` | вид, напр. `Catalog` (batch `;;`), либо пусто | Упорядочить ChildObjects по имени внутри вида. Без значения — все виды, кроме тех, где порядок несёт смысл (см. reference) | | `add-defaultRole` | `Role.Name` или `Name` | Добавить роль по умолчанию | | `remove-defaultRole` | `Role.Name` или `Name` | Удалить роль по умолчанию | | `set-defaultRoles` | Имена через `;;` | Заменить список ролей по умолчанию | diff --git a/.claude/skills/cf-edit/reference.md b/.claude/skills/cf-edit/reference.md index bfa27d735..42ccf3544 100644 --- a/.claude/skills/cf-edit/reference.md +++ b/.claude/skills/cf-edit/reference.md @@ -44,12 +44,12 @@ Batch: `"Catalog.Товары ;; Document.Заказ ;; Enum.ВидыОплат" Упорядочивает объекты в `` по имени **внутри вида**. Значение — имя вида (`Catalog`, `Role`, …), batch через `;;`. Без значения обрабатываются все виды, какие есть в файле. ``` --Operation sort-childObjects — все виды, кроме Subsystem +-Operation sort-childObjects — все виды, кроме перечисленных ниже -Operation sort-childObjects -Value "Catalog" — только справочники -Operation sort-childObjects -Value "Catalog ;; Role" ``` -`Subsystem` пропускается, пока вид не назван явно (`-Value "Subsystem"`): сортировка подсистем меняет порядок разделов в панели. +Виды, где порядок несёт смысл, пропускаются, пока не названы явно: `CommonAttribute` (порядок разделителей задаёт порядок параметров сеанса), `Subsystem` и `CommandGroup` (порядок в панели), `Language` (порядок мультиязычных строк). ## add-defaultRole / remove-defaultRole / set-defaultRoles diff --git a/.claude/skills/cf-edit/scripts/cf-edit.ps1 b/.claude/skills/cf-edit/scripts/cf-edit.ps1 index 24bfff6e2..b06246631 100644 --- a/.claude/skills/cf-edit/scripts/cf-edit.ps1 +++ b/.claude/skills/cf-edit/scripts/cf-edit.ps1 @@ -490,6 +490,19 @@ function Get-NewObjectPosition([string]$cfgDir) { } catch { return "end" } } +# Виды, у которых порядок в дереве несёт смысл: автоматически их не упорядочиваем. +# CommonAttribute — исключение самого стандарта (#std467): у общих реквизитов-разделителей +# порядок в дереве задаёт порядок установки параметров сеанса. Subsystem и CommandGroup: +# пока они не перечислены в / файла Ext/CommandInterface.xml, +# порядок дерева задаёт порядок в интерфейсе, а платформа эти списки сама не заводит +# (в выгрузке ACC вне GroupsOrder 15 живых групп из 39). Language: порядок языков задаёт +# порядок в мультиязычных строках по всей выгрузке. +# Явно названный вид сортируется в любом случае. +# Реестр семьи: tests/skills/check-inline-drift.mjs. +function Test-OrderSensitiveType([string]$typeName) { + return @("CommonAttribute", "Subsystem", "CommandGroup", "Language") -ccontains $typeName +} + # Порядок имён объектов метаданных, как в дереве Конфигуратора. # Ключ — пары «ранг+символ»: регистр не учитывается, подчёркивание раньше цифр, цифры раньше # букв, буквы по кодам (латиница раньше кириллицы), ё на месте е. Культурные таблицы не @@ -568,7 +581,7 @@ function Do-SortChildObjects([string]$batchVal) { [void]$groups[$ln].Add($child) } - $targets = if ($requested.Count -gt 0) { $requested } else { @($groups.Keys | Where-Object { $_ -cne 'Subsystem' }) } + $targets = if ($requested.Count -gt 0) { $requested } else { @($groups.Keys | Where-Object { -not (Test-OrderSensitiveType $_) }) } foreach ($typeName in $targets) { if (-not $groups.Contains($typeName)) { continue } $els = $groups[$typeName] @@ -685,7 +698,7 @@ To create a new $typeName, use $hintSkill (auto-registers in Configuration.xml): } # Место вставки. Вид — по $script:typeOrder; внутри вида — по newObjectPosition. - $byName = ($typeName -cne "Subsystem" -and (Get-NewObjectPosition $script:configDir) -eq "byName") + $byName = (-not (Test-OrderSensitiveType $typeName) -and (Get-NewObjectPosition $script:configDir) -eq "byName") $insertBefore = $null $lastSameType = $null $firstLaterType = $null diff --git a/.claude/skills/cf-edit/scripts/cf-edit.py b/.claude/skills/cf-edit/scripts/cf-edit.py index 886226ee6..f818e1919 100644 --- a/.claude/skills/cf-edit/scripts/cf-edit.py +++ b/.claude/skills/cf-edit/scripts/cf-edit.py @@ -386,6 +386,21 @@ def get_new_object_position(cfg_dir): return "end" +def is_order_sensitive_type(type_name): + """Виды, у которых порядок в дереве несёт смысл: автоматически их не упорядочиваем. + + CommonAttribute — исключение самого стандарта (#std467): у общих реквизитов-разделителей + порядок в дереве задаёт порядок установки параметров сеанса. Subsystem и CommandGroup: + пока они не перечислены в / файла Ext/CommandInterface.xml, + порядок дерева задаёт порядок в интерфейсе, а платформа эти списки сама не заводит + (в выгрузке ACC вне GroupsOrder 15 живых групп из 39). Language: порядок языков задаёт + порядок в мультиязычных строках по всей выгрузке. + Явно названный вид сортируется в любом случае. + Реестр семьи: tests/skills/check-inline-drift.mjs. + """ + return type_name in ("CommonAttribute", "Subsystem", "CommandGroup", "Language") + + def compare_metadata_names(a, b): """Порядок имён объектов метаданных, как в дереве Конфигуратора. @@ -795,7 +810,7 @@ def main(): # end (по умолчанию) кладёт после последнего объекта того же вида, byName — по имени. # Subsystem по имени не упорядочиваем никогда: порядок подсистем в дереве задаёт # порядок разделов в панели, пока их не перечислили в . - by_name = (type_name != "Subsystem" + by_name = (not is_order_sensitive_type(type_name) and get_new_object_position(config_dir) == "byName") insert_before = None last_same = None @@ -867,7 +882,7 @@ def main(): continue groups.setdefault(localname(child), []).append(child) - targets = requested or [t for t in groups if t != "Subsystem"] + targets = requested or [t for t in groups if not is_order_sensitive_type(t)] for type_name in targets: els = groups.get(type_name, []) if len(els) < 2: diff --git a/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 b/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 index 3ef5ed0f2..f30b10c89 100644 --- a/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 +++ b/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 @@ -2291,6 +2291,19 @@ function Get-NewObjectPosition([string]$cfgDir) { } catch { return "end" } } +# Виды, у которых порядок в дереве несёт смысл: автоматически их не упорядочиваем. +# CommonAttribute — исключение самого стандарта (#std467): у общих реквизитов-разделителей +# порядок в дереве задаёт порядок установки параметров сеанса. Subsystem и CommandGroup: +# пока они не перечислены в / файла Ext/CommandInterface.xml, +# порядок дерева задаёт порядок в интерфейсе, а платформа эти списки сама не заводит +# (в выгрузке ACC вне GroupsOrder 15 живых групп из 39). Language: порядок языков задаёт +# порядок в мультиязычных строках по всей выгрузке. +# Явно названный вид сортируется в любом случае. +# Реестр семьи: tests/skills/check-inline-drift.mjs. +function Test-OrderSensitiveType([string]$typeName) { + return @("CommonAttribute", "Subsystem", "CommandGroup", "Language") -ccontains $typeName +} + # Порядок имён объектов метаданных, как в дереве Конфигуратора. # Ключ — пары «ранг+символ»: регистр не учитывается, подчёркивание раньше цифр, цифры раньше # букв, буквы по кодам (латиница раньше кириллицы), ё на месте е. Культурные таблицы не @@ -2348,7 +2361,7 @@ function Add-ToChildObjects { # заимствует Конфигуратор: в боевых выгрузках расширений ChildObjects не отсортирован. # Subsystem по имени не упорядочиваем никогда: порядок подсистем в дереве задаёт порядок # разделов в панели. - $byName = ($typeName -cne "Subsystem" -and (Get-NewObjectPosition $extDir) -eq "byName") + $byName = (-not (Test-OrderSensitiveType $typeName) -and (Get-NewObjectPosition $extDir) -eq "byName") $insertBefore = $null $lastSameType = $null diff --git a/.claude/skills/cfe-borrow/scripts/cfe-borrow.py b/.claude/skills/cfe-borrow/scripts/cfe-borrow.py index 966ab7179..2c1c62cd6 100644 --- a/.claude/skills/cfe-borrow/scripts/cfe-borrow.py +++ b/.claude/skills/cfe-borrow/scripts/cfe-borrow.py @@ -250,6 +250,21 @@ def get_new_object_position(cfg_dir): return "end" +def is_order_sensitive_type(type_name): + """Виды, у которых порядок в дереве несёт смысл: автоматически их не упорядочиваем. + + CommonAttribute — исключение самого стандарта (#std467): у общих реквизитов-разделителей + порядок в дереве задаёт порядок установки параметров сеанса. Subsystem и CommandGroup: + пока они не перечислены в / файла Ext/CommandInterface.xml, + порядок дерева задаёт порядок в интерфейсе, а платформа эти списки сама не заводит + (в выгрузке ACC вне GroupsOrder 15 живых групп из 39). Language: порядок языков задаёт + порядок в мультиязычных строках по всей выгрузке. + Явно названный вид сортируется в любом случае. + Реестр семьи: tests/skills/check-inline-drift.mjs. + """ + return type_name in ("CommonAttribute", "Subsystem", "CommandGroup", "Language") + + def compare_metadata_names(a, b): """Порядок имён объектов метаданных, как в дереве Конфигуратора. @@ -1117,7 +1132,7 @@ def main(): # Так же, как заимствует Конфигуратор: в боевых выгрузках расширений ChildObjects # не отсортирован. Subsystem по имени не упорядочиваем никогда: порядок подсистем # в дереве задаёт порядок разделов в панели. - by_name = (type_name != "Subsystem" + by_name = (not is_order_sensitive_type(type_name) and get_new_object_position(ext_dir) == "byName") insert_before = None for child in child_objs_el: diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1 index beef8f4f7..abf78cb76 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.ps1 +++ b/.claude/skills/meta-compile/scripts/meta-compile.ps1 @@ -5268,6 +5268,19 @@ function Get-NewObjectPosition([string]$cfgDir) { } catch { return "end" } } +# Виды, у которых порядок в дереве несёт смысл: автоматически их не упорядочиваем. +# CommonAttribute — исключение самого стандарта (#std467): у общих реквизитов-разделителей +# порядок в дереве задаёт порядок установки параметров сеанса. Subsystem и CommandGroup: +# пока они не перечислены в / файла Ext/CommandInterface.xml, +# порядок дерева задаёт порядок в интерфейсе, а платформа эти списки сама не заводит +# (в выгрузке ACC вне GroupsOrder 15 живых групп из 39). Language: порядок языков задаёт +# порядок в мультиязычных строках по всей выгрузке. +# Явно названный вид сортируется в любом случае. +# Реестр семьи: tests/skills/check-inline-drift.mjs. +function Test-OrderSensitiveType([string]$typeName) { + return @("CommonAttribute", "Subsystem", "CommandGroup", "Language") -ccontains $typeName +} + # Порядок имён объектов метаданных, как в дереве Конфигуратора. # Ключ — пары «ранг+символ»: регистр не учитывается, подчёркивание раньше цифр, цифры раньше # букв, буквы по кодам (латиница раньше кириллицы), ё на месте е. Культурные таблицы не @@ -5336,10 +5349,9 @@ function Register-InChildObjects([string]$ParentXmlPath, [string]$ParentTag, [st return "added" } - # byName: перед первым объектом того же вида, чьё имя больше нового. Subsystem — никогда: - # порядок подсистем в дереве задаёт порядок разделов в панели, пока их не перечислили в - # файла Ext/CommandInterface.xml (платформа этот список сама не заводит). - if ($ChildTag -cne "Subsystem" -and (Get-NewObjectPosition ([System.IO.Path]::GetDirectoryName([System.IO.Path]::GetFullPath($ParentXmlPath)))) -eq "byName") { + # byName: перед первым объектом того же вида, чьё имя больше нового. + # Виды с осмысленным порядком в дереве пропускаем — см. Test-OrderSensitiveType. + if (-not (Test-OrderSensitiveType $ChildTag) -and (Get-NewObjectPosition ([System.IO.Path]::GetDirectoryName([System.IO.Path]::GetFullPath($ParentXmlPath)))) -eq "byName") { $lineRx = [regex]"(?m)^([ \t]*)<$ChildTag>([^<]*)" $m = $lineRx.Match($configContent, $block.Index, $block.Length) while ($m.Success) { diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py index ea42151a8..8deec3073 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.py +++ b/.claude/skills/meta-compile/scripts/meta-compile.py @@ -5241,6 +5241,21 @@ def get_new_object_position(cfg_dir): return "end" +def is_order_sensitive_type(type_name): + """Виды, у которых порядок в дереве несёт смысл: автоматически их не упорядочиваем. + + CommonAttribute — исключение самого стандарта (#std467): у общих реквизитов-разделителей + порядок в дереве задаёт порядок установки параметров сеанса. Subsystem и CommandGroup: + пока они не перечислены в / файла Ext/CommandInterface.xml, + порядок дерева задаёт порядок в интерфейсе, а платформа эти списки сама не заводит + (в выгрузке ACC вне GroupsOrder 15 живых групп из 39). Language: порядок языков задаёт + порядок в мультиязычных строках по всей выгрузке. + Явно названный вид сортируется в любом случае. + Реестр семьи: tests/skills/check-inline-drift.mjs. + """ + return type_name in ("CommonAttribute", "Subsystem", "CommandGroup", "Language") + + def compare_metadata_names(a, b): """Порядок имён объектов метаданных, как в дереве Конфигуратора. @@ -5324,10 +5339,9 @@ def register_in_childobjects(parent_xml_path, parent_tag, child_tag, child_name) write_utf8_bom(parent_xml_path, new_content) return 'added' - # byName: перед первым объектом того же вида, чьё имя больше нового. Subsystem — никогда: - # порядок подсистем в дереве задаёт порядок разделов в панели, пока их не перечислили в - # файла Ext/CommandInterface.xml (платформа этот список сама не заводит). - if (child_tag != 'Subsystem' + # byName: перед первым объектом того же вида, чьё имя больше нового. + # Виды с осмысленным порядком в дереве пропускаем — см. is_order_sensitive_type. + if (not is_order_sensitive_type(child_tag) and get_new_object_position(os.path.dirname(os.path.abspath(parent_xml_path))) == 'byName'): line_rx = re.compile(rf'(?m)^([ \t]*)<{child_tag}>([^<]*)') for m in line_rx.finditer(config_content, block.start(), block.end()): diff --git a/.claude/skills/role-compile/scripts/role-compile.ps1 b/.claude/skills/role-compile/scripts/role-compile.ps1 index 65f4e8ab9..6c914f55e 100644 --- a/.claude/skills/role-compile/scripts/role-compile.ps1 +++ b/.claude/skills/role-compile/scripts/role-compile.ps1 @@ -1219,6 +1219,19 @@ function Get-NewObjectPosition([string]$cfgDir) { } catch { return "end" } } +# Виды, у которых порядок в дереве несёт смысл: автоматически их не упорядочиваем. +# CommonAttribute — исключение самого стандарта (#std467): у общих реквизитов-разделителей +# порядок в дереве задаёт порядок установки параметров сеанса. Subsystem и CommandGroup: +# пока они не перечислены в / файла Ext/CommandInterface.xml, +# порядок дерева задаёт порядок в интерфейсе, а платформа эти списки сама не заводит +# (в выгрузке ACC вне GroupsOrder 15 живых групп из 39). Language: порядок языков задаёт +# порядок в мультиязычных строках по всей выгрузке. +# Явно названный вид сортируется в любом случае. +# Реестр семьи: tests/skills/check-inline-drift.mjs. +function Test-OrderSensitiveType([string]$typeName) { + return @("CommonAttribute", "Subsystem", "CommandGroup", "Language") -ccontains $typeName +} + # Порядок имён объектов метаданных, как в дереве Конфигуратора. # Ключ — пары «ранг+символ»: регистр не учитывается, подчёркивание раньше цифр, цифры раньше # букв, буквы по кодам (латиница раньше кириллицы), ё на месте е. Культурные таблицы не @@ -1287,10 +1300,9 @@ function Register-InChildObjects([string]$ParentXmlPath, [string]$ParentTag, [st return "added" } - # byName: перед первым объектом того же вида, чьё имя больше нового. Subsystem — никогда: - # порядок подсистем в дереве задаёт порядок разделов в панели, пока их не перечислили в - # файла Ext/CommandInterface.xml (платформа этот список сама не заводит). - if ($ChildTag -cne "Subsystem" -and (Get-NewObjectPosition ([System.IO.Path]::GetDirectoryName([System.IO.Path]::GetFullPath($ParentXmlPath)))) -eq "byName") { + # byName: перед первым объектом того же вида, чьё имя больше нового. + # Виды с осмысленным порядком в дереве пропускаем — см. Test-OrderSensitiveType. + if (-not (Test-OrderSensitiveType $ChildTag) -and (Get-NewObjectPosition ([System.IO.Path]::GetDirectoryName([System.IO.Path]::GetFullPath($ParentXmlPath)))) -eq "byName") { $lineRx = [regex]"(?m)^([ \t]*)<$ChildTag>([^<]*)" $m = $lineRx.Match($configContent, $block.Index, $block.Length) while ($m.Success) { diff --git a/.claude/skills/role-compile/scripts/role-compile.py b/.claude/skills/role-compile/scripts/role-compile.py index 367dba15a..834c42f5c 100644 --- a/.claude/skills/role-compile/scripts/role-compile.py +++ b/.claude/skills/role-compile/scripts/role-compile.py @@ -1088,6 +1088,21 @@ def get_new_object_position(cfg_dir): return "end" +def is_order_sensitive_type(type_name): + """Виды, у которых порядок в дереве несёт смысл: автоматически их не упорядочиваем. + + CommonAttribute — исключение самого стандарта (#std467): у общих реквизитов-разделителей + порядок в дереве задаёт порядок установки параметров сеанса. Subsystem и CommandGroup: + пока они не перечислены в / файла Ext/CommandInterface.xml, + порядок дерева задаёт порядок в интерфейсе, а платформа эти списки сама не заводит + (в выгрузке ACC вне GroupsOrder 15 живых групп из 39). Language: порядок языков задаёт + порядок в мультиязычных строках по всей выгрузке. + Явно названный вид сортируется в любом случае. + Реестр семьи: tests/skills/check-inline-drift.mjs. + """ + return type_name in ("CommonAttribute", "Subsystem", "CommandGroup", "Language") + + def compare_metadata_names(a, b): """Порядок имён объектов метаданных, как в дереве Конфигуратора. @@ -1171,10 +1186,9 @@ def register_in_childobjects(parent_xml_path, parent_tag, child_tag, child_name) write_utf8_bom(parent_xml_path, new_content) return 'added' - # byName: перед первым объектом того же вида, чьё имя больше нового. Subsystem — никогда: - # порядок подсистем в дереве задаёт порядок разделов в панели, пока их не перечислили в - # файла Ext/CommandInterface.xml (платформа этот список сама не заводит). - if (child_tag != 'Subsystem' + # byName: перед первым объектом того же вида, чьё имя больше нового. + # Виды с осмысленным порядком в дереве пропускаем — см. is_order_sensitive_type. + if (not is_order_sensitive_type(child_tag) and get_new_object_position(os.path.dirname(os.path.abspath(parent_xml_path))) == 'byName'): line_rx = re.compile(rf'(?m)^([ \t]*)<{child_tag}>([^<]*)') for m in line_rx.finditer(config_content, block.start(), block.end()): diff --git a/.claude/skills/xdto-compile/scripts/xdto-compile.ps1 b/.claude/skills/xdto-compile/scripts/xdto-compile.ps1 index caee1ea4b..8fc386a19 100644 --- a/.claude/skills/xdto-compile/scripts/xdto-compile.ps1 +++ b/.claude/skills/xdto-compile/scripts/xdto-compile.ps1 @@ -1027,6 +1027,19 @@ function Get-NewObjectPosition([string]$cfgDir) { } catch { return "end" } } +# Виды, у которых порядок в дереве несёт смысл: автоматически их не упорядочиваем. +# CommonAttribute — исключение самого стандарта (#std467): у общих реквизитов-разделителей +# порядок в дереве задаёт порядок установки параметров сеанса. Subsystem и CommandGroup: +# пока они не перечислены в / файла Ext/CommandInterface.xml, +# порядок дерева задаёт порядок в интерфейсе, а платформа эти списки сама не заводит +# (в выгрузке ACC вне GroupsOrder 15 живых групп из 39). Language: порядок языков задаёт +# порядок в мультиязычных строках по всей выгрузке. +# Явно названный вид сортируется в любом случае. +# Реестр семьи: tests/skills/check-inline-drift.mjs. +function Test-OrderSensitiveType([string]$typeName) { + return @("CommonAttribute", "Subsystem", "CommandGroup", "Language") -ccontains $typeName +} + # Порядок имён объектов метаданных, как в дереве Конфигуратора. # Ключ — пары «ранг+символ»: регистр не учитывается, подчёркивание раньше цифр, цифры раньше # букв, буквы по кодам (латиница раньше кириллицы), ё на месте е. Культурные таблицы не @@ -1095,10 +1108,9 @@ function Register-InChildObjects([string]$ParentXmlPath, [string]$ParentTag, [st return "added" } - # byName: перед первым объектом того же вида, чьё имя больше нового. Subsystem — никогда: - # порядок подсистем в дереве задаёт порядок разделов в панели, пока их не перечислили в - # файла Ext/CommandInterface.xml (платформа этот список сама не заводит). - if ($ChildTag -cne "Subsystem" -and (Get-NewObjectPosition ([System.IO.Path]::GetDirectoryName([System.IO.Path]::GetFullPath($ParentXmlPath)))) -eq "byName") { + # byName: перед первым объектом того же вида, чьё имя больше нового. + # Виды с осмысленным порядком в дереве пропускаем — см. Test-OrderSensitiveType. + if (-not (Test-OrderSensitiveType $ChildTag) -and (Get-NewObjectPosition ([System.IO.Path]::GetDirectoryName([System.IO.Path]::GetFullPath($ParentXmlPath)))) -eq "byName") { $lineRx = [regex]"(?m)^([ \t]*)<$ChildTag>([^<]*)" $m = $lineRx.Match($configContent, $block.Index, $block.Length) while ($m.Success) { diff --git a/.claude/skills/xdto-compile/scripts/xdto-compile.py b/.claude/skills/xdto-compile/scripts/xdto-compile.py index 3e817bd47..1725c0c19 100644 --- a/.claude/skills/xdto-compile/scripts/xdto-compile.py +++ b/.claude/skills/xdto-compile/scripts/xdto-compile.py @@ -1138,6 +1138,21 @@ def get_new_object_position(cfg_dir): return "end" +def is_order_sensitive_type(type_name): + """Виды, у которых порядок в дереве несёт смысл: автоматически их не упорядочиваем. + + CommonAttribute — исключение самого стандарта (#std467): у общих реквизитов-разделителей + порядок в дереве задаёт порядок установки параметров сеанса. Subsystem и CommandGroup: + пока они не перечислены в / файла Ext/CommandInterface.xml, + порядок дерева задаёт порядок в интерфейсе, а платформа эти списки сама не заводит + (в выгрузке ACC вне GroupsOrder 15 живых групп из 39). Language: порядок языков задаёт + порядок в мультиязычных строках по всей выгрузке. + Явно названный вид сортируется в любом случае. + Реестр семьи: tests/skills/check-inline-drift.mjs. + """ + return type_name in ("CommonAttribute", "Subsystem", "CommandGroup", "Language") + + def compare_metadata_names(a, b): """Порядок имён объектов метаданных, как в дереве Конфигуратора. @@ -1221,10 +1236,9 @@ def register_in_childobjects(parent_xml_path, parent_tag, child_tag, child_name) write_utf8_bom(parent_xml_path, new_content) return 'added' - # byName: перед первым объектом того же вида, чьё имя больше нового. Subsystem — никогда: - # порядок подсистем в дереве задаёт порядок разделов в панели, пока их не перечислили в - # файла Ext/CommandInterface.xml (платформа этот список сама не заводит). - if (child_tag != 'Subsystem' + # byName: перед первым объектом того же вида, чьё имя больше нового. + # Виды с осмысленным порядком в дереве пропускаем — см. is_order_sensitive_type. + if (not is_order_sensitive_type(child_tag) and get_new_object_position(os.path.dirname(os.path.abspath(parent_xml_path))) == 'byName'): line_rx = re.compile(rf'(?m)^([ \t]*)<{child_tag}>([^<]*)') for m in line_rx.finditer(config_content, block.start(), block.end()): diff --git a/docs/v8-project-guide.md b/docs/v8-project-guide.md index aad4482d8..c6a322fac 100644 --- a/docs/v8-project-guide.md +++ b/docs/v8-project-guide.md @@ -163,11 +163,15 @@ **Порядок имён** — как в дереве Конфигуратора: регистр не учитывается, подчёркивание раньше цифр, цифры раньше букв, латиница раньше кириллицы, `ё` на месте `е`. Сравнение реализовано ключом «ранг+символ», а не культурными таблицами ОС, поэтому PowerShell- и Python-порты дают одинаковый результат на любой платформе. -**Подсистемы поле не затрагивает** — они всегда дописываются в конец. Порядок подсистем в дереве задаёт порядок разделов в панели, пока они не перечислены в `` файла `Ext/CommandInterface.xml`; сама платформа этот список не заводит, а `subsystem-compile` его не трогает (это работа `interface-edit`). Сортировка подсистем поэтому переставляла бы разделы интерфейса молча. +**Четыре вида поле не затрагивает** — они всегда дописываются в конец, и массовая сортировка их тоже пропускает. Упорядочить их можно, только назвав вид явно. + +- `CommonAttribute` — исключение самого стандарта: у общих реквизитов-разделителей порядок в дереве задаёт порядок установки параметров сеанса. +- `Subsystem` и `CommandGroup` — пока они не перечислены в `` / `` файла `Ext/CommandInterface.xml`, порядок в дереве задаёт порядок в интерфейсе, а платформа эти списки сама не заводит: в выгрузке ACC вне `GroupsOrder` 15 живых групп из 39, а `SubsystemsOrder` не появляется, пока интерфейс не настроен руками. +- `Language` — порядок языков задаёт порядок `` в мультиязычных строках по всей выгрузке. **Что поле не делает.** Оно влияет только на новые записи и не приводит в порядок уже накопленное — для этого есть `/cf-edit -Operation sort-childObjects`. `byName` к тому же предполагает, что список уже упорядочен: объект встаёт перед первым объектом своего вида, чьё имя больше. Взаимный порядок групп видов навыки не меняют вовсе: платформа приводит его к своему при первой же выгрузке. -**Виды с осмысленным порядком.** В типовых конфигурациях `CommandGroup`, `PaletteColor` и `Language` перечислены не по алфавиту — порядок там выбран разработчиком. Стандарт распространяется и на них, так что `byName` и сортировка этот порядок перебьют; на работу конфигурации это не влияет (проверено загрузкой и обратной выгрузкой), но диф будет. +**Объекты с префиксом `Удалить`** стандарт разрешает держать в конце ветки. Навыки их не выделяют и ставят по алфавиту — это стандарту не противоречит, и типовые конфигурации поступают так же (в ACC 360 таких объектов из 373 стоят по алфавиту, а не в хвосте). ### Хуки и `skillSuggester` (экспериментально) diff --git a/tests/skills/cases/cf-edit/fixtures/order-sensitive/Catalogs/Альфа.xml b/tests/skills/cases/cf-edit/fixtures/order-sensitive/Catalogs/Альфа.xml new file mode 100644 index 000000000..58fc233a3 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/order-sensitive/Catalogs/Альфа.xml @@ -0,0 +1,91 @@ + + + + + + 7539db8d-eb0a-4276-8a6c-bdd54cdbdd99 + 1434fc5c-81ce-4150-98dc-35a9b7acebf9 + + + a3699fd5-a907-4a7c-89b3-e5d13b72c624 + 2e9b40a8-fe03-49b6-8ab1-d83026bd4413 + + + 8277d827-792c-470d-98cc-20ad04205de6 + f9e03bbf-3c36-4ffa-9b5c-50352e663a2e + + + 3f9cfce6-5900-4086-8e8c-cfb4799edcc4 + a481b7be-60fc-41ce-b5d6-2d48a1b0d47b + + + ce2ee8e0-b0cc-49e6-a3ff-e2b9bccb4c26 + 92efb0ad-6cf5-4ef8-ae2e-d18fc73de14f + + + + Альфа + + + 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/cf-edit/fixtures/order-sensitive/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/fixtures/order-sensitive/Catalogs/Альфа/Ext/ObjectModule.bsl new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/order-sensitive/Catalogs/Альфа/Ext/ObjectModule.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/order-sensitive/Catalogs/Гамма.xml b/tests/skills/cases/cf-edit/fixtures/order-sensitive/Catalogs/Гамма.xml new file mode 100644 index 000000000..87a4157a3 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/order-sensitive/Catalogs/Гамма.xml @@ -0,0 +1,91 @@ + + + + + + 6b6e7690-0958-433a-80c9-d9e317e62d1f + d394230e-cb23-4c87-8588-6089cb8122ef + + + 1cc77a7b-76d6-4260-9b9e-b215c0c30240 + f87b3d11-7009-47ba-bf5b-8c49f0cb8748 + + + db14434b-1585-4663-bc72-a011787d1f5c + 71558159-93de-4a0f-a0b5-94e0f599bc5b + + + d6a92d3d-3a21-4913-818a-406fd7446a0b + 4e885dad-8fc5-46eb-a690-c95460ea5b9b + + + 2a90ac2b-dbb6-4a1a-852e-d0f1bb361a9f + 48c37bf7-446f-4e98-ae9b-82c02dfb419e + + + + Гамма + + + 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/cf-edit/fixtures/order-sensitive/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/fixtures/order-sensitive/Catalogs/Гамма/Ext/ObjectModule.bsl new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/order-sensitive/Catalogs/Гамма/Ext/ObjectModule.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/order-sensitive/CommandGroups/ГруппаБанан.xml b/tests/skills/cases/cf-edit/fixtures/order-sensitive/CommandGroups/ГруппаБанан.xml new file mode 100644 index 000000000..d39679b69 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/order-sensitive/CommandGroups/ГруппаБанан.xml @@ -0,0 +1,19 @@ + + + + + ГруппаБанан + + + ru + Группа банан + + + + Auto + + + NavigationPanel + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/order-sensitive/CommandGroups/ГруппаЯблоко.xml b/tests/skills/cases/cf-edit/fixtures/order-sensitive/CommandGroups/ГруппаЯблоко.xml new file mode 100644 index 000000000..9f749f4d6 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/order-sensitive/CommandGroups/ГруппаЯблоко.xml @@ -0,0 +1,19 @@ + + + + + ГруппаЯблоко + + + ru + Группа яблоко + + + + Auto + + + NavigationPanel + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/order-sensitive/CommonAttributes/РеквизитА.xml b/tests/skills/cases/cf-edit/fixtures/order-sensitive/CommonAttributes/РеквизитА.xml new file mode 100644 index 000000000..6c6ee0d64 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/order-sensitive/CommonAttributes/РеквизитА.xml @@ -0,0 +1,56 @@ + + + + + РеквизитА + + + ru + Реквизит а + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + DontUse + DontUse + Independently + + + + DontUse + DontUse + DontUse + DontIndex + Use + Use + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/order-sensitive/CommonAttributes/РеквизитЯ.xml b/tests/skills/cases/cf-edit/fixtures/order-sensitive/CommonAttributes/РеквизитЯ.xml new file mode 100644 index 000000000..06e74777c --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/order-sensitive/CommonAttributes/РеквизитЯ.xml @@ -0,0 +1,56 @@ + + + + + РеквизитЯ + + + ru + Реквизит я + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + DontUse + DontUse + Independently + + + + DontUse + DontUse + DontUse + DontIndex + Use + Use + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/order-sensitive/Configuration.xml b/tests/skills/cases/cf-edit/fixtures/order-sensitive/Configuration.xml new file mode 100644 index 000000000..1faef46fe --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/order-sensitive/Configuration.xml @@ -0,0 +1,257 @@ + + + + + + 9cd510cd-abfc-11d4-9434-004095e12fc7 + e4e8ccb5-a9dd-4f87-8142-e4493f74c1ea + + + 9fcd25a0-4822-11d4-9414-008048da11f9 + 94627857-cd4e-4a51-a037-50821f95b8ba + + + e3687481-0a87-462c-a166-9f34594f9bba + 6947f69b-0196-4b53-8b8d-7fc2431d122d + + + 9de14907-ec23-4a07-96f0-85521cb6b53b + 153a2602-47e0-4cdc-b30e-ca209fe2a5e1 + + + 51f2d5d8-ea4d-4064-8892-82951750031e + 575ad4a3-4b16-463f-afe6-991c5c78ffb1 + + + e68182ea-4237-4383-967f-90c1e3370bc7 + e6a392f6-dffc-44fd-91e5-08cf26ba1c25 + + + fb282519-d103-4dd3-bc12-cb271d631dfc + 0169f417-8b6c-4f7e-99f2-e9cfd39eb31f + + + + 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/cf-edit/fixtures/order-sensitive/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cf-edit/fixtures/order-sensitive/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..c87834077 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/order-sensitive/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/cf-edit/fixtures/order-sensitive/Languages/Русский.xml b/tests/skills/cases/cf-edit/fixtures/order-sensitive/Languages/Русский.xml new file mode 100644 index 000000000..bd54eebbb --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/order-sensitive/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/Catalogs/Альфа.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/Catalogs/Альфа.xml new file mode 100644 index 000000000..ba2d5fde3 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/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/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/Catalogs/Альфа/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/Catalogs/Гамма.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/Catalogs/Гамма.xml new file mode 100644 index 000000000..7279f86fd --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/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/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/Catalogs/Гамма/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/CommandGroups/ГруппаБанан.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/CommandGroups/ГруппаБанан.xml new file mode 100644 index 000000000..f953e89d4 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/CommandGroups/ГруппаБанан.xml @@ -0,0 +1,19 @@ + + + + + ГруппаБанан + + + ru + Группа банан + + + + Auto + + + NavigationPanel + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/CommandGroups/ГруппаЯблоко.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/CommandGroups/ГруппаЯблоко.xml new file mode 100644 index 000000000..ed5a221f4 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/CommandGroups/ГруппаЯблоко.xml @@ -0,0 +1,19 @@ + + + + + ГруппаЯблоко + + + ru + Группа яблоко + + + + Auto + + + NavigationPanel + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/CommonAttributes/РеквизитА.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/CommonAttributes/РеквизитА.xml new file mode 100644 index 000000000..f1372aac8 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/CommonAttributes/РеквизитА.xml @@ -0,0 +1,56 @@ + + + + + РеквизитА + + + ru + Реквизит а + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + DontUse + DontUse + Independently + + + + DontUse + DontUse + DontUse + DontIndex + Use + Use + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/CommonAttributes/РеквизитЯ.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/CommonAttributes/РеквизитЯ.xml new file mode 100644 index 000000000..368d61ced --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/CommonAttributes/РеквизитЯ.xml @@ -0,0 +1,56 @@ + + + + + РеквизитЯ + + + ru + Реквизит я + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + DontUse + DontUse + Independently + + + + DontUse + DontUse + DontUse + DontIndex + Use + Use + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/Configuration.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/Configuration.xml new file mode 100644 index 000000000..cbd47123c --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/Configuration.xml @@ -0,0 +1,257 @@ + + + + + + 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/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/Languages/Русский.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-explicit/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/Catalogs/Альфа.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/Catalogs/Альфа.xml new file mode 100644 index 000000000..ba2d5fde3 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/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/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/Catalogs/Альфа/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/Catalogs/Гамма.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/Catalogs/Гамма.xml new file mode 100644 index 000000000..7279f86fd --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/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/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/Catalogs/Гамма/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/CommandGroups/ГруппаБанан.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/CommandGroups/ГруппаБанан.xml new file mode 100644 index 000000000..f953e89d4 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/CommandGroups/ГруппаБанан.xml @@ -0,0 +1,19 @@ + + + + + ГруппаБанан + + + ru + Группа банан + + + + Auto + + + NavigationPanel + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/CommandGroups/ГруппаЯблоко.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/CommandGroups/ГруппаЯблоко.xml new file mode 100644 index 000000000..ed5a221f4 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/CommandGroups/ГруппаЯблоко.xml @@ -0,0 +1,19 @@ + + + + + ГруппаЯблоко + + + ru + Группа яблоко + + + + Auto + + + NavigationPanel + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/CommonAttributes/РеквизитА.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/CommonAttributes/РеквизитА.xml new file mode 100644 index 000000000..f1372aac8 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/CommonAttributes/РеквизитА.xml @@ -0,0 +1,56 @@ + + + + + РеквизитА + + + ru + Реквизит а + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + DontUse + DontUse + Independently + + + + DontUse + DontUse + DontUse + DontIndex + Use + Use + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/CommonAttributes/РеквизитЯ.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/CommonAttributes/РеквизитЯ.xml new file mode 100644 index 000000000..368d61ced --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/CommonAttributes/РеквизитЯ.xml @@ -0,0 +1,56 @@ + + + + + РеквизитЯ + + + ru + Реквизит я + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + DontUse + DontUse + Independently + + + + DontUse + DontUse + DontUse + DontIndex + Use + Use + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/Configuration.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/Configuration.xml new file mode 100644 index 000000000..1399ccb1d --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/Configuration.xml @@ -0,0 +1,257 @@ + + + + + + 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/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/Languages/Русский.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-order-sensitive-skipped/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/sort-childobjects-order-sensitive-explicit.json b/tests/skills/cases/cf-edit/sort-childobjects-order-sensitive-explicit.json new file mode 100644 index 000000000..c20a8cdd1 --- /dev/null +++ b/tests/skills/cases/cf-edit/sort-childobjects-order-sensitive-explicit.json @@ -0,0 +1,12 @@ +{ + "name": "sort-childObjects по явно названным видам сортирует и общие реквизиты, и группы команд", + "setup": "fixture:order-sensitive", + "input": [ { "operation": "sort-childObjects", "value": "CommonAttribute ;; CommandGroup" } ], + "expect": { + "stdoutContains": ["Sorted: CommonAttribute (2)", "Sorted: CommandGroup (2)"], + "fileContains": { + "file": "Configuration.xml", + "text": "Гамма\r\n\t\t\tАльфа\r\n\t\t\tГруппаБанан\r\n\t\t\tГруппаЯблоко\r\n\t\t\tРеквизитА\r\n\t\t\tРеквизитЯ" + } + } +} diff --git a/tests/skills/cases/cf-edit/sort-childobjects-order-sensitive-skipped.json b/tests/skills/cases/cf-edit/sort-childobjects-order-sensitive-skipped.json new file mode 100644 index 000000000..bad3e0aaa --- /dev/null +++ b/tests/skills/cases/cf-edit/sort-childobjects-order-sensitive-skipped.json @@ -0,0 +1,12 @@ +{ + "name": "sort-childObjects без значения не трогает виды с осмысленным порядком: CommonAttribute, CommandGroup, Language", + "setup": "fixture:order-sensitive", + "input": [ { "operation": "sort-childObjects" } ], + "expect": { + "stdoutContains": ["Sorted: Catalog (2)"], + "fileContains": { + "file": "Configuration.xml", + "text": "Альфа\r\n\t\t\tГамма\r\n\t\t\tГруппаЯблоко\r\n\t\t\tГруппаБанан\r\n\t\t\tРеквизитЯ\r\n\t\t\tРеквизитА" + } + } +} diff --git a/tests/skills/check-inline-drift.mjs b/tests/skills/check-inline-drift.mjs index bfa8883c3..d270367e9 100644 --- a/tests/skills/check-inline-drift.mjs +++ b/tests/skills/check-inline-drift.mjs @@ -465,6 +465,14 @@ const FAMILIES = [ consumers: ['cf-edit', 'cfe-borrow', 'role-compile', 'xdto-compile'] }, ], }, + { + name: 'ChildObjects: виды с осмысленным порядком', + py: 'is_order_sensitive_type', ps1: 'Test-OrderSensitiveType', + variants: [ + { id: 'base', authority: 'meta-compile', + consumers: ['cf-edit', 'cfe-borrow', 'role-compile', 'xdto-compile'] }, + ], + }, { name: 'ChildObjects: порядок имён объектов', py: 'compare_metadata_names', ps1: 'Compare-MetadataNames',