Add CommandGroup, CommonCommand and object command specs to subsystem spec

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-02-14 18:35:13 +03:00
co-authored by Claude Opus 4.6
parent fff77d97ca
commit 9cfb62c5b1
+372 -14
View File
@@ -37,7 +37,30 @@ Subsystems/
- Вложенные подсистемы хранятся в `<Имя>/Subsystems/` — рекурсивно повторяя ту же структуру - Вложенные подсистемы хранятся в `<Имя>/Subsystems/` — рекурсивно повторяя ту же структуру
- Глубина вложенности не ограничена (на практике до 3–4 уровней) - Глубина вложенности не ограничена (на практике до 3–4 уровней)
### 1.2. Командный интерфейс конфигурации (корневой) ### 1.2. Группы команд (CommandGroups)
```
CommandGroups/
├── Документы.xml
├── Отчеты.xml
├── Печать.xml
└── ...
```
Плоская структура — только XML-файлы, без подкаталогов.
### 1.3. Общие команды (CommonCommands)
```
CommonCommands/
├── АнализСчета.xml # Метаданные
├── АнализСчета/
│ └── Ext/
│ └── CommandModule.bsl # Модуль команды
└── ...
```
### 1.4. Командный интерфейс конфигурации (корневой)
``` ```
Ext/ Ext/
@@ -426,11 +449,346 @@ Ext/
--- ---
## 5. Формат ссылок на команды ## 5. Формат группы команд (CommandGroup)
### 5.1. Структура каталогов
```
CommandGroups/
├── Документы.xml
├── Отчеты.xml
├── Печать.xml
├── Настройки.xml
└── ...
```
Плоская структура — только XML-файлы, без подкаталогов и модулей.
### 5.2. Общая структура XML
```xml
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="..." version="2.17">
<CommandGroup uuid="<UUID>">
<Properties>
<Name>Документы</Name>
<Synonym>...</Synonym>
<Comment/>
<Representation>Auto</Representation>
<ToolTip>...</ToolTip>
<Picture>...</Picture>
<Category>ActionsPanel</Category>
</Properties>
</CommandGroup>
</MetaDataObject>
```
### 5.3. Свойства (Properties)
| Свойство | Тип | Обязательно | Описание |
|---|---|---|---|
| `Name` | string | да | Программное имя (CamelCase) |
| `Synonym` | LocalString | да | Отображаемое имя |
| `Comment` | string | да | Комментарий. Обычно пустой тег |
| `Representation` | enum | да | Способ отображения |
| `ToolTip` | LocalString | да | Подсказка. Пустой тег если не задана |
| `Picture` | Picture | да | Иконка. Пустой тег если не задана |
| `Category` | enum | да | Категория размещения |
#### Representation
| Значение | Описание |
|---|---|
| `Auto` | По умолчанию (наиболее частое) |
| `Picture` | Только картинка |
| `PictureAndText` | Картинка с текстом |
#### Category
| Значение | Описание |
|---|---|
| `ActionsPanel` | Панель действий (главное меню раздела) |
| `FormCommandBar` | Командная панель формы |
| `NavigationPanel` | Панель навигации |
#### Picture (расширенный формат)
```xml
<Picture>
<xr:Ref>StdPicture.Print</xr:Ref>
<xr:LoadTransparent>true</xr:LoadTransparent>
<xr:TransparentPixel x="7" y="5"/> <!-- опционально -->
</Picture>
```
- `xr:Ref` — ссылка на картинку: `StdPicture.<Имя>`, `CommonPicture.<Имя>`, или `0` (числовая ссылка)
- `xr:LoadTransparent` — загружать с прозрачностью
- `xr:TransparentPixel` — координаты прозрачного пикселя (опционально)
### 5.4. Пример: минимальная группа
```xml
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="..." version="2.17">
<CommandGroup uuid="774911fc-5b94-4ac7-8923-fd317727c671">
<Properties>
<Name>Документы</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Документы</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Representation>Auto</Representation>
<ToolTip/>
<Picture/>
<Category>ActionsPanel</Category>
</Properties>
</CommandGroup>
</MetaDataObject>
```
### 5.5. Пример: группа с картинкой и подсказкой
```xml
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="..." version="2.17">
<CommandGroup uuid="ac39b903-0c60-417e-a50f-49ed375424f5">
<Properties>
<Name>Печать</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Печать</v8:content>
</v8:item>
</Synonym>
<Comment>Печать</Comment>
<Representation>Auto</Representation>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Печать</v8:content>
</v8:item>
</ToolTip>
<Picture>
<xr:Ref>StdPicture.Print</xr:Ref>
<xr:LoadTransparent>true</xr:LoadTransparent>
</Picture>
<Category>FormCommandBar</Category>
</Properties>
</CommandGroup>
</MetaDataObject>
```
---
## 6. Формат общей команды (CommonCommand)
### 6.1. Структура каталогов
```
CommonCommands/
├── АнализСчета.xml # Метаданные команды
├── АнализСчета/
│ └── Ext/
│ └── CommandModule.bsl # Модуль команды
├── НастройкиСинхронизации.xml
├── НастройкиСинхронизации/
│ └── Ext/
│ └── CommandModule.bsl
└── ...
```
Каждая команда состоит из:
- `<Имя>.xml` — определение метаданных (обязательно)
- `<Имя>/Ext/CommandModule.bsl` — модуль реализации (обязательно)
### 6.2. Общая структура XML
```xml
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="..." version="2.17">
<CommonCommand uuid="<UUID>">
<Properties>
<Name>АнализСчета</Name>
<Synonym>...</Synonym>
<Comment/>
<Group>NavigationPanelOrdinary</Group>
<Representation>Auto</Representation>
<ToolTip>...</ToolTip>
<Picture/>
<Shortcut/>
<IncludeHelpInContents>false</IncludeHelpInContents>
<CommandParameterType/>
<ParameterUseMode>Single</ParameterUseMode>
<ModifiesData>false</ModifiesData>
<OnMainServerUnavalableBehavior>Auto</OnMainServerUnavalableBehavior>
</Properties>
</CommonCommand>
</MetaDataObject>
```
### 6.3. Свойства (Properties)
| Свойство | Тип | Обязательно | Описание |
|---|---|---|---|
| `Name` | string | да | Программное имя |
| `Synonym` | LocalString | да | Отображаемое имя |
| `Comment` | string | да | Комментарий |
| `Group` | string | да | Группа размещения команды |
| `Representation` | enum | да | Способ отображения: `Auto`, `PictureAndText` |
| `ToolTip` | LocalString | да | Подсказка |
| `Picture` | Picture | да | Иконка |
| `Shortcut` | string | да | Сочетание клавиш. Пример: `F11`. Пустой тег если нет |
| `IncludeHelpInContents` | bool | да | Включать в содержание справки |
| `CommandParameterType` | TypeList | да | Типы параметра команды |
| `ParameterUseMode` | enum | да | Режим использования параметра: `Single` или `Multiple` |
| `ModifiesData` | bool | да | Модифицирует данные |
| `OnMainServerUnavalableBehavior` | enum | да | Поведение при недоступности сервера: `Auto` |
#### Group — стандартные группы размещения
Команда размещается в одной из групп:
**Панель навигации раздела:**
- `NavigationPanelOrdinary` — обычные команды навигации
- `NavigationPanelImportant` — важные команды навигации
**Панель навигации формы:**
- `FormNavigationPanelGoTo` — «Перейти» в форме
- `FormNavigationPanelImportant` — важные в навигации формы
**Командная панель формы:**
- `FormCommandBarImportant` — важные на панели команд формы
- `FormCommandBarCreateBasedOn` — «Создать на основании»
**Панель действий:**
- `ActionsPanelTools` — сервисные действия
- `ActionsPanelReports` — отчёты в панели действий
**Пользовательская группа:**
- `CommandGroup.<Имя>` — ссылка на группу команд
#### CommandParameterType — типы параметра
Определяет к каким объектам привязана команда. Если пусто — команда глобальная.
**Без параметра (глобальная команда):**
```xml
<CommandParameterType/>
```
**Один тип:**
```xml
<CommandParameterType>
<v8:Type>cfg:CatalogRef.Сотрудники</v8:Type>
</CommandParameterType>
```
**Несколько типов:**
```xml
<CommandParameterType>
<v8:Type>cfg:ExchangePlanRef.Полный</v8:Type>
<v8:Type>cfg:ExchangePlanRef.ПоОрганизации</v8:Type>
<v8:Type>cfg:ExchangePlanRef.АвтономнаяРабота</v8:Type>
</CommandParameterType>
```
Формат типов: `cfg:<ТипСсылки>.<ИмяОбъекта>`, где типы ссылок:
- `cfg:CatalogRef.<Имя>` — ссылка на справочник
- `cfg:DocumentRef.<Имя>` — ссылка на документ
- `cfg:ExchangePlanRef.<Имя>` — ссылка на план обмена
---
## 7. Команды объектов (встроенные команды)
Помимо общих команд (`CommonCommands/`), команды могут быть определены внутри объектов метаданных (справочников, документов, обработок и т.д.).
### 7.1. Структура
Команды определяются в секции `<ChildObjects>` родительского объекта и хранят модуль в подкаталоге:
```
Catalogs/
├── Номенклатура.xml # В ChildObjects определены Command-ы
└── Номенклатура/
└── Commands/
└── КомандаИсторияДвижений/
└── Ext/
└── CommandModule.bsl # Модуль команды
```
### 7.2. XML-определение (внутри ChildObjects родителя)
```xml
<ChildObjects>
<Form>ФормаЭлемента</Form>
<Form>ФормаСписка</Form>
<Command uuid="d95fb51f-719f-4d67-ab58-b8144e3f2b7e">
<Properties>
<Name>КомандаИсторияДвижений</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>История движений</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Group>FormNavigationPanelImportant</Group>
<CommandParameterType>
<v8:Type>cfg:CatalogRef.Номенклатура</v8:Type>
</CommandParameterType>
<ParameterUseMode>Single</ParameterUseMode>
<ModifiesData>false</ModifiesData>
<Representation>Auto</Representation>
<ToolTip/>
<Picture/>
<Shortcut/>
<OnMainServerUnavalableBehavior>Auto</OnMainServerUnavalableBehavior>
</Properties>
</Command>
</ChildObjects>
```
### 7.3. Свойства команды объекта
Набор свойств идентичен CommonCommand (см. [раздел 6.3](#63-свойства-properties-1)), за исключением отсутствия `IncludeHelpInContents`.
| Свойство | Описание |
|---|---|
| `Name` | Программное имя команды |
| `Synonym` | Отображаемое имя |
| `Comment` | Комментарий |
| `Group` | Группа размещения (те же значения что у CommonCommand) |
| `CommandParameterType` | Тип параметра (обычно ссылка на тип владельца) |
| `ParameterUseMode` | `Single` или `Multiple` |
| `ModifiesData` | Модифицирует данные (`true`/`false`) |
| `Representation` | Способ отображения |
| `ToolTip` | Подсказка |
| `Picture` | Иконка |
| `Shortcut` | Сочетание клавиш |
| `OnMainServerUnavalableBehavior` | Поведение при недоступности сервера |
> **Порядок свойств**: В командах объектов `Representation` идёт **после** `ModifiesData`, а в CommonCommand — после `Comment`. Это единственное структурное различие.
### 7.4. Ссылка на команду объекта в CommandInterface
В `CommandInterface.xml` команда объекта адресуется как:
```
<ТипОбъекта>.<ИмяОбъекта>.Command.<ИмяКоманды>
```
Пример: `Catalog.Номенклатура.Command.КомандаИсторияДвижений`
---
## 8. Формат ссылок на команды в CommandInterface
Атрибут `name` в элементах `Command` использует точечную нотацию: Атрибут `name` в элементах `Command` использует точечную нотацию:
### 5.1. Стандартные команды (StandardCommand) ### 8.1. Стандартные команды (StandardCommand)
``` ```
<ТипОбъекта>.<ИмяОбъекта>.StandardCommand.<Операция> <ТипОбъекта>.<ИмяОбъекта>.StandardCommand.<Операция>
@@ -452,7 +810,7 @@ Ext/
- `InformationRegister.КурсыВалют.StandardCommand.OpenList` - `InformationRegister.КурсыВалют.StandardCommand.OpenList`
- `DocumentJournal.ЖурналДокументов.StandardCommand.OpenList` - `DocumentJournal.ЖурналДокументов.StandardCommand.OpenList`
### 5.2. Пользовательские команды (Command) ### 8.2. Пользовательские команды (Command)
``` ```
<ТипОбъекта>.<ИмяОбъекта>.Command.<ИмяКоманды> <ТипОбъекта>.<ИмяОбъекта>.Command.<ИмяКоманды>
@@ -465,7 +823,7 @@ Ext/
- `InformationRegister.Настройки.Command.ОбменДанными` - `InformationRegister.Настройки.Command.ОбменДанными`
- `ExchangePlan.Мобильное.Command.ОткрытьНастройки` - `ExchangePlan.Мобильное.Command.ОткрытьНастройки`
### 5.3. Общие команды (CommonCommand) ### 8.3. Общие команды (CommonCommand)
``` ```
CommonCommand.<ИмяКоманды> CommonCommand.<ИмяКоманды>
@@ -476,7 +834,7 @@ CommonCommand.<ИмяКоманды>
- `CommonCommand.ДополнительныеОбработкиПродажи` - `CommonCommand.ДополнительныеОбработкиПродажи`
- `CommonCommand.ПерсональныеНастройки` - `CommonCommand.ПерсональныеНастройки`
### 5.4. UUID-ссылки ### 8.4. UUID-ссылки
``` ```
0:<UUID> 0:<UUID>
@@ -488,9 +846,9 @@ CommonCommand.<ИмяКоманды>
--- ---
## 6. Группы команд (CommandGroup) ## 9. Группы команд в CommandInterface
### 6.1. Стандартные группы панелей ### 9.1. Стандартные группы панелей
| Идентификатор | Панель | Описание | | Идентификатор | Панель | Описание |
|---|---|---| |---|---|---|
@@ -500,7 +858,7 @@ CommonCommand.<ИмяКоманды>
| `ActionsPanelCreate` | Действия | Блок «Создать» | | `ActionsPanelCreate` | Действия | Блок «Создать» |
| `ActionsPanelTools` | Действия | Блок «Сервис» | | `ActionsPanelTools` | Действия | Блок «Сервис» |
### 6.2. Пользовательские группы ### 9.2. Пользовательские группы
``` ```
CommandGroup.<ИмяГруппы> CommandGroup.<ИмяГруппы>
@@ -518,7 +876,7 @@ CommandGroup.<ИмяГруппы>
--- ---
## 7. Различия версий формата ## 10. Различия версий формата
| Аспект | `2.17` (8.3.208.3.24) | `2.20` (8.3.27+) | | Аспект | `2.17` (8.3.208.3.24) | `2.20` (8.3.27+) |
|---|---|---| |---|---|---|
@@ -532,9 +890,9 @@ CommandGroup.<ИмяГруппы>
--- ---
## 8. Полный пример ## 11. Полные примеры
### 8.1. Подсистема верхнего уровня (Продажи.xml) ### 11.1. Подсистема верхнего уровня (Продажи.xml)
```xml ```xml
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
@@ -579,7 +937,7 @@ CommandGroup.<ИмяГруппы>
</MetaDataObject> </MetaDataObject>
``` ```
### 8.2. CommandInterface подсистемы (Продажи/Ext/CommandInterface.xml) ### 11.2. CommandInterface подсистемы (Продажи/Ext/CommandInterface.xml)
```xml ```xml
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
@@ -639,7 +997,7 @@ CommandGroup.<ИмяГруппы>
</CommandInterface> </CommandInterface>
``` ```
### 8.3. Корневой CommandInterface (Ext/CommandInterface.xml) ### 11.3. Корневой CommandInterface (Ext/CommandInterface.xml)
```xml ```xml
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>