docs(cf-edit): убрать обоснования исключений из инструкции навыка

В справочнике операции при каждом исключённом виде стояла причина: «порядок
разделителей задаёт порядок параметров сеанса», «порядок в панели», «порядок
мультиязычных строк». Позицию вставки выбирает проект, а не модель, — в инструкции
навыка этому места нет. К тому же документальное основание есть только у
CommonAttribute (исключение самого стандарта), остальные три — наш вывод из замеров,
и подавать его как факт тем более не следовало. Осталось перечисление видов.

Заодно сняты два утверждения, которые предыдущая правка сделала ложными: «взаимный
порядок групп видов навыки не меняют вовсе» в гайде и та же фраза в докстрингах обоих
портов — рядом с реализацией, которая ровно это и делает. Формулировка про четыре вида
в гайде уточнена: не сортируются их ИМЕНА, положение самой группы канонично всегда.

Обоснования остаются в docs/v8-project-guide.md, где решение принимает человек.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QoAJmoNbgWKobA7JGgN5S3
This commit is contained in:
Nick Shirokov
2026-08-30 14:05:47 +03:00
co-authored by Claude Opus 5
parent 989b3490bc
commit e48599164e
5 changed files with 19 additions and 19 deletions
+1 -1
View File
@@ -34,7 +34,7 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/cf-edit.ps1" -Confi
| `modify-property` | `Ключ=Значение` (batch `;;`) | Изменить свойство | | `modify-property` | `Ключ=Значение` (batch `;;`) | Изменить свойство |
| `add-childObject` | `Type.Name` (batch `;;`) | Зарегистрировать уже существующий файл объекта в ChildObjects. Для создания нового объекта используй `/meta-compile`, `/role-compile`, `/subsystem-compile` — они регистрируют автоматически | | `add-childObject` | `Type.Name` (batch `;;`) | Зарегистрировать уже существующий файл объекта в ChildObjects. Для создания нового объекта используй `/meta-compile`, `/role-compile`, `/subsystem-compile` — они регистрируют автоматически |
| `remove-childObject` | `Type.Name` (batch `;;`) | Удалить объект из ChildObjects | | `remove-childObject` | `Type.Name` (batch `;;`) | Удалить объект из ChildObjects |
| `sort-childObjects` | вид, напр. `Catalog` (batch `;;`), либо пусто | Упорядочить ChildObjects по имени внутри вида. Без значения — все виды, кроме тех, где порядок несёт смысл (см. reference) | | `sort-childObjects` | вид, напр. `Catalog` (batch `;;`), либо пусто | Упорядочить ChildObjects по имени внутри вида. Без значения — все виды, кроме четырёх (см. reference) |
| `add-defaultRole` | `Role.Name` или `Name` | Добавить роль по умолчанию | | `add-defaultRole` | `Role.Name` или `Name` | Добавить роль по умолчанию |
| `remove-defaultRole` | `Role.Name` или `Name` | Удалить роль по умолчанию | | `remove-defaultRole` | `Role.Name` или `Name` | Удалить роль по умолчанию |
| `set-defaultRoles` | Имена через `;;` | Заменить список ролей по умолчанию | | `set-defaultRoles` | Имена через `;;` | Заменить список ролей по умолчанию |
+2 -2
View File
@@ -49,9 +49,9 @@ Batch: `"Catalog.Товары ;; Document.Заказ ;; Enum.ВидыОплат"
-Operation sort-childObjects -Value "Catalog ;; Role" -Operation sort-childObjects -Value "Catalog ;; Role"
``` ```
Виды, где порядок несёт смысл, пропускаются, пока не названы явно: `CommonAttribute` (порядок разделителей задаёт порядок параметров сеанса), `Subsystem` и `CommandGroup` (порядок в панели), `Language` (порядок мультиязычных строк). Не сортируются, пока вид не назван явно: `CommonAttribute`, `Subsystem`, `CommandGroup`, `Language`.
Вызов **без значения** дополнительно ставит сами группы видов в канонический порядок — тот, в котором их пишет платформа. Вызов с явным видом этого не делает: он трогает только имена внутри названного вида. Вызов без значения дополнительно ставит группы видов в канонический порядок; вызов с явным видом трогает только имена внутри него.
## add-defaultRole / remove-defaultRole / set-defaultRoles ## add-defaultRole / remove-defaultRole / set-defaultRoles
+7 -7
View File
@@ -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 # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)] [CmdletBinding(PositionalBinding=$false)]
param( param(
@@ -551,12 +551,12 @@ function Sort-MetadataNames([string[]]$names) {
return $out.ToArray() return $out.ToArray()
} }
# Упорядочить <ChildObjects> по имени внутри вида. # Упорядочить <ChildObjects>: имена внутри вида, а без аргумента — и группы видов.
# Без значения — все виды, кроме Subsystem (порядок подсистем в дереве задаёт порядок # Виды из Test-OrderSensitiveType по имени не сортируются, пока не названы явно.
# разделов в панели, пока их не перечислили в <SubsystemsOrder>); явно названный вид # Вызов без значения дополнительно ставит группы видов в канонический порядок: платформа
# сортируется в любом случае. Взаимный порядок видов не трогаем: платформа приводит его # починила бы его только при загрузке-выгрузке, то есть неканоничный файл даёт диф на
# к своему при первой же выгрузке. Переставляем ЗНАЧЕНИЯ узлов, а не сами узлы — отступы # ровном месте. Переставляем ЗНАЧЕНИЯ узлов, а не сами узлы — отступы и структура файла
# и структура файла остаются как были, меняются только имена в строках. # остаются как были, в дифе только перестановка строк.
function Do-SortChildObjects([string]$batchVal) { function Do-SortChildObjects([string]$batchVal) {
if (-not $script:childObjsEl) { Write-Error "No <ChildObjects> element found"; exit 1 } if (-not $script:childObjsEl) { Write-Error "No <ChildObjects> element found"; exit 1 }
+7 -7
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env python3 #!/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 # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse import argparse
@@ -855,13 +855,13 @@ def main():
info(f"Added: {type_name}.{obj_name_val}") info(f"Added: {type_name}.{obj_name_val}")
def do_sort_child_objects(batch_val): def do_sort_child_objects(batch_val):
"""Упорядочить <ChildObjects> по имени внутри вида. """Упорядочить <ChildObjects>: имена внутри вида, а без аргумента — и группы видов.
Без значения — все виды, кроме Subsystem (порядок подсистем в дереве задаёт порядок Виды из is_order_sensitive_type по имени не сортируются, пока не названы явно.
разделов в панели, пока их не перечислили в <SubsystemsOrder>); явно названный вид Вызов без значения дополнительно ставит группы видов в канонический порядок: платформа
сортируется в любом случае. Взаимный порядок видов не трогаем: платформа приводит его починила бы его только при загрузке-выгрузке, то есть неканоничный файл даёт диф на
к своему при первой же выгрузке. Переставляем ЗНАЧЕНИЯ узлов, а не сами узлы — ровном месте. Переставляем ЗНАЧЕНИЯ узлов, а не сами узлы — отступы и структура файла
отступы и структура файла остаются как были, меняются только имена в строках. остаются как были, в дифе только перестановка строк.
""" """
nonlocal modify_count nonlocal modify_count
if child_objs_el is None: if child_objs_el is None:
+2 -2
View File
@@ -163,13 +163,13 @@
**Порядок имён** — как в дереве Конфигуратора: регистр не учитывается, подчёркивание раньше цифр, цифры раньше букв, латиница раньше кириллицы, `ё` на месте `е`. Сравнение реализовано ключом «ранг+символ», а не культурными таблицами ОС, поэтому PowerShell- и Python-порты дают одинаковый результат на любой платформе. **Порядок имён** — как в дереве Конфигуратора: регистр не учитывается, подчёркивание раньше цифр, цифры раньше букв, латиница раньше кириллицы, `ё` на месте `е`. Сравнение реализовано ключом «ранг+символ», а не культурными таблицами ОС, поэтому PowerShell- и Python-порты дают одинаковый результат на любой платформе.
**Четыре вида поле не затрагивает**они всегда дописываются в конец, и массовая сортировка их тоже пропускает. Упорядочить их можно, только назвав вид явно. **Четыре вида поле не затрагивает**новый объект просто дописывается в конец своей группы, и массовая сортировка их имена тоже не трогает. Положения самой группы это не касается: она всегда встаёт в канонический порядок видов. Упорядочить их можно, только назвав вид явно.
- `CommonAttribute` — исключение самого стандарта: у общих реквизитов-разделителей порядок в дереве задаёт порядок установки параметров сеанса. - `CommonAttribute` — исключение самого стандарта: у общих реквизитов-разделителей порядок в дереве задаёт порядок установки параметров сеанса.
- `Subsystem` и `CommandGroup` — пока они не перечислены в `<SubsystemsOrder>` / `<GroupsOrder>` файла `Ext/CommandInterface.xml`, порядок в дереве задаёт порядок в интерфейсе, а платформа эти списки сама не заводит: в выгрузке ACC вне `GroupsOrder` 15 живых групп из 39, а `SubsystemsOrder` не появляется, пока интерфейс не настроен руками. - `Subsystem` и `CommandGroup` — пока они не перечислены в `<SubsystemsOrder>` / `<GroupsOrder>` файла `Ext/CommandInterface.xml`, порядок в дереве задаёт порядок в интерфейсе, а платформа эти списки сама не заводит: в выгрузке ACC вне `GroupsOrder` 15 живых групп из 39, а `SubsystemsOrder` не появляется, пока интерфейс не настроен руками.
- `Language` — порядок языков задаёт порядок `<v8:item>` в мультиязычных строках по всей выгрузке. - `Language` — порядок языков задаёт порядок `<v8:item>` в мультиязычных строках по всей выгрузке.
**Что поле не делает.** Оно влияет только на новые записи и не приводит в порядок уже накопленное — для этого есть `/cf-edit -Operation sort-childObjects` (без значения он заодно ставит группы видов в канонический порядок). `byName` к тому же предполагает, что список уже упорядочен: объект встаёт перед первым объектом своего вида, чьё имя больше. Взаимный порядок групп видов навыки не меняют вовсе: платформа приводит его к своему при первой же выгрузке. **Что поле не делает.** Оно влияет только на новые записи и не приводит в порядок уже накопленное — для этого есть `/cf-edit -Operation sort-childObjects` (без значения он заодно ставит группы видов в канонический порядок). `byName` к тому же предполагает, что список уже упорядочен: объект встаёт перед первым объектом своего вида, чьё имя больше.
**Объекты с префиксом `Удалить`** стандарт разрешает держать в конце ветки. Навыки их не выделяют и ставят по алфавиту — это стандарту не противоречит, и типовые конфигурации поступают так же (в ACC 360 таких объектов из 373 стоят по алфавиту, а не в хвосте). **Объекты с префиксом `Удалить`** стандарт разрешает держать в конце ветки. Навыки их не выделяют и ставят по алфавиту — это стандарту не противоречит, и типовые конфигурации поступают так же (в ACC 360 таких объектов из 373 стоят по алфавиту, а не в хвосте).