Files
cc-1c-skills/.claude/skills/cf-edit/reference.md
T
c7b0dce151 feat(skills): порядок объектов метаданных в ChildObjects
Навыки-создатели дописывали новый объект в конец группы своего вида, а стандарт
требует порядка по имени (АПК:1108). Замеры на 8 боевых выгрузках: 103 385 объектов
лежат по алфавиту, нарушают его ровно дописки в хвост. Стенд подтвердил, что
беспорядок вечен: платформа нормализует порядок ВИДОВ (возвращает канонический),
но порядок имён внутри вида не трогает.

Настройка newObjectPosition в .v8-project.json (end по умолчанию | byName) —
решение проекта, а не вызова: читают её meta-compile, role-compile, xdto-compile,
cfe-borrow и cf-edit add-childObject. Компаратор при этом константа, моделирующая
дерево Конфигуратора: ключ «ранг+символ» без культурных таблиц, одинаковый в обоих
портах на любой ОС. На корпусе он даёт 4 нарушения на 125 088 пар против 2866 у
ordinal-сравнения, которым cf-edit и cfe-borrow сортировали до сих пор.

Subsystem не упорядочивается автоматически нигде: пока подсистемы не перечислены
в <SubsystemsOrder>, порядок дерева задаёт порядок разделов в панели, а платформа
этот список сама не заводит.

Настройка не чинит накопленное, поэтому cf-edit получил операцию sort-childObjects
(вся конфигурация или названные виды). Она переставляет значения узлов, а не узлы,
поэтому диф — чистая перестановка строк. Имя вида принимается в любом регистре,
во множественном числе и по-русски; неизвестный вид — отказ со списком допустимых.

Попутно:
- PS-порты создателей переведены с DOM-сериализации на текстовую вставку: на
  выгрузке не в каноне Конфигуратора они переписывали заголовок без просьбы;
- PS-сторона семьи detect_xml_style/finalize_xml_bytes закрыта в cf-edit и
  cfe-borrow — правка чужого файла наследует его BOM/EOL/заголовок;
- xdto-compile присоединён к семье Register-InChildObjects вместо инлайн-копии;
- закрыт ложный успех в py subsystem-compile: <ChildObjects /> с пробелом ET
  разбирает, а текстовые ветки не находили — файл писался без вставки;
- cfe-borrow py не импортировал json, из-за чего резолвер молча возвращал end;
- cf-edit add-childObject ставил объект в конец блока, за пределы своей группы,
  когда видов старше в файле не было.

Проверки: 906/906 на PowerShell и 903/906 на Python, 10 гардов, верификация
эталонов платформой без падений, раундтрип отсортированной конфигурации на
8.3.24 и 8.3.27, сортировка боевой выгрузки ACC (1,4 МБ) и расширения из корпуса.

Задачу принёс PR #85; часть кода взята оттуда.

Co-Authored-By: Sergei Pleshanov <72200277+Abacadabras@users.noreply.github.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QoAJmoNbgWKobA7JGgN5S3
2026-08-29 17:34:09 +03:00

7.8 KiB
Raw Blame History

cf-edit — справочник операций

modify-property

Свойства для редактирования:

Скалярные

Name, Version, Vendor, Comment, NamePrefix, UpdateCatalogAddress

LocalString (многоязычные)

Synonym, BriefInformation, DetailedInformation, Copyright, VendorInformationAddress, ConfigurationInformationAddress

Enum

Свойство Допустимые значения
CompatibilityMode Version8_3_20 ... Version8_3_28, Version8_5_1, DontUse
ConfigurationExtensionCompatibilityMode то же
DefaultRunMode ManagedApplication, OrdinaryApplication, Auto
ScriptVariant Russian, English
DataLockControlMode Managed, Automatic, AutomaticAndManaged
ObjectAutonumerationMode NotAutoFree, AutoFree
ModalityUseMode DontUse, Use, UseWithWarnings
SynchronousPlatformExtensionAndAddInCallUseMode DontUse, Use, UseWithWarnings
InterfaceCompatibilityMode Version8_2, Version8_2EnableTaxi, Taxi, TaxiEnableVersion8_2, TaxiEnableVersion8_5, Version8_5EnableTaxi, Version8_5
DatabaseTablespacesUseMode DontUse, Use
MainClientApplicationWindowMode Normal, Fullscreen, Kiosk

Ref

DefaultLanguage — значение вида Language.Русский

Формат batch

"Version=1.0.0.1 ;; Vendor=Фирма 1С ;; Synonym=Тестовая конфигурация"

add-childObject / remove-childObject

Формат: Type.Name — XML-тип и имя объекта через точку.

Важно про add-childObject: регистрирует в <ChildObjects> объект, файл которого уже существует на диске. Если файла нет — exit 1. Для создания нового объекта используй профильный навык — /meta-compile (Catalog, Document, Enum, Report, регистры и т.д.), /role-compile (Role), /subsystem-compile (Subsystem). Они создают файл И регистрируют его за один вызов.

Batch: "Catalog.Товары ;; Document.Заказ ;; Enum.ВидыОплат"

sort-childObjects

Упорядочивает объекты в <ChildObjects> по имени внутри вида. Значение — имя вида (Catalog, Role, …), batch через ;;. Без значения обрабатываются все виды, какие есть в файле.

-Operation sort-childObjects                       — все виды, кроме Subsystem
-Operation sort-childObjects -Value "Catalog"       — только справочники
-Operation sort-childObjects -Value "Catalog ;; Role"

Subsystem пропускается, пока вид не назван явно (-Value "Subsystem"): сортировка подсистем меняет порядок разделов в панели.

add-defaultRole / remove-defaultRole / set-defaultRoles

Имя роли: ПолныеПрава или Role.ПолныеПрава (префикс Role. добавляется автоматически).

set-defaultRoles полностью заменяет список ролей.

set-panels

Перезаписывает Ext/ClientApplicationInterface.xml — раскладку панелей рабочего пространства Taxi. Файл создаётся с нуля; то, что не упомянуто в value, отсутствует на экране.

value — объект с ключами top, left, right, bottom. Каждый ключ — массив записей. Ключ можно опустить (= пустая сторона).

Запись — одна из:

  • Строка-алиас (одна панель в этом слоте)
  • Объект {"group": [...]} (стек: панели/подгруппы внутри располагаются друг под другом)

Алиасы панелей:

Алиас Панель
sections Панель разделов
open Панель открытых
favorites Панель избранного
history Панель истории
functions Панель функций текущего раздела

Семантика:

  • Несколько записей в одной стороне → отдельные слоты «рядом» (несколько тегов <top>/...)
  • {"group":[...]} → один тег с <group>-обёрткой, элементы внутри идут стеком

Пример (DefinitionFile):

[
  {
    "operation": "set-panels",
    "value": {
      "top":    ["open"],
      "left":   ["sections"],
      "right":  [{ "group": ["favorites", "history"] }],
      "bottom": ["functions"]
    }
  }
]

Через -Value (CLI): передай объект как JSON-строку — ... -Operation set-panels -Value '{"top":["open"]}'.

set-home-page

Перезаписывает Ext/HomePageWorkArea.xml — раскладка форм на начальной странице (рабочая область). Файл создаётся с нуля; то, что не упомянуто в value, отсутствует.

value — объект:

Ключ Канонич. (XML) Описание
template WorkingAreaTemplate OneColumn / TwoColumnsEqualWidth (дефолт) / TwoColumnsVariableWidth
left LeftColumn массив записей форм
right RightColumn массив записей форм (запрещён при OneColumn)

Принимаются и короткие и канонич. ключи (XML-имена) — оба работают.

Запись формы — одна из:

  • Строка "<form>" — только имя формы, дефолты height=10, visibility=true
  • Объект {form, height?, visibility?, roles?}
Поле Канонич. Дефолт Описание
form Form CommonForm.X или Type.Object.Form.Name (или UUID)
height Height 10 Высота
visibility Visibility true Общая видимость (<xr:Common>)
roles `{"Role.Имя": true

Семантика visibility: visibility = общее правило, roles — точечные исключения. Скрыть для всех кроме одной роли: {"visibility": false, "roles": {"Role.Опер": true}}.

Пример:

[
  {
    "operation": "set-home-page",
    "value": {
      "template": "TwoColumnsVariableWidth",
      "left": [
        "CommonForm.НачалоРаботы",
        { "form": "CommonForm.СписокЗадач", "height": 100, "visibility": false },
        { "form": "Catalog.Контрагенты.Form.ФормаСписка", "height": 50 },
        {
          "form": "CommonForm.РабочийСтолОператора",
          "visibility": false,
          "roles": { "Role.Оператор": true, "Role.ПолныеПрава": false }
        }
      ],
      "right": [
        { "form": "DataProcessor.Поиск.Form.ФормаПоиска", "height": 30 }
      ]
    }
  }
]

DefinitionFile (JSON)

[
  { "operation": "modify-property", "value": "Version=2.0.0.1 ;; Vendor=Test" },
  { "operation": "add-childObject", "value": "Catalog.Товары ;; Document.Заказ" },
  { "operation": "add-defaultRole", "value": "ПолныеПрава" }
]