diff --git a/docs/subsystem-guide.md b/docs/subsystem-guide.md new file mode 100644 index 00000000..850cdd1c --- /dev/null +++ b/docs/subsystem-guide.md @@ -0,0 +1,205 @@ +# Подсистемы и командный интерфейс + +Навыки групп `/subsystem-*` и `/interface-*` позволяют анализировать, создавать, редактировать и проверять подсистемы 1С и их командный интерфейс — XML-файлы Subsystem и CommandInterface.xml из выгрузки конфигурации. + +## Навыки + +| Навык | Параметры | Описание | +|-------|-----------|----------| +| `/subsystem-info` | ` [-Mode] [-Name]` | Анализ структуры подсистемы: состав, дочерние, CI, дерево иерархии (4 режима) | +| `/subsystem-compile` | ` [-Parent]` | Генерация подсистемы из JSON DSL: XML + регистрация в Configuration.xml | +| `/subsystem-edit` | ` -Operation -Value ""` | Точечное редактирование: 5 операций (add/remove content/child, set-property) | +| `/subsystem-validate` | ` [-MaxErrors 30]` | Валидация структурной корректности: 13 проверок | +| `/interface-edit` | ` -Operation -Value ""` | Настройка CommandInterface.xml: 6 операций (hide/show/place/order) | +| `/interface-validate` | ` [-MaxErrors 30]` | Валидация CommandInterface.xml: 13 проверок | + +## Рабочий цикл + +``` +Описание раздела (текст) → JSON DSL → /subsystem-compile → XML → /subsystem-validate + ↕ /subsystem-edit → /subsystem-info + /interface-edit → CommandInterface.xml → /interface-validate +``` + +1. Claude формирует JSON-определение подсистемы (имя, состав, дочерние, картинка) +2. `/subsystem-compile` генерирует XML-файл подсистемы и регистрирует в Configuration.xml +3. `/subsystem-edit` вносит точечные изменения: добавление объектов, дочерних подсистем, изменение свойств +4. `/interface-edit` настраивает командный интерфейс: скрытие/показ команд, размещение в группах, порядок +5. `/subsystem-validate` и `/interface-validate` проверяют корректность XML +6. `/subsystem-info` выводит компактную сводку для визуальной проверки + +## JSON DSL — формат подсистемы + +Подсистемы описываются в JSON: + +### Минимальный пример + +```json +{ + "name": "Тест" +} +``` + +Умолчания: `includeInCommandInterface = true`, `useOneCommand = false`, synonym генерируется из name. + +### Полный пример + +```json +{ + "name": "Продажи", + "synonym": "Продажи", + "comment": "", + "includeInCommandInterface": true, + "useOneCommand": false, + "explanation": "Управление продажами и взаимодействием с клиентами", + "picture": "CommonPicture.Продажи", + "content": ["Catalog.Товары", "Document.Заказ", "Report.Продажи"], + "children": ["Настройки", "Отчёты"] +} +``` + +### Свойства + +| Свойство | Тип | Умолчание | Описание | +|----------|-----|-----------|----------| +| `name` | string | *(обязательно)* | Идентификатор подсистемы | +| `synonym` | string | из name | Отображаемое имя | +| `comment` | string | `""` | Комментарий | +| `includeInCommandInterface` | bool | `true` | Включать в командный интерфейс | +| `useOneCommand` | bool | `false` | Режим одной команды (требует ровно 1 элемент в content) | +| `explanation` | string | `""` | Описание раздела (подсказка) | +| `picture` | string | — | Ссылка на общую картинку (`CommonPicture.Имя`) | +| `content` | string[] | `[]` | Состав: `"Тип.Имя"` (Catalog.X, Document.Y, Report.Z, ...) | +| `children` | string[] | `[]` | Имена дочерних подсистем | + +## Командный интерфейс — операции + +Навык `/interface-edit` управляет файлом `CommandInterface.xml` подсистемы. + +### Форматы ссылок на команды + +| Формат | Пример | +|--------|--------| +| StandardCommand | `Catalog.Товары.StandardCommand.OpenList` | +| Command | `Report.Продажи.Command.Отчёт` | +| CommonCommand | `CommonCommand.МояКоманда` | + +### Операции + +| Операция | Значение | Описание | +|----------|----------|----------| +| `hide` | `"Cmd.Name"` или массив | Скрыть команду (CommandsVisibility, false) | +| `show` | `"Cmd.Name"` или массив | Показать команду (CommandsVisibility, true) | +| `place` | `{"command":"...","group":"CommandGroup.X"}` | Разместить команду в группе | +| `order` | `{"group":"...","commands":[...]}` | Задать порядок команд в группе | +| `subsystem-order` | `["Subsystem.X.Subsystem.A",...]` | Порядок дочерних подсистем | +| `group-order` | `["NavigationPanelOrdinary",...]` | Порядок групп | + +### Примеры + +```powershell +# Скрыть команду +... -CIPath Subsystems/Продажи/Ext/CommandInterface.xml -Operation hide -Value "Catalog.Товары.StandardCommand.OpenList" + +# Показать команду +... -Operation show -Value "Report.Продажи.Command.Отчёт" + +# Разместить в группе +... -Operation place -Value '{"command":"Report.X.Command.Y","group":"CommandGroup.Отчеты"}' + +# Задать порядок подсистем +... -Operation subsystem-order -Value '["Subsystem.X.Subsystem.A","Subsystem.X.Subsystem.B"]' +``` + +## Сценарии использования + +### Анализ структуры подсистем + +``` +> Покажи дерево подсистем конфигурации +``` + +Claude вызовет `/subsystem-info` (tree → overview → ci) и опишет: +- иерархию подсистем с маркерами [CI], [OneCmd], [Скрыт] +- состав каждой подсистемы (объекты по типам) +- настройки командного интерфейса (видимость, размещение, порядок) + +### Создание подсистемы по описанию + +``` +> Создай подсистему Продажи: справочник Товары, документ Заказ, отчёт Продажи. +> Дочерние подсистемы: Настройки, Отчёты. Картинка — CommonPicture.Продажи. +``` + +Claude сформирует JSON: +```json +{ + "name": "Продажи", + "synonym": "Продажи", + "content": ["Catalog.Товары", "Document.Заказ", "Report.Продажи"], + "children": ["Настройки", "Отчёты"], + "picture": "CommonPicture.Продажи" +} +``` + +И вызовет `/subsystem-compile` → `/subsystem-validate` → `/subsystem-info`. + +### Добавление объектов в подсистему + +``` +> Добавь Document.Счёт и Report.Задолженность в подсистему Продажи +``` + +Claude вызовет `/subsystem-edit` с операцией `add-content`: +```powershell +... -SubsystemPath Subsystems/Продажи.xml -Operation add-content -Value '["Document.Счёт","Report.Задолженность"]' +``` + +### Настройка командного интерфейса + +``` +> Скрой команду открытия списка товаров и размести отчёт Продажи в группе Отчёты +``` + +Claude вызовет `/interface-edit`: +```powershell +# Скрыть команду +... -CIPath Subsystems/Продажи/Ext/CommandInterface.xml -Operation hide -Value "Catalog.Товары.StandardCommand.OpenList" + +# Разместить в группе +... -Operation place -Value '{"command":"Report.Продажи.Command.Отчёт","group":"CommandGroup.Отчёты"}' +``` + +### Проверка подсистемы + +``` +> Проверь подсистему Subsystems/Продажи.xml +``` + +Claude вызовет `/subsystem-validate` и `/interface-validate`, покажет результат: ошибки (невалидный XML, отсутствующие файлы, дубликаты) и предупреждения. + +## Структура файлов подсистемы + +``` +Subsystems/ +├── ИмяПодсистемы.xml # Определение подсистемы (UUID, свойства, Content) +└── ИмяПодсистемы/ + ├── Ext/ + │ └── CommandInterface.xml # Командный интерфейс (видимость, размещение, порядок) + └── Subsystems/ # Вложенные подсистемы + ├── Дочерняя.xml + └── Дочерняя/ + └── Ext/ + └── CommandInterface.xml +``` + +Регистрация в `Configuration.xml`: +```xml + + ИмяПодсистемы + +``` + +## Спецификация + +- [1c-subsystem-spec.md](1c-subsystem-spec.md) — XML-формат подсистем, CommandInterface.xml, namespace, элементы