diff --git a/.claude/skills/cf-edit/SKILL.md b/.claude/skills/cf-edit/SKILL.md index 679840ce6..1d01d34bd 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 по имени внутри вида. Без значения — все виды, кроме тех, где порядок несёт смысл (см. reference) | +| `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 02468eb5d..27f21b10a 100644 --- a/.claude/skills/cf-edit/reference.md +++ b/.claude/skills/cf-edit/reference.md @@ -49,9 +49,9 @@ Batch: `"Catalog.Товары ;; Document.Заказ ;; Enum.ВидыОплат" -Operation sort-childObjects -Value "Catalog ;; Role" ``` -Виды, где порядок несёт смысл, пропускаются, пока не названы явно: `CommonAttribute` (порядок разделителей задаёт порядок параметров сеанса), `Subsystem` и `CommandGroup` (порядок в панели), `Language` (порядок мультиязычных строк). +Не сортируются, пока вид не назван явно: `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 1d8666576..4edfd8a54 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.26 — Edit 1C configuration root (Configuration.xml) +# cf-edit v1.27 — Edit 1C configuration root (Configuration.xml) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills [CmdletBinding(PositionalBinding=$false)] param( @@ -551,12 +551,12 @@ function Sort-MetadataNames([string[]]$names) { return $out.ToArray() } -# Упорядочить по имени внутри вида. -# Без значения — все виды, кроме Subsystem (порядок подсистем в дереве задаёт порядок -# разделов в панели, пока их не перечислили в ); явно названный вид -# сортируется в любом случае. Взаимный порядок видов не трогаем: платформа приводит его -# к своему при первой же выгрузке. Переставляем ЗНАЧЕНИЯ узлов, а не сами узлы — отступы -# и структура файла остаются как были, меняются только имена в строках. +# Упорядочить : имена внутри вида, а без аргумента — и группы видов. +# Виды из Test-OrderSensitiveType по имени не сортируются, пока не названы явно. +# Вызов без значения дополнительно ставит группы видов в канонический порядок: платформа +# починила бы его только при загрузке-выгрузке, то есть неканоничный файл даёт диф на +# ровном месте. Переставляем ЗНАЧЕНИЯ узлов, а не сами узлы — отступы и структура файла +# остаются как были, в дифе только перестановка строк. function Do-SortChildObjects([string]$batchVal) { if (-not $script:childObjsEl) { Write-Error "No element found"; exit 1 } diff --git a/.claude/skills/cf-edit/scripts/cf-edit.py b/.claude/skills/cf-edit/scripts/cf-edit.py index a6bf8e7d6..ad2517e74 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.26 — Edit 1C configuration root (Configuration.xml) +# cf-edit v1.27 — Edit 1C configuration root (Configuration.xml) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -855,13 +855,13 @@ def main(): info(f"Added: {type_name}.{obj_name_val}") def do_sort_child_objects(batch_val): - """Упорядочить по имени внутри вида. + """Упорядочить : имена внутри вида, а без аргумента — и группы видов. - Без значения — все виды, кроме Subsystem (порядок подсистем в дереве задаёт порядок - разделов в панели, пока их не перечислили в ); явно названный вид - сортируется в любом случае. Взаимный порядок видов не трогаем: платформа приводит его - к своему при первой же выгрузке. Переставляем ЗНАЧЕНИЯ узлов, а не сами узлы — - отступы и структура файла остаются как были, меняются только имена в строках. + Виды из is_order_sensitive_type по имени не сортируются, пока не названы явно. + Вызов без значения дополнительно ставит группы видов в канонический порядок: платформа + починила бы его только при загрузке-выгрузке, то есть неканоничный файл даёт диф на + ровном месте. Переставляем ЗНАЧЕНИЯ узлов, а не сами узлы — отступы и структура файла + остаются как были, в дифе только перестановка строк. """ nonlocal modify_count if child_objs_el is None: diff --git a/docs/v8-project-guide.md b/docs/v8-project-guide.md index 7a37489d6..8bf49c4bd 100644 --- a/docs/v8-project-guide.md +++ b/docs/v8-project-guide.md @@ -163,13 +163,13 @@ **Порядок имён** — как в дереве Конфигуратора: регистр не учитывается, подчёркивание раньше цифр, цифры раньше букв, латиница раньше кириллицы, `ё` на месте `е`. Сравнение реализовано ключом «ранг+символ», а не культурными таблицами ОС, поэтому PowerShell- и Python-порты дают одинаковый результат на любой платформе. -**Четыре вида поле не затрагивает** — они всегда дописываются в конец, и массовая сортировка их тоже пропускает. Упорядочить их можно, только назвав вид явно. +**Четыре вида поле не затрагивает** — новый объект просто дописывается в конец своей группы, и массовая сортировка их имена тоже не трогает. Положения самой группы это не касается: она всегда встаёт в канонический порядок видов. Упорядочить их можно, только назвав вид явно. - `CommonAttribute` — исключение самого стандарта: у общих реквизитов-разделителей порядок в дереве задаёт порядок установки параметров сеанса. - `Subsystem` и `CommandGroup` — пока они не перечислены в `` / `` файла `Ext/CommandInterface.xml`, порядок в дереве задаёт порядок в интерфейсе, а платформа эти списки сама не заводит: в выгрузке ACC вне `GroupsOrder` 15 живых групп из 39, а `SubsystemsOrder` не появляется, пока интерфейс не настроен руками. - `Language` — порядок языков задаёт порядок `` в мультиязычных строках по всей выгрузке. -**Что поле не делает.** Оно влияет только на новые записи и не приводит в порядок уже накопленное — для этого есть `/cf-edit -Operation sort-childObjects` (без значения он заодно ставит группы видов в канонический порядок). `byName` к тому же предполагает, что список уже упорядочен: объект встаёт перед первым объектом своего вида, чьё имя больше. Взаимный порядок групп видов навыки не меняют вовсе: платформа приводит его к своему при первой же выгрузке. +**Что поле не делает.** Оно влияет только на новые записи и не приводит в порядок уже накопленное — для этого есть `/cf-edit -Operation sort-childObjects` (без значения он заодно ставит группы видов в канонический порядок). `byName` к тому же предполагает, что список уже упорядочен: объект встаёт перед первым объектом своего вида, чьё имя больше. **Объекты с префиксом `Удалить`** стандарт разрешает держать в конце ветки. Навыки их не выделяют и ставят по алфавиту — это стандарту не противоречит, и типовые конфигурации поступают так же (в ACC 360 таких объектов из 373 стоят по алфавиту, а не в хвосте).