mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-16 02:43:14 +03:00
Merge branch 'dev'
This commit is contained in:
@@ -1,127 +1,91 @@
|
||||
---
|
||||
name: form-add
|
||||
description: Добавление элементов, реквизитов и команд в существующую управляемую форму 1С (Form.xml)
|
||||
argument-hint: <FormPath> <JsonPath>
|
||||
description: Добавить управляемую форму к объекту конфигурации 1С
|
||||
argument-hint: <ObjectPath> <FormName> [Purpose] [--set-default]
|
||||
allowed-tools:
|
||||
- Bash
|
||||
- Read
|
||||
- Write
|
||||
- Edit
|
||||
- Glob
|
||||
- Grep
|
||||
---
|
||||
|
||||
# /form-add — Добавление в форму
|
||||
# /form-add — Добавление формы к объекту конфигурации
|
||||
|
||||
Добавляет элементы, реквизиты и/или команды в существующий Form.xml. Автоматически выделяет ID из правильного пула, генерирует companion-элементы (ContextMenu, ExtendedTooltip, и др.) и обработчики событий.
|
||||
Создаёт управляемую форму (metadata XML + Form.xml + Module.bsl) и регистрирует её в корневом XML объекта конфигурации (Document, Catalog, InformationRegister и др.).
|
||||
|
||||
## Использование
|
||||
## Usage
|
||||
|
||||
```
|
||||
/form-add <FormPath> <JsonPath>
|
||||
/form-add <ObjectPath> <FormName> [Purpose] [Synonym] [--set-default]
|
||||
```
|
||||
|
||||
## Параметры
|
||||
|
||||
| Параметр | Обязательный | Описание |
|
||||
|-----------|:------------:|----------------------------------|
|
||||
| FormPath | да | Путь к существующему Form.xml |
|
||||
| JsonPath | да | Путь к JSON с описанием добавлений |
|
||||
| Параметр | Обязательный | По умолчанию | Описание |
|
||||
|-------------|:------------:|--------------|----------------------------------------------|
|
||||
| ObjectPath | да | — | Путь к XML-файлу объекта (Documents/Док.xml) |
|
||||
| FormName | да | — | Имя формы (ФормаДокумента) |
|
||||
| Purpose | нет | Object | Назначение: Object, List, Choice, Record |
|
||||
| Synonym | нет | = FormName | Синоним формы |
|
||||
| --set-default | нет | авто | Установить как форму по умолчанию |
|
||||
|
||||
## Команда
|
||||
|
||||
```powershell
|
||||
powershell.exe -NoProfile -File .claude\skills\form-add\scripts\form-add.ps1 -FormPath "<путь>" -JsonPath "<путь>"
|
||||
powershell.exe -NoProfile -File .claude\skills\form-add\scripts\form-add.ps1 -ObjectPath "<ObjectPath>" -FormName "<FormName>" [-Purpose "<Purpose>"] [-Synonym "<Synonym>"] [-SetDefault]
|
||||
```
|
||||
|
||||
## JSON формат
|
||||
## Purpose — назначение формы
|
||||
|
||||
```json
|
||||
{
|
||||
"into": "ГруппаШапка",
|
||||
"after": "Контрагент",
|
||||
"elements": [
|
||||
{ "input": "Склад", "path": "Объект.Склад", "on": ["OnChange"] }
|
||||
],
|
||||
"attributes": [
|
||||
{ "name": "СуммаИтого", "type": "decimal(15,2)" }
|
||||
],
|
||||
"commands": [
|
||||
{ "name": "Рассчитать", "action": "РассчитатьОбработка" }
|
||||
]
|
||||
}
|
||||
```
|
||||
| Purpose | Допустимые типы объектов | Основной реквизит | DefaultForm-свойство |
|
||||
|---------|-------------------------|-------------------|---------------------|
|
||||
| Object | Document, Catalog, DataProcessor, Report, ChartOf*, ExchangePlan, BusinessProcess, Task | Объект (тип: *Object.Имя) | DefaultObjectForm (DefaultForm для DataProcessor/Report) |
|
||||
| List | Все кроме DataProcessor | Список (DynamicList) | DefaultListForm |
|
||||
| Choice | Document, Catalog, ChartOf*, ExchangePlan, BusinessProcess, Task | Список (DynamicList) | DefaultChoiceForm |
|
||||
| Record | InformationRegister | Запись (InformationRegisterRecordManager) | DefaultRecordForm |
|
||||
|
||||
### Позиционирование элементов
|
||||
|
||||
| Ключ | По умолчанию | Описание |
|
||||
|------|-------------|----------|
|
||||
| `into` | корневой ChildItems | Имя группы/таблицы/страницы, куда вставлять |
|
||||
| `after` | в конец | Имя элемента, после которого вставлять |
|
||||
|
||||
### Типы элементов
|
||||
|
||||
Те же DSL-ключи, что в `/form-compile`:
|
||||
|
||||
| Ключ | XML тег | Companions |
|
||||
|------|---------|------------|
|
||||
| `input` | InputField | ContextMenu, ExtendedTooltip |
|
||||
| `check` | CheckBoxField | ContextMenu, ExtendedTooltip |
|
||||
| `label` | LabelDecoration | ContextMenu, ExtendedTooltip |
|
||||
| `labelField` | LabelField | ContextMenu, ExtendedTooltip |
|
||||
| `group` | UsualGroup | ExtendedTooltip |
|
||||
| `table` | Table | ContextMenu, AutoCommandBar, Search*, ViewStatus* |
|
||||
| `pages` | Pages | ExtendedTooltip |
|
||||
| `page` | Page | ExtendedTooltip |
|
||||
| `button` | Button | ExtendedTooltip |
|
||||
|
||||
Группы и таблицы поддерживают `children`/`columns` для вложенных элементов.
|
||||
|
||||
### Кнопки: command и stdCommand
|
||||
|
||||
- `"command": "ИмяКоманды"` → `Form.Command.ИмяКоманды`
|
||||
- `"stdCommand": "Close"` → `Form.StandardCommand.Close`
|
||||
- `"stdCommand": "Товары.Add"` → `Form.Item.Товары.StandardCommand.Add` (стандартная команда элемента)
|
||||
|
||||
### Допустимые события (`on`)
|
||||
|
||||
Компилятор предупреждает об ошибках в именах событий. Основные:
|
||||
|
||||
- **input**: `OnChange`, `StartChoice`, `ChoiceProcessing`, `Clearing`, `AutoComplete`, `TextEditEnd`
|
||||
- **check**: `OnChange`
|
||||
- **table**: `OnStartEdit`, `OnEditEnd`, `OnChange`, `Selection`, `BeforeAddRow`, `BeforeDeleteRow`, `OnActivateRow`
|
||||
- **label/picture**: `Click`, `URLProcessing`
|
||||
- **pages**: `OnCurrentPageChange`
|
||||
- **button**: `Click`
|
||||
|
||||
### Система типов (для attributes)
|
||||
|
||||
`string`, `string(100)`, `decimal(15,2)`, `boolean`, `date`, `dateTime`, `CatalogRef.XXX`, `DocumentObject.XXX`, `ValueTable`, `DynamicList`, `Type1 | Type2` (составной).
|
||||
|
||||
## Вывод
|
||||
## Что создаётся
|
||||
|
||||
```
|
||||
=== form-add: Форма ===
|
||||
|
||||
Added elements (into ГруппаШапка, after Контрагент):
|
||||
+ [Input] Склад -> Объект.Склад {OnChange}
|
||||
|
||||
Added attributes:
|
||||
+ СуммаИтого: decimal(15,2) (id=12)
|
||||
|
||||
---
|
||||
Total: 1 element(s) (+2 companions), 1 attribute(s)
|
||||
Run /form-validate to verify.
|
||||
<ObjectDir>/Forms/
|
||||
├── <FormName>.xml # Метаданные формы (UUID)
|
||||
└── <FormName>/
|
||||
└── Ext/
|
||||
├── Form.xml # Описание формы (logform namespace)
|
||||
└── Form/
|
||||
└── Module.bsl # BSL-модуль с 5 регионами + ПриСозданииНаСервере
|
||||
```
|
||||
|
||||
## Когда использовать
|
||||
## Что модифицируется
|
||||
|
||||
- **После `/form-compile`**: добавить элементы, которые не были в исходном JSON
|
||||
- **Модификация существующих форм**: добавить поле, реквизит или команду в форму из конфигурации
|
||||
- **Пакетное добавление**: один JSON может содержать элементы + реквизиты + команды
|
||||
- `<ObjectPath>` — добавляется `<Form>` в `ChildObjects` (перед `<Template>` или `<TabularSection>`), обновляется Default*Form (автоматически если пустое, или явно при `--set-default`)
|
||||
|
||||
## Поддерживаемые типы объектов
|
||||
|
||||
Document, Catalog, DataProcessor, Report, InformationRegister, ChartOfAccounts, ChartOfCharacteristicTypes, ExchangePlan, BusinessProcess, Task
|
||||
|
||||
## Примеры
|
||||
|
||||
```
|
||||
# Форма документа
|
||||
/form-add Documents/АвансовыйОтчет.xml ФормаДокумента --purpose Object
|
||||
|
||||
# Форма списка каталога
|
||||
/form-add Catalogs/Контрагенты.xml ФормаСписка --purpose List
|
||||
|
||||
# Форма записи регистра сведений
|
||||
/form-add InformationRegisters/КурсыВалют.xml ФормаЗаписи --purpose Record
|
||||
|
||||
# Форма выбора с синонимом
|
||||
/form-add Catalogs/Номенклатура.xml ФормаВыбора --purpose Choice --synonym "Выбор номенклатуры"
|
||||
|
||||
# Установить как форму по умолчанию
|
||||
/form-add Documents/Заказ.xml ФормаДокументаНовая --purpose Object --set-default
|
||||
```
|
||||
|
||||
## Workflow
|
||||
|
||||
1. `/form-info` — посмотреть текущую структуру формы
|
||||
2. Создать JSON с описанием добавлений
|
||||
3. `/form-add` — добавить в форму
|
||||
4. `/form-validate` — проверить корректность
|
||||
5. `/form-info` — убедиться что добавилось правильно
|
||||
1. `/form-add` — создать каркас формы
|
||||
2. `/form-compile` или `/form-edit` — наполнить Form.xml элементами
|
||||
3. `/form-validate` — проверить корректность
|
||||
4. `/form-info` — проанализировать результат
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,127 @@
|
||||
---
|
||||
name: form-edit
|
||||
description: Добавление элементов, реквизитов и команд в существующую управляемую форму 1С (Form.xml)
|
||||
argument-hint: <FormPath> <JsonPath>
|
||||
allowed-tools:
|
||||
- Bash
|
||||
- Read
|
||||
- Write
|
||||
- Glob
|
||||
---
|
||||
|
||||
# /form-edit — Редактирование формы
|
||||
|
||||
Добавляет элементы, реквизиты и/или команды в существующий Form.xml. Автоматически выделяет ID из правильного пула, генерирует companion-элементы (ContextMenu, ExtendedTooltip, и др.) и обработчики событий.
|
||||
|
||||
## Использование
|
||||
|
||||
```
|
||||
/form-edit <FormPath> <JsonPath>
|
||||
```
|
||||
|
||||
## Параметры
|
||||
|
||||
| Параметр | Обязательный | Описание |
|
||||
|-----------|:------------:|----------------------------------|
|
||||
| FormPath | да | Путь к существующему Form.xml |
|
||||
| JsonPath | да | Путь к JSON с описанием добавлений |
|
||||
|
||||
## Команда
|
||||
|
||||
```powershell
|
||||
powershell.exe -NoProfile -File .claude\skills\form-edit\scripts\form-edit.ps1 -FormPath "<путь>" -JsonPath "<путь>"
|
||||
```
|
||||
|
||||
## JSON формат
|
||||
|
||||
```json
|
||||
{
|
||||
"into": "ГруппаШапка",
|
||||
"after": "Контрагент",
|
||||
"elements": [
|
||||
{ "input": "Склад", "path": "Объект.Склад", "on": ["OnChange"] }
|
||||
],
|
||||
"attributes": [
|
||||
{ "name": "СуммаИтого", "type": "decimal(15,2)" }
|
||||
],
|
||||
"commands": [
|
||||
{ "name": "Рассчитать", "action": "РассчитатьОбработка" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Позиционирование элементов
|
||||
|
||||
| Ключ | По умолчанию | Описание |
|
||||
|------|-------------|----------|
|
||||
| `into` | корневой ChildItems | Имя группы/таблицы/страницы, куда вставлять |
|
||||
| `after` | в конец | Имя элемента, после которого вставлять |
|
||||
|
||||
### Типы элементов
|
||||
|
||||
Те же DSL-ключи, что в `/form-compile`:
|
||||
|
||||
| Ключ | XML тег | Companions |
|
||||
|------|---------|------------|
|
||||
| `input` | InputField | ContextMenu, ExtendedTooltip |
|
||||
| `check` | CheckBoxField | ContextMenu, ExtendedTooltip |
|
||||
| `label` | LabelDecoration | ContextMenu, ExtendedTooltip |
|
||||
| `labelField` | LabelField | ContextMenu, ExtendedTooltip |
|
||||
| `group` | UsualGroup | ExtendedTooltip |
|
||||
| `table` | Table | ContextMenu, AutoCommandBar, Search*, ViewStatus* |
|
||||
| `pages` | Pages | ExtendedTooltip |
|
||||
| `page` | Page | ExtendedTooltip |
|
||||
| `button` | Button | ExtendedTooltip |
|
||||
|
||||
Группы и таблицы поддерживают `children`/`columns` для вложенных элементов.
|
||||
|
||||
### Кнопки: command и stdCommand
|
||||
|
||||
- `"command": "ИмяКоманды"` → `Form.Command.ИмяКоманды`
|
||||
- `"stdCommand": "Close"` → `Form.StandardCommand.Close`
|
||||
- `"stdCommand": "Товары.Add"` → `Form.Item.Товары.StandardCommand.Add` (стандартная команда элемента)
|
||||
|
||||
### Допустимые события (`on`)
|
||||
|
||||
Компилятор предупреждает об ошибках в именах событий. Основные:
|
||||
|
||||
- **input**: `OnChange`, `StartChoice`, `ChoiceProcessing`, `Clearing`, `AutoComplete`, `TextEditEnd`
|
||||
- **check**: `OnChange`
|
||||
- **table**: `OnStartEdit`, `OnEditEnd`, `OnChange`, `Selection`, `BeforeAddRow`, `BeforeDeleteRow`, `OnActivateRow`
|
||||
- **label/picture**: `Click`, `URLProcessing`
|
||||
- **pages**: `OnCurrentPageChange`
|
||||
- **button**: `Click`
|
||||
|
||||
### Система типов (для attributes)
|
||||
|
||||
`string`, `string(100)`, `decimal(15,2)`, `boolean`, `date`, `dateTime`, `CatalogRef.XXX`, `DocumentObject.XXX`, `ValueTable`, `DynamicList`, `Type1 | Type2` (составной).
|
||||
|
||||
## Вывод
|
||||
|
||||
```
|
||||
=== form-edit: Форма ===
|
||||
|
||||
Added elements (into ГруппаШапка, after Контрагент):
|
||||
+ [Input] Склад -> Объект.Склад {OnChange}
|
||||
|
||||
Added attributes:
|
||||
+ СуммаИтого: decimal(15,2) (id=12)
|
||||
|
||||
---
|
||||
Total: 1 element(s) (+2 companions), 1 attribute(s)
|
||||
Run /form-validate to verify.
|
||||
```
|
||||
|
||||
## Когда использовать
|
||||
|
||||
- **После `/form-compile`**: добавить элементы, которые не были в исходном JSON
|
||||
- **Модификация существующих форм**: добавить поле, реквизит или команду в форму из конфигурации
|
||||
- **Пакетное добавление**: один JSON может содержать элементы + реквизиты + команды
|
||||
|
||||
## Workflow
|
||||
|
||||
1. `/form-info` — посмотреть текущую структуру формы
|
||||
2. Создать JSON с описанием добавлений
|
||||
3. `/form-edit` — добавить в форму
|
||||
4. `/form-validate` — проверить корректность
|
||||
5. `/form-info` — убедиться что добавилось правильно
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,207 @@
|
||||
---
|
||||
name: role-compile
|
||||
description: Создание роли 1С — метаданные и Rights.xml из описания прав
|
||||
argument-hint: <RoleName> <RolesDir>
|
||||
allowed-tools:
|
||||
- Bash
|
||||
- Read
|
||||
- Write
|
||||
- Glob
|
||||
---
|
||||
|
||||
# /role-compile — создание роли 1С
|
||||
|
||||
Создаёт файлы роли (метаданные + Rights.xml) по описанию прав. Скрипта нет — агент генерирует XML по шаблонам ниже.
|
||||
|
||||
## Использование
|
||||
|
||||
```
|
||||
/role-compile <RoleName> <RolesDir>
|
||||
```
|
||||
|
||||
- **RoleName** — программное имя роли
|
||||
- **RolesDir** — каталог `Roles/` в исходниках конфигурации
|
||||
|
||||
## Файловая структура и регистрация
|
||||
|
||||
```
|
||||
Roles/
|
||||
ИмяРоли.xml ← метаданные (uuid, имя, синоним)
|
||||
ИмяРоли/
|
||||
Ext/
|
||||
Rights.xml ← определение прав
|
||||
```
|
||||
|
||||
В `Configuration.xml` добавить `<Role>ИмяРоли</Role>` в секцию `<ChildObjects>`.
|
||||
|
||||
## Шаблон метаданных: Roles/ИмяРоли.xml
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses"
|
||||
xmlns:v8="http://v8.1c.ru/8.1/data/core"
|
||||
xmlns:xr="http://v8.1c.ru/8.3/xcf/readable"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
version="2.17">
|
||||
<Role uuid="GENERATE-UUID-HERE">
|
||||
<Properties>
|
||||
<Name>ИмяРоли</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Отображаемое имя роли</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
</Properties>
|
||||
</Role>
|
||||
</MetaDataObject>
|
||||
```
|
||||
|
||||
**UUID:** `powershell.exe -Command "[guid]::NewGuid().ToString()"`
|
||||
|
||||
## Шаблон прав: Roles/ИмяРоли/Ext/Rights.xml
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Rights xmlns="http://v8.1c.ru/8.2/roles"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:type="Rights" version="2.17">
|
||||
<setForNewObjects>false</setForNewObjects>
|
||||
<setForAttributesByDefault>true</setForAttributesByDefault>
|
||||
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
|
||||
<!-- блоки <object> -->
|
||||
</Rights>
|
||||
```
|
||||
|
||||
NB: namespace `http://v8.1c.ru/8.2/roles` (исторически 8.2, не 8.3).
|
||||
|
||||
## Формат блока прав
|
||||
|
||||
```xml
|
||||
<object>
|
||||
<name>Catalog.Номенклатура</name>
|
||||
<right><name>Read</name><value>true</value></right>
|
||||
<right><name>View</name><value>true</value></right>
|
||||
</object>
|
||||
```
|
||||
|
||||
Имя объекта — dot-нотация: `ТипОбъекта.Имя[.ТипВложенного.ИмяВложенного]`.
|
||||
|
||||
## Практические наборы прав
|
||||
|
||||
### Catalog / ExchangePlan
|
||||
|
||||
| Набор | Права |
|
||||
|-------|-------|
|
||||
| Чтение | Read, View, InputByString |
|
||||
| Полные | Read, Insert, Update, Delete, View, Edit, InputByString, InteractiveInsert, InteractiveSetDeletionMark, InteractiveClearDeletionMark |
|
||||
|
||||
### Document
|
||||
|
||||
| Набор | Права |
|
||||
|-------|-------|
|
||||
| Чтение | Read, View, InputByString |
|
||||
| Полные | Read, Insert, Update, Delete, View, Edit, InputByString, Posting, UndoPosting, InteractiveInsert, InteractiveSetDeletionMark, InteractiveClearDeletionMark, InteractivePosting, InteractivePostingRegular, InteractiveUndoPosting, InteractiveChangeOfPosted |
|
||||
|
||||
### InformationRegister / AccumulationRegister / AccountingRegister
|
||||
|
||||
| Набор | Права |
|
||||
|-------|-------|
|
||||
| Чтение | Read, View |
|
||||
| Полные | Read, Update, View, Edit |
|
||||
|
||||
TotalsControl — только для управления итогами, обычно не нужно.
|
||||
|
||||
### Простые типы
|
||||
|
||||
| Тип | Права |
|
||||
|-----|-------|
|
||||
| `DataProcessor` / `Report` | Use, View |
|
||||
| `Constant` | Read, Update, View, Edit (чтение: Read, View) |
|
||||
| `CommonForm` / `CommonCommand` / `Subsystem` / `FilterCriterion` | View |
|
||||
| `DocumentJournal` | Read, View |
|
||||
| `Sequence` | Read, Update |
|
||||
| `SessionParameter` | Get (+ Set если пишет) |
|
||||
| `CommonAttribute` | View (+ Edit если редактирует) |
|
||||
| `WebService` / `HTTPService` / `IntegrationService` | Use |
|
||||
| `CalculationRegister` | Read, View |
|
||||
|
||||
### Редкие ссылочные типы
|
||||
|
||||
| Тип | Особенности (относительно Catalog) |
|
||||
|-----|-------|
|
||||
| `ChartOfAccounts`, `ChartOfCharacteristicTypes`, `ChartOfCalculationTypes` | + Predefined-права (InteractiveDeletePredefinedData и др.) |
|
||||
| `BusinessProcess` | + Start, InteractiveStart, InteractiveActivate |
|
||||
| `Task` | + Execute, InteractiveExecute, InteractiveActivate |
|
||||
|
||||
### Типы БЕЗ прав в ролях
|
||||
|
||||
Enum, FunctionalOption, DefinedType, CommonModule, CommonPicture, CommonTemplate — не фигурируют в Rights.xml.
|
||||
|
||||
### Вложенные объекты (права: View, Edit)
|
||||
|
||||
```
|
||||
Catalog.Контрагенты.Attribute.ИНН
|
||||
Document.Реализация.StandardAttribute.Posted
|
||||
Document.Реализация.TabularSection.Товары
|
||||
InformationRegister.Цены.Dimension.Номенклатура
|
||||
InformationRegister.Цены.Resource.Цена
|
||||
Catalog.Контрагенты.Command.ОткрытьКарточку ← только View
|
||||
Task.Задача.AddressingAttribute.Исполнитель
|
||||
```
|
||||
|
||||
Используются для точечного запрета: `<value>false</value>` на конкретный реквизит.
|
||||
|
||||
### Configuration
|
||||
|
||||
Объект: `Configuration.ИмяКонфигурации`. Ключевые права: Administration, DataAdministration, ThinClient, WebClient, ThickClient, MobileClient, ExternalConnection, Output, SaveUserData, InteractiveOpenExtDataProcessors, InteractiveOpenExtReports, MainWindowModeNormal, MainWindowModeWorkplace, MainWindowModeEmbeddedWorkplace, MainWindowModeFullscreenWorkplace, MainWindowModeKiosk, AnalyticsSystemClient.
|
||||
|
||||
> DataHistory-права (ReadDataHistory, UpdateDataHistory и др.) существуют у Catalog, Document, Register, Constant — но используются крайне редко, в типовых ролях практически не встречаются.
|
||||
|
||||
## RLS (ограничения на уровне записей)
|
||||
|
||||
Внутрь `<right>`, после `<value>`. Применяется к Read, Update, Insert, Delete.
|
||||
|
||||
```xml
|
||||
<right>
|
||||
<name>Read</name>
|
||||
<value>true</value>
|
||||
<restrictionByCondition>
|
||||
<condition>#ИмяШаблона("Параметр1", "Параметр2")</condition>
|
||||
</restrictionByCondition>
|
||||
</right>
|
||||
```
|
||||
|
||||
Шаблоны — в конце Rights.xml, после всех `<object>`:
|
||||
|
||||
```xml
|
||||
<restrictionTemplate>
|
||||
<name>ИмяШаблона(Параметр1, Параметр2)</name>
|
||||
<condition>Текст шаблона</condition>
|
||||
</restrictionTemplate>
|
||||
```
|
||||
|
||||
`&` в условии → `&`. Типичные шаблоны: ДляОбъекта, ПоЗначениям, ДляРегистра.
|
||||
|
||||
## Пример: роль для регламентного задания
|
||||
|
||||
```xml
|
||||
<object>
|
||||
<name>Catalog.Валюты</name>
|
||||
<right><name>Read</name><value>true</value></right>
|
||||
</object>
|
||||
<object>
|
||||
<name>InformationRegister.КурсыВалют</name>
|
||||
<right><name>Read</name><value>true</value></right>
|
||||
<right><name>Update</name><value>true</value></right>
|
||||
</object>
|
||||
<object>
|
||||
<name>Constant.ОсновнаяВалюта</name>
|
||||
<right><name>Read</name><value>true</value></right>
|
||||
</object>
|
||||
```
|
||||
|
||||
Фоновые задания не требуют Interactive/View/Edit-прав и прав конфигурации (ThinClient, WebClient и др.) — только программные (Read, Insert, Update, Delete, Posting).
|
||||
@@ -0,0 +1,84 @@
|
||||
---
|
||||
name: role-info
|
||||
description: Компактная сводка прав роли 1С из Rights.xml — объекты, права, RLS, шаблоны ограничений
|
||||
argument-hint: <RightsPath>
|
||||
allowed-tools:
|
||||
- Bash
|
||||
- Read
|
||||
---
|
||||
|
||||
# /role-info — анализ роли 1С
|
||||
|
||||
Парсит `Rights.xml` роли и выдаёт компактную сводку: объекты сгруппированы по типу, показаны только разрешённые права. Сжатие: тысячи строк XML → 50–150 строк текста.
|
||||
|
||||
## Использование
|
||||
|
||||
```
|
||||
/role-info <RightsPath>
|
||||
```
|
||||
|
||||
**RightsPath** — путь к файлу `Rights.xml` роли (обычно `Roles/ИмяРоли/Ext/Rights.xml`).
|
||||
|
||||
## Запуск скрипта
|
||||
|
||||
```powershell
|
||||
powershell.exe -File .claude\skills\role-info\scripts\role-info.ps1 -RightsPath <path> -OutFile <output.txt>
|
||||
```
|
||||
|
||||
### Параметры
|
||||
|
||||
| Параметр | Обязательный | Описание |
|
||||
|----------|:------------:|----------|
|
||||
| `-RightsPath` | да | Путь к Rights.xml |
|
||||
| `-ShowDenied` | нет | Показать запрещённые права (по умолчанию скрыты) |
|
||||
| `-Limit` | нет | Макс. строк вывода (по умолчанию `150`). `0` = без ограничений |
|
||||
| `-Offset` | нет | Пропустить N строк — для пагинации (по умолчанию `0`) |
|
||||
| `-OutFile` | нет | Записать результат в файл (UTF-8 BOM). Без этого — вывод в консоль |
|
||||
|
||||
**Важно:** Всегда используй `-OutFile` и читай результат через Read tool. Прямой вывод в консоль через bash ломает кириллицу.
|
||||
|
||||
Для большой роли при усечении вывода:
|
||||
```powershell
|
||||
... -Offset 150 # пагинация: пропустить первые 150 строк
|
||||
```
|
||||
|
||||
## Формат вывода
|
||||
|
||||
```
|
||||
=== Role: БазовыеПраваБП --- "Базовые права: Бухгалтерия предприятия" ===
|
||||
|
||||
Properties: setForNewObjects=false, setForAttributesByDefault=true, independentRightsOfChildObjects=false
|
||||
|
||||
Allowed rights:
|
||||
|
||||
Catalog (8):
|
||||
Контрагенты: Read, View, InputByString
|
||||
Банки: Read, View, InputByString
|
||||
...
|
||||
|
||||
Document (12):
|
||||
РеализацияТоваровУслуг: Read, View, Posting, InteractivePosting
|
||||
...
|
||||
|
||||
InformationRegister (6):
|
||||
ЦеныНоменклатуры: Read [RLS], Update
|
||||
...
|
||||
|
||||
Denied: 18 rights (use -ShowDenied to list)
|
||||
|
||||
RLS: 4 restrictions
|
||||
Templates: ДляРегистра, ПоЗначениям
|
||||
|
||||
---
|
||||
Total: 138 allowed, 18 denied
|
||||
|
||||
[TRUNCATED] Shown 150 of 220 lines. Use -Offset 150 to continue.
|
||||
```
|
||||
|
||||
Используйте `-Offset N` и `-Limit N` для постраничного просмотра.
|
||||
|
||||
### Обозначения
|
||||
|
||||
- `[RLS]` — право с ограничением на уровне записей (restrictionByCondition)
|
||||
- `-View`, `-Edit` — запрещённые права (в секции Denied, при `-ShowDenied`)
|
||||
- Вложенные объекты показываются с суффиксом: `Контрагенты.StandardAttribute.PredefinedDataName`
|
||||
@@ -0,0 +1,242 @@
|
||||
param(
|
||||
[Parameter(Mandatory=$true)][string]$RightsPath,
|
||||
[switch]$ShowDenied,
|
||||
[int]$Limit = 150,
|
||||
[int]$Offset = 0,
|
||||
[string]$OutFile
|
||||
)
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
# --- Output helper (always collect, paginate at the end) ---
|
||||
$script:lines = @()
|
||||
function Out([string]$text) { $script:lines += $text }
|
||||
|
||||
# --- Resolve paths ---
|
||||
if (-not [System.IO.Path]::IsPathRooted($RightsPath)) {
|
||||
$RightsPath = Join-Path (Get-Location).Path $RightsPath
|
||||
}
|
||||
|
||||
if (-not (Test-Path $RightsPath)) {
|
||||
Write-Host "[ERROR] File not found: $RightsPath"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# --- Try to find metadata file for role name/synonym ---
|
||||
$roleName = ""
|
||||
$roleSynonym = ""
|
||||
$extDir = Split-Path $RightsPath # .../Ext
|
||||
$roleDir = Split-Path $extDir # .../RoleName
|
||||
$rolesDir = Split-Path $roleDir # .../Roles
|
||||
$roleFolderName = Split-Path $roleDir -Leaf
|
||||
$metaPath = Join-Path $rolesDir "$roleFolderName.xml"
|
||||
|
||||
if (Test-Path $metaPath) {
|
||||
try {
|
||||
[xml]$metaXml = Get-Content -Path $metaPath -Encoding UTF8
|
||||
$ns = New-Object System.Xml.XmlNamespaceManager($metaXml.NameTable)
|
||||
$ns.AddNamespace("md", "http://v8.1c.ru/8.3/MDClasses")
|
||||
$ns.AddNamespace("v8", "http://v8.1c.ru/8.1/data/core")
|
||||
$nameNode = $metaXml.SelectSingleNode("//md:Role/md:Properties/md:Name", $ns)
|
||||
if ($nameNode) { $roleName = $nameNode.InnerText }
|
||||
$synNode = $metaXml.SelectSingleNode("//md:Role/md:Properties/md:Synonym/v8:item[v8:lang='ru']/v8:content", $ns)
|
||||
if ($synNode) { $roleSynonym = $synNode.InnerText }
|
||||
} catch {
|
||||
# Ignore metadata parsing errors
|
||||
}
|
||||
}
|
||||
|
||||
if (-not $roleName) { $roleName = $roleFolderName }
|
||||
|
||||
# --- Parse Rights.xml ---
|
||||
[xml]$xml = Get-Content -Path $RightsPath -Encoding UTF8
|
||||
$root = $xml.DocumentElement
|
||||
$rightsNs = "http://v8.1c.ru/8.2/roles"
|
||||
|
||||
# Global flags
|
||||
$setForNew = $root.setForNewObjects
|
||||
$setForAttrs = $root.setForAttributesByDefault
|
||||
$independentChild = $root.independentRightsOfChildObjects
|
||||
|
||||
# --- Collect objects ---
|
||||
# Structure: grouped by type prefix, then by object short name
|
||||
$allowed = [ordered]@{} # type -> [ordered]@{ shortName -> [list of rights] }
|
||||
$denied = [ordered]@{} # type -> [ordered]@{ shortName -> [list of rights] }
|
||||
$rlsObjects = @()
|
||||
$totalAllowed = 0
|
||||
$totalDenied = 0
|
||||
|
||||
$objects = $root.GetElementsByTagName("object", $rightsNs)
|
||||
foreach ($obj in $objects) {
|
||||
$objName = ""
|
||||
$rights = @()
|
||||
|
||||
foreach ($child in $obj.ChildNodes) {
|
||||
if ($child.LocalName -eq "name" -and $child.NamespaceURI -eq $rightsNs) {
|
||||
$objName = $child.InnerText
|
||||
}
|
||||
if ($child.LocalName -eq "right" -and $child.NamespaceURI -eq $rightsNs) {
|
||||
$rName = ""
|
||||
$rValue = ""
|
||||
$hasRLS = $false
|
||||
foreach ($rc in $child.ChildNodes) {
|
||||
if ($rc.LocalName -eq "name") { $rName = $rc.InnerText }
|
||||
if ($rc.LocalName -eq "value") { $rValue = $rc.InnerText }
|
||||
if ($rc.LocalName -eq "restrictionByCondition") { $hasRLS = $true }
|
||||
}
|
||||
if ($rName -and $rValue) {
|
||||
$rights += @{ name = $rName; value = $rValue; rls = $hasRLS }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (-not $objName -or $rights.Count -eq 0) { continue }
|
||||
|
||||
# Split into type prefix and short name
|
||||
$dotIdx = $objName.IndexOf(".")
|
||||
if ($dotIdx -lt 0) { continue }
|
||||
$typePrefix = $objName.Substring(0, $dotIdx)
|
||||
$shortName = $objName.Substring($dotIdx + 1)
|
||||
|
||||
foreach ($r in $rights) {
|
||||
if ($r.value -eq "true") {
|
||||
$totalAllowed++
|
||||
if (-not $allowed.Contains($typePrefix)) {
|
||||
$allowed[$typePrefix] = [ordered]@{}
|
||||
}
|
||||
if (-not $allowed[$typePrefix].Contains($shortName)) {
|
||||
$allowed[$typePrefix][$shortName] = @()
|
||||
}
|
||||
$suffix = $r.name
|
||||
if ($r.rls) {
|
||||
$suffix += " [RLS]"
|
||||
$rlsObjects += "$typePrefix.$shortName ($($r.name))"
|
||||
}
|
||||
$allowed[$typePrefix][$shortName] += $suffix
|
||||
}
|
||||
else {
|
||||
$totalDenied++
|
||||
if (-not $denied.Contains($typePrefix)) {
|
||||
$denied[$typePrefix] = [ordered]@{}
|
||||
}
|
||||
if (-not $denied[$typePrefix].Contains($shortName)) {
|
||||
$denied[$typePrefix][$shortName] = @()
|
||||
}
|
||||
$denied[$typePrefix][$shortName] += $r.name
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# --- Restriction templates ---
|
||||
$templates = @()
|
||||
$tplNodes = $root.GetElementsByTagName("restrictionTemplate", $rightsNs)
|
||||
foreach ($tpl in $tplNodes) {
|
||||
foreach ($child in $tpl.ChildNodes) {
|
||||
if ($child.LocalName -eq "name") {
|
||||
$tName = $child.InnerText
|
||||
# Extract just the name part before parentheses
|
||||
$parenIdx = $tName.IndexOf("(")
|
||||
if ($parenIdx -gt 0) { $tName = $tName.Substring(0, $parenIdx) }
|
||||
$templates += $tName
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# --- Output ---
|
||||
$header = "=== Role: $roleName"
|
||||
if ($roleSynonym) { $header += " --- `"$roleSynonym`"" }
|
||||
$header += " ==="
|
||||
Out $header
|
||||
Out ""
|
||||
|
||||
Out "Properties: setForNewObjects=$setForNew, setForAttributesByDefault=$setForAttrs, independentRightsOfChildObjects=$independentChild"
|
||||
Out ""
|
||||
|
||||
# Helper: output group
|
||||
function OutGroup($objMap, [string]$prefix, [switch]$isDenied) {
|
||||
foreach ($shortName in @($objMap.Keys)) {
|
||||
if ($isDenied) {
|
||||
$rightsList = ($objMap[$shortName] | ForEach-Object { "-$_" }) -join ", "
|
||||
} else {
|
||||
$rightsList = $objMap[$shortName] -join ", "
|
||||
}
|
||||
Out " ${shortName}: $rightsList"
|
||||
}
|
||||
}
|
||||
|
||||
# Allowed rights grouped by type
|
||||
if ($allowed.Count -gt 0) {
|
||||
Out "Allowed rights:"
|
||||
Out ""
|
||||
foreach ($typePrefix in $allowed.Keys) {
|
||||
$objMap = $allowed[$typePrefix]
|
||||
Out " $typePrefix ($($objMap.Count)):"
|
||||
OutGroup $objMap $typePrefix
|
||||
Out ""
|
||||
}
|
||||
}
|
||||
else {
|
||||
Out "(no allowed rights)"
|
||||
Out ""
|
||||
}
|
||||
|
||||
# Denied rights
|
||||
if ($ShowDenied -and $denied.Count -gt 0) {
|
||||
Out "Denied rights:"
|
||||
Out ""
|
||||
foreach ($typePrefix in $denied.Keys) {
|
||||
$objMap = $denied[$typePrefix]
|
||||
Out " $typePrefix ($($objMap.Count)):"
|
||||
OutGroup $objMap $typePrefix -isDenied
|
||||
Out ""
|
||||
}
|
||||
}
|
||||
elseif ($totalDenied -gt 0) {
|
||||
Out "Denied: $totalDenied rights (use -ShowDenied to list)"
|
||||
Out ""
|
||||
}
|
||||
|
||||
# RLS summary
|
||||
if ($rlsObjects.Count -gt 0) {
|
||||
Out "RLS: $($rlsObjects.Count) restrictions"
|
||||
}
|
||||
|
||||
# Templates
|
||||
if ($templates.Count -gt 0) {
|
||||
Out "Templates: $($templates -join ', ')"
|
||||
}
|
||||
|
||||
Out ""
|
||||
Out "---"
|
||||
Out "Total: $totalAllowed allowed, $totalDenied denied"
|
||||
|
||||
# --- Pagination and output ---
|
||||
$totalLines = $script:lines.Count
|
||||
$lines = $script:lines
|
||||
|
||||
if ($Offset -gt 0) {
|
||||
if ($Offset -ge $totalLines) {
|
||||
Write-Host "[INFO] Offset $Offset exceeds total lines ($totalLines). Nothing to show."
|
||||
exit 0
|
||||
}
|
||||
$lines = $lines[$Offset..($totalLines - 1)]
|
||||
}
|
||||
|
||||
if ($Limit -gt 0 -and $lines.Count -gt $Limit) {
|
||||
$shown = $lines[0..($Limit - 1)]
|
||||
$remaining = $totalLines - $Offset - $Limit
|
||||
$shown += ""
|
||||
$shown += "[TRUNCATED] Shown $Limit of $totalLines lines. Use -Offset $($Offset + $Limit) to continue."
|
||||
$lines = $shown
|
||||
}
|
||||
|
||||
if ($OutFile) {
|
||||
if (-not [System.IO.Path]::IsPathRooted($OutFile)) {
|
||||
$OutFile = Join-Path (Get-Location).Path $OutFile
|
||||
}
|
||||
$utf8 = New-Object System.Text.UTF8Encoding($true)
|
||||
[System.IO.File]::WriteAllLines($OutFile, $lines, $utf8)
|
||||
Write-Host "Output written to $OutFile"
|
||||
} else {
|
||||
foreach ($l in $lines) { Write-Host $l }
|
||||
}
|
||||
@@ -21,7 +21,8 @@
|
||||
|--------|--------|----------|------|
|
||||
| Внешние обработки (EPF) | 10 навыков `/epf-*` | Создание, модификация, сборка обработок из XML-исходников | [Подробнее](docs/epf-guide.md) |
|
||||
| Табличный документ (MXL) | 4 навыка `/mxl-*` | Анализ, создание, компиляция макетов печатных форм | [Подробнее](docs/mxl-guide.md) |
|
||||
| Управляемые формы (Form) | 4 навыка `/form-*` | Анализ, генерация, модификация, валидация управляемых форм | [Подробнее](docs/form-guide.md) |
|
||||
| Управляемые формы (Form) | 6 навыков `/form-*` | Создание, анализ, генерация, модификация, валидация управляемых форм | [Подробнее](docs/form-guide.md) |
|
||||
| Роли (Role) | 2 навыка `/role-*` | Анализ прав роли, создание роли из описания | [Подробнее](docs/role-guide.md) |
|
||||
| Утилиты | `/img-grid` | Наложение сетки на изображение для определения пропорций колонок | — |
|
||||
|
||||
## Требования
|
||||
@@ -38,6 +39,7 @@
|
||||
- [Табличный документ (MXL)](docs/1c-spreadsheet-spec.md) — XML-формат SpreadsheetDocument, совместимость версий
|
||||
- [MXL DSL](docs/mxl-dsl-spec.md) — JSON-формат описания макета для `/mxl-compile` и `/mxl-decompile`
|
||||
- [Form DSL](docs/form-dsl-spec.md) — JSON-формат описания формы для `/form-compile`
|
||||
- [Роли (Rights.xml)](docs/1c-role-spec.md) — XML-формат прав роли, типы объектов, RLS
|
||||
|
||||
## Структура репозитория
|
||||
|
||||
@@ -57,20 +59,26 @@
|
||||
├── mxl-validate/ # Валидация макета
|
||||
├── mxl-compile/ # Компиляция макета из JSON
|
||||
├── mxl-decompile/ # Декомпиляция макета в JSON
|
||||
├── form-add/ # Добавление формы к объекту конфигурации
|
||||
├── form-info/ # Анализ структуры управляемой формы
|
||||
├── form-compile/ # Компиляция формы из JSON
|
||||
├── form-validate/ # Валидация формы
|
||||
├── form-add/ # Добавление элементов в форму
|
||||
├── form-edit/ # Добавление элементов в форму
|
||||
├── form-patterns/ # Справочник паттернов компоновки форм
|
||||
├── role-info/ # Анализ прав роли
|
||||
├── role-compile/ # Создание роли из описания
|
||||
└── img-grid/ # Сетка для анализа изображений
|
||||
docs/
|
||||
├── epf-guide.md # Гайд: внешние обработки
|
||||
├── mxl-guide.md # Гайд: табличный документ
|
||||
├── form-guide.md # Гайд: управляемые формы
|
||||
├── role-guide.md # Гайд: роли
|
||||
├── 1c-xml-format-spec.md # Спецификация XML-формата
|
||||
├── 1c-form-spec.md # Спецификация управляемых форм
|
||||
├── 1c-help-spec.md # Спецификация встроенной справки
|
||||
├── build-spec.md # Спецификация сборки/разборки
|
||||
├── 1c-spreadsheet-spec.md # Спецификация табличного документа
|
||||
├── mxl-dsl-spec.md # Спецификация MXL DSL
|
||||
└── form-dsl-spec.md # Спецификация Form DSL
|
||||
├── form-dsl-spec.md # Спецификация Form DSL
|
||||
└── 1c-role-spec.md # Спецификация ролей (Rights.xml)
|
||||
```
|
||||
|
||||
@@ -5,6 +5,157 @@
|
||||
|
||||
---
|
||||
|
||||
## 0. Файловая структура и регистрация
|
||||
|
||||
### Файлы формы
|
||||
|
||||
Каждая форма объекта конфигурации состоит из 3 файлов:
|
||||
|
||||
```
|
||||
<Объект>/Forms/
|
||||
ИмяФормы.xml ← метаданные (UUID, имя, синоним, FormType)
|
||||
ИмяФормы/
|
||||
Ext/
|
||||
Form.xml ← определение формы (описано в разделах 1–17)
|
||||
Form/
|
||||
Module.bsl ← модуль формы (1С-код)
|
||||
```
|
||||
|
||||
Общие формы (CommonForm) — аналогично, но на верхнем уровне конфигурации:
|
||||
|
||||
```
|
||||
CommonForms/
|
||||
ИмяФормы.xml ← метаданные (тег <CommonForm>)
|
||||
ИмяФормы/
|
||||
Ext/
|
||||
Form.xml
|
||||
Form/
|
||||
Module.bsl
|
||||
```
|
||||
|
||||
### Метаданные формы — шаблон
|
||||
|
||||
#### Форма объекта (Document, Catalog, DataProcessor, Report, ...)
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses"
|
||||
xmlns:app="http://v8.1c.ru/8.2/managed-application/core"
|
||||
xmlns:v8="http://v8.1c.ru/8.1/data/core"
|
||||
xmlns:xr="http://v8.1c.ru/8.3/xcf/readable"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
version="2.17">
|
||||
<Form uuid="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX">
|
||||
<Properties>
|
||||
<Name>ИмяФормы</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Отображаемое имя</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<FormType>Managed</FormType>
|
||||
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||
<UsePurposes>
|
||||
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
|
||||
<v8:Value xsi:type="app:ApplicationUsePurpose">MobilePlatformApplication</v8:Value>
|
||||
</UsePurposes>
|
||||
</Properties>
|
||||
</Form>
|
||||
</MetaDataObject>
|
||||
```
|
||||
|
||||
#### CommonForm
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses"
|
||||
xmlns:app="http://v8.1c.ru/8.2/managed-application/core"
|
||||
xmlns:v8="http://v8.1c.ru/8.1/data/core"
|
||||
xmlns:xr="http://v8.1c.ru/8.3/xcf/readable"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
version="2.17">
|
||||
<CommonForm uuid="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX">
|
||||
<Properties>
|
||||
<Name>ИмяФормы</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Отображаемое имя</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<FormType>Managed</FormType>
|
||||
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||
<UseStandardCommands>false</UseStandardCommands>
|
||||
<ExtendedPresentation/>
|
||||
<Explanation/>
|
||||
<UsePurposes>
|
||||
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
|
||||
<v8:Value xsi:type="app:ApplicationUsePurpose">MobilePlatformApplication</v8:Value>
|
||||
</UsePurposes>
|
||||
</Properties>
|
||||
</CommonForm>
|
||||
</MetaDataObject>
|
||||
```
|
||||
|
||||
### Регистрация формы
|
||||
|
||||
#### В ChildObjects родительского объекта
|
||||
|
||||
```xml
|
||||
<!-- В файле Documents/АвансовыйОтчет.xml (или Catalogs/Контрагенты.xml и т.д.) -->
|
||||
<ChildObjects>
|
||||
<Form>ФормаДокумента</Form>
|
||||
<Form>ФормаСписка</Form>
|
||||
...
|
||||
</ChildObjects>
|
||||
```
|
||||
|
||||
CommonForms регистрируются в `Configuration.xml`:
|
||||
|
||||
```xml
|
||||
<ChildObjects>
|
||||
<CommonForm>ИмяФормы</CommonForm>
|
||||
...
|
||||
</ChildObjects>
|
||||
```
|
||||
|
||||
#### DefaultForm в Properties родительского объекта
|
||||
|
||||
Формат значения: `ТипОбъекта.ИмяОбъекта.Form.ИмяФормы`
|
||||
|
||||
```xml
|
||||
<Properties>
|
||||
<DefaultObjectForm>Document.АвансовыйОтчет.Form.ФормаДокумента</DefaultObjectForm>
|
||||
<DefaultListForm>Document.АвансовыйОтчет.Form.ФормаСписка</DefaultListForm>
|
||||
<DefaultChoiceForm>Document.АвансовыйОтчет.Form.ФормаВыбора</DefaultChoiceForm>
|
||||
</Properties>
|
||||
```
|
||||
|
||||
#### Свойства DefaultForm по типам объектов
|
||||
|
||||
| Тип объекта | Свойства DefaultForm |
|
||||
|-------------|---------------------|
|
||||
| Document | DefaultObjectForm, DefaultListForm, DefaultChoiceForm |
|
||||
| Catalog | DefaultObjectForm, DefaultFolderForm, DefaultListForm, DefaultChoiceForm, DefaultFolderChoiceForm |
|
||||
| ChartOfCharacteristicTypes | DefaultObjectForm, DefaultFolderForm, DefaultListForm, DefaultChoiceForm, DefaultFolderChoiceForm |
|
||||
| ChartOfAccounts | DefaultObjectForm, DefaultListForm, DefaultChoiceForm |
|
||||
| DataProcessor | DefaultForm |
|
||||
| Report | DefaultForm |
|
||||
| InformationRegister | DefaultRecordForm, DefaultListForm |
|
||||
| ExchangePlan | DefaultObjectForm, DefaultListForm, DefaultChoiceForm |
|
||||
| BusinessProcess | DefaultObjectForm, DefaultListForm, DefaultChoiceForm |
|
||||
| Task | DefaultObjectForm, DefaultListForm, DefaultChoiceForm |
|
||||
| CommonForm | — (регистрируется в Configuration.xml, нет DefaultForm) |
|
||||
|
||||
> Report.DefaultForm может указывать на общую форму: `CommonForm.ФормаОтчета`.
|
||||
|
||||
---
|
||||
|
||||
## 1. Корневой элемент
|
||||
|
||||
```xml
|
||||
|
||||
@@ -0,0 +1,845 @@
|
||||
# Спецификация формата ролей 1С:Предприятия 8.3
|
||||
|
||||
Полное описание XML-формата ролей в выгрузке конфигурации. Версии формата: 2.17 (платформа 8.3.20–8.3.24), 2.20 (8.3.27+). Структура идентична, отличается только атрибут `version`.
|
||||
|
||||
## Файловая структура
|
||||
|
||||
Каждая роль состоит из двух файлов:
|
||||
|
||||
```
|
||||
Roles/
|
||||
ИмяРоли.xml ← метаданные (uuid, имя, синоним)
|
||||
ИмяРоли/
|
||||
Ext/
|
||||
Rights.xml ← определение прав
|
||||
```
|
||||
|
||||
## Регистрация роли в конфигурации
|
||||
|
||||
При создании роли необходимо прописать ссылки в следующих местах:
|
||||
|
||||
### Configuration.xml — ChildObjects
|
||||
|
||||
Регистрация объекта в составе конфигурации:
|
||||
|
||||
```xml
|
||||
<ChildObjects>
|
||||
...
|
||||
<Role>ИмяРоли</Role>
|
||||
...
|
||||
</ChildObjects>
|
||||
```
|
||||
|
||||
Элементы `<Role>` располагаются среди других объектов конфигурации в секции `<ChildObjects>`.
|
||||
|
||||
### Configuration.xml — DefaultRoles (опционально)
|
||||
|
||||
Если роль должна назначаться новым пользователям по умолчанию:
|
||||
|
||||
```xml
|
||||
<DefaultRoles>
|
||||
<xr:Item xsi:type="xr:MDObjectRef">Role.ИмяРоли</xr:Item>
|
||||
</DefaultRoles>
|
||||
```
|
||||
|
||||
### Form.xml — права редактирования реквизитов (опционально)
|
||||
|
||||
В формах роль может упоминаться для ограничения редактирования реквизитов:
|
||||
|
||||
```xml
|
||||
<Attribute>
|
||||
<Edit>
|
||||
<xr:Common>false</xr:Common>
|
||||
<xr:Value name="Role.ИмяРоли">true</xr:Value>
|
||||
</Edit>
|
||||
</Attribute>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Файл метаданных: Roles/ИмяРоли.xml
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses"
|
||||
xmlns:app="http://v8.1c.ru/8.2/managed-application/core"
|
||||
xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config"
|
||||
xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi"
|
||||
xmlns:ent="http://v8.1c.ru/8.1/data/enterprise"
|
||||
xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform"
|
||||
xmlns:style="http://v8.1c.ru/8.1/data/ui/style"
|
||||
xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system"
|
||||
xmlns:v8="http://v8.1c.ru/8.1/data/core"
|
||||
xmlns:v8ui="http://v8.1c.ru/8.1/data/ui"
|
||||
xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web"
|
||||
xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows"
|
||||
xmlns:xen="http://v8.1c.ru/8.3/xcf/enums"
|
||||
xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef"
|
||||
xmlns:xr="http://v8.1c.ru/8.3/xcf/readable"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
version="2.17">
|
||||
<Role uuid="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX">
|
||||
<Properties>
|
||||
<Name>ИмяРоли</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Отображаемое имя роли</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
</Properties>
|
||||
</Role>
|
||||
</MetaDataObject>
|
||||
```
|
||||
|
||||
### Элементы
|
||||
|
||||
| Элемент | Обязательный | Описание |
|
||||
|---------|:------------:|----------|
|
||||
| `Role/@uuid` | да | UUID роли (формат `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`) |
|
||||
| `Name` | да | Программное имя роли (идентификатор, латиница/кириллица) |
|
||||
| `Synonym` | да | Мультиязычное отображаемое имя (один или несколько `v8:item`) |
|
||||
| `Comment` | да | Комментарий (может быть пустым `<Comment/>`) |
|
||||
|
||||
### Namespace
|
||||
|
||||
Основной: `http://v8.1c.ru/8.3/MDClasses`
|
||||
Мультиязычные строки: `v8` = `http://v8.1c.ru/8.1/data/core`
|
||||
|
||||
---
|
||||
|
||||
## Файл прав: Roles/ИмяРоли/Ext/Rights.xml
|
||||
|
||||
### Корневой элемент
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Rights xmlns="http://v8.1c.ru/8.2/roles"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:type="Rights"
|
||||
version="2.17">
|
||||
<setForNewObjects>false</setForNewObjects>
|
||||
<setForAttributesByDefault>true</setForAttributesByDefault>
|
||||
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
|
||||
|
||||
<object>...</object>
|
||||
...
|
||||
|
||||
<restrictionTemplate>...</restrictionTemplate>
|
||||
...
|
||||
</Rights>
|
||||
```
|
||||
|
||||
### Namespace
|
||||
|
||||
`http://v8.1c.ru/8.2/roles` (NB: 8.2, а не 8.3 — исторически)
|
||||
|
||||
### Глобальные флаги
|
||||
|
||||
| Флаг | Тип | По умолчанию | Описание |
|
||||
|------|-----|:------------:|----------|
|
||||
| `setForNewObjects` | boolean | false | Устанавливать права для новых объектов конфигурации |
|
||||
| `setForAttributesByDefault` | boolean | true | Устанавливать права для реквизитов по умолчанию |
|
||||
| `independentRightsOfChildObjects` | boolean | false | Независимые права подчинённых объектов |
|
||||
|
||||
### Структура блока `<object>`
|
||||
|
||||
```xml
|
||||
<object>
|
||||
<name>ТипОбъекта.ИмяОбъекта</name>
|
||||
<right>
|
||||
<name>ИмяПрава</name>
|
||||
<value>true</value>
|
||||
</right>
|
||||
<right>
|
||||
<name>ИмяПрава</name>
|
||||
<value>true</value>
|
||||
<restrictionByCondition>
|
||||
<condition>Текст условия RLS</condition>
|
||||
</restrictionByCondition>
|
||||
</right>
|
||||
</object>
|
||||
```
|
||||
|
||||
| Элемент | Обязательный | Описание |
|
||||
|---------|:------------:|----------|
|
||||
| `object/name` | да | Полное имя объекта метаданных (dot-нотация) |
|
||||
| `right/name` | да | Имя права (см. таблицы ниже) |
|
||||
| `right/value` | да | `true` или `false` |
|
||||
| `right/restrictionByCondition` | нет | Ограничение на уровне записей (RLS) |
|
||||
| `restrictionByCondition/condition` | да | Текст условия на языке шаблонов ограничений |
|
||||
|
||||
### Именование объектов (dot-нотация)
|
||||
|
||||
Объекты адресуются иерархически через точку:
|
||||
|
||||
```
|
||||
ТипОбъекта.ИмяОбъекта[.ТипВложенного[.ИмяВложенного[...]]]
|
||||
```
|
||||
|
||||
#### Верхний уровень — объекты метаданных
|
||||
|
||||
```
|
||||
Catalog.Контрагенты
|
||||
Document.РеализацияТоваровУслуг
|
||||
InformationRegister.ЦеныНоменклатуры
|
||||
DataProcessor.ЗагрузкаДанных
|
||||
Report.АнализПродаж
|
||||
Configuration.ИмяКонфигурации
|
||||
```
|
||||
|
||||
#### Стандартные реквизиты
|
||||
|
||||
```
|
||||
Catalog.Контрагенты.StandardAttribute.Code
|
||||
Catalog.Контрагенты.StandardAttribute.Description
|
||||
Catalog.Контрагенты.StandardAttribute.DeletionMark
|
||||
Catalog.Контрагенты.StandardAttribute.Predefined
|
||||
Catalog.Контрагенты.StandardAttribute.PredefinedDataName
|
||||
Catalog.Контрагенты.StandardAttribute.Ref
|
||||
Catalog.Контрагенты.StandardAttribute.IsFolder
|
||||
Catalog.Контрагенты.StandardAttribute.Parent
|
||||
Catalog.Контрагенты.StandardAttribute.Owner
|
||||
Document.Реализация.StandardAttribute.Posted
|
||||
Document.Реализация.StandardAttribute.Date
|
||||
Document.Реализация.StandardAttribute.Number
|
||||
```
|
||||
|
||||
#### Реквизиты
|
||||
|
||||
```
|
||||
Catalog.Контрагенты.Attribute.ИНН
|
||||
Document.Реализация.Attribute.Организация
|
||||
```
|
||||
|
||||
#### Табличные части и их реквизиты
|
||||
|
||||
```
|
||||
Document.Реализация.TabularSection.Товары
|
||||
Document.Реализация.TabularSection.Товары.Attribute.Номенклатура
|
||||
Document.Реализация.TabularSection.Товары.StandardAttribute.LineNumber
|
||||
```
|
||||
|
||||
#### Измерения, ресурсы, реквизиты регистров
|
||||
|
||||
```
|
||||
InformationRegister.Цены.Dimension.Номенклатура
|
||||
InformationRegister.Цены.Resource.Цена
|
||||
AccumulationRegister.Остатки.Attribute.ДатаОперации
|
||||
AccountingRegister.Хозрасчетный.Dimension.Организация
|
||||
```
|
||||
|
||||
#### Команды
|
||||
|
||||
```
|
||||
Catalog.Контрагенты.Command.ОткрытьКарточку
|
||||
DataProcessor.Обработка.Command.Выполнить
|
||||
CommonCommand.УправлениеОборудованием
|
||||
```
|
||||
|
||||
#### Реквизиты адресации (бизнес-процессы/задачи)
|
||||
|
||||
```
|
||||
Task.ЗадачаИсполнителя.AddressingAttribute.Исполнитель
|
||||
Task.ЗадачаИсполнителя.AddressingAttribute.ОсновнойОбъектАдресации
|
||||
```
|
||||
|
||||
#### Операции веб-сервисов
|
||||
|
||||
```
|
||||
WebService.Exchange.Operation.GetIBParameters
|
||||
HTTPService.ЭДО.URLTemplate.Документы.Method.POST
|
||||
```
|
||||
|
||||
#### Вложенные подсистемы
|
||||
|
||||
```
|
||||
Subsystem.Администрирование.Subsystem.Пользователи
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Полный каталог прав по типам объектов
|
||||
|
||||
### Права объектов верхнего уровня
|
||||
|
||||
#### Configuration
|
||||
|
||||
Права конфигурации в целом. Объект: `Configuration.ИмяКонфигурации`.
|
||||
|
||||
| Право | Описание |
|
||||
|-------|----------|
|
||||
| `Administration` | Администрирование |
|
||||
| `DataAdministration` | Администрирование данных |
|
||||
| `UpdateDataBaseConfiguration` | Обновление конфигурации БД |
|
||||
| `ConfigurationExtensionsAdministration` | Администрирование расширений |
|
||||
| `ActiveUsers` | Активные пользователи |
|
||||
| `EventLog` | Журнал регистрации |
|
||||
| `ExclusiveMode` | Монопольный режим |
|
||||
| `ThinClient` | Тонкий клиент |
|
||||
| `ThickClient` | Толстый клиент |
|
||||
| `WebClient` | Веб-клиент |
|
||||
| `MobileClient` | Мобильный клиент |
|
||||
| `ExternalConnection` | Внешнее соединение |
|
||||
| `Automation` | Automation (COM) |
|
||||
| `Output` | Вывод (печать, сохранение, копирование) |
|
||||
| `SaveUserData` | Сохранение данных пользователя |
|
||||
| `TechnicalSpecialistMode` | Режим технического специалиста |
|
||||
| `InteractiveOpenExtDataProcessors` | Интерактивное открытие внешних обработок |
|
||||
| `InteractiveOpenExtReports` | Интерактивное открытие внешних отчётов |
|
||||
| `AnalyticsSystemClient` | Клиент системы аналитики |
|
||||
| `CollaborationSystemInfoBaseRegistration` | Регистрация ИБ в системе взаимодействия |
|
||||
| `MainWindowModeNormal` | Режим обычного окна |
|
||||
| `MainWindowModeWorkplace` | Режим рабочего места |
|
||||
| `MainWindowModeEmbeddedWorkplace` | Режим встроенного рабочего места |
|
||||
| `MainWindowModeFullscreenWorkplace` | Режим полноэкранного рабочего места |
|
||||
| `MainWindowModeKiosk` | Режим киоска |
|
||||
|
||||
#### Catalog
|
||||
|
||||
| Право | Описание |
|
||||
|-------|----------|
|
||||
| `Read` | Чтение |
|
||||
| `Insert` | Добавление |
|
||||
| `Update` | Изменение |
|
||||
| `Delete` | Удаление |
|
||||
| `View` | Просмотр |
|
||||
| `Edit` | Редактирование |
|
||||
| `InputByString` | Ввод по строке |
|
||||
| `InteractiveInsert` | Интерактивное добавление |
|
||||
| `InteractiveSetDeletionMark` | Интерактивная пометка удаления |
|
||||
| `InteractiveClearDeletionMark` | Интерактивное снятие пометки удаления |
|
||||
| `InteractiveDelete` | Интерактивное удаление |
|
||||
| `InteractiveDeleteMarked` | Интерактивное удаление помеченных |
|
||||
| `InteractiveDeletePredefinedData` | Интерактивное удаление предопределённых |
|
||||
| `InteractiveSetDeletionMarkPredefinedData` | Пометка удаления предопределённых |
|
||||
| `InteractiveClearDeletionMarkPredefinedData` | Снятие пометки удаления предопределённых |
|
||||
| `InteractiveDeleteMarkedPredefinedData` | Удаление помеченных предопределённых |
|
||||
| `ReadDataHistory` | Чтение истории данных |
|
||||
| `ViewDataHistory` | Просмотр истории данных |
|
||||
| `UpdateDataHistory` | Обновление истории данных |
|
||||
| `UpdateDataHistoryOfMissingData` | Обновление истории отсутствующих данных |
|
||||
| `ReadDataHistoryOfMissingData` | Чтение истории отсутствующих данных |
|
||||
| `UpdateDataHistorySettings` | Обновление настроек истории данных |
|
||||
| `UpdateDataHistoryVersionComment` | Обновление комментария версии |
|
||||
| `EditDataHistoryVersionComment` | Редактирование комментария версии |
|
||||
| `SwitchToDataHistoryVersion` | Переход к версии истории данных |
|
||||
|
||||
#### Document
|
||||
|
||||
Все права Catalog (кроме предопределённых) плюс:
|
||||
|
||||
| Право | Описание |
|
||||
|-------|----------|
|
||||
| `Posting` | Проведение |
|
||||
| `UndoPosting` | Отмена проведения |
|
||||
| `InteractivePosting` | Интерактивное проведение |
|
||||
| `InteractivePostingRegular` | Интерактивное проведение (неоперативное) |
|
||||
| `InteractiveUndoPosting` | Интерактивная отмена проведения |
|
||||
| `InteractiveChangeOfPosted` | Интерактивное изменение проведённых |
|
||||
|
||||
#### InformationRegister
|
||||
|
||||
| Право | Описание |
|
||||
|-------|----------|
|
||||
| `Read` | Чтение |
|
||||
| `Update` | Изменение |
|
||||
| `View` | Просмотр |
|
||||
| `Edit` | Редактирование |
|
||||
| `TotalsControl` | Управление итогами (для периодических) |
|
||||
| `ReadDataHistory` | Чтение истории данных |
|
||||
| `ViewDataHistory` | Просмотр истории данных |
|
||||
| `UpdateDataHistory` | Обновление истории данных |
|
||||
| `UpdateDataHistoryOfMissingData` | Обновление истории отсутствующих данных |
|
||||
| `ReadDataHistoryOfMissingData` | Чтение истории отсутствующих данных |
|
||||
| `UpdateDataHistorySettings` | Настройки истории данных |
|
||||
| `UpdateDataHistoryVersionComment` | Обновление комментария версии |
|
||||
| `EditDataHistoryVersionComment` | Редактирование комментария версии |
|
||||
| `SwitchToDataHistoryVersion` | Переход к версии |
|
||||
|
||||
#### AccumulationRegister
|
||||
|
||||
| Право | Описание |
|
||||
|-------|----------|
|
||||
| `Read` | Чтение |
|
||||
| `Update` | Изменение |
|
||||
| `View` | Просмотр |
|
||||
| `Edit` | Редактирование |
|
||||
| `TotalsControl` | Управление итогами |
|
||||
|
||||
#### AccountingRegister
|
||||
|
||||
| Право | Описание |
|
||||
|-------|----------|
|
||||
| `Read` | Чтение |
|
||||
| `Update` | Изменение |
|
||||
| `View` | Просмотр |
|
||||
| `Edit` | Редактирование |
|
||||
| `TotalsControl` | Управление итогами |
|
||||
|
||||
#### CalculationRegister
|
||||
|
||||
| Право | Описание |
|
||||
|-------|----------|
|
||||
| `Read` | Чтение |
|
||||
| `View` | Просмотр |
|
||||
|
||||
#### Constant
|
||||
|
||||
| Право | Описание |
|
||||
|-------|----------|
|
||||
| `Read` | Чтение |
|
||||
| `Update` | Изменение |
|
||||
| `View` | Просмотр |
|
||||
| `Edit` | Редактирование |
|
||||
| `ReadDataHistory` | Чтение истории данных |
|
||||
| `ViewDataHistory` | Просмотр истории данных |
|
||||
| `UpdateDataHistory` | Обновление истории данных |
|
||||
| `UpdateDataHistorySettings` | Настройки истории данных |
|
||||
| `UpdateDataHistoryVersionComment` | Обновление комментария версии |
|
||||
| `EditDataHistoryVersionComment` | Редактирование комментария версии |
|
||||
| `SwitchToDataHistoryVersion` | Переход к версии |
|
||||
|
||||
#### ChartOfAccounts
|
||||
|
||||
| Право | Описание |
|
||||
|-------|----------|
|
||||
| `Read` | Чтение |
|
||||
| `Insert` | Добавление |
|
||||
| `Update` | Изменение |
|
||||
| `Delete` | Удаление |
|
||||
| `View` | Просмотр |
|
||||
| `Edit` | Редактирование |
|
||||
| `InputByString` | Ввод по строке |
|
||||
| `InteractiveInsert` | Интерактивное добавление |
|
||||
| `InteractiveSetDeletionMark` | Пометка удаления |
|
||||
| `InteractiveClearDeletionMark` | Снятие пометки удаления |
|
||||
| `InteractiveDelete` | Интерактивное удаление |
|
||||
| `InteractiveDeletePredefinedData` | Удаление предопределённых |
|
||||
| `InteractiveSetDeletionMarkPredefinedData` | Пометка удаления предопределённых |
|
||||
| `InteractiveClearDeletionMarkPredefinedData` | Снятие пометки удаления предопределённых |
|
||||
| `InteractiveDeleteMarkedPredefinedData` | Удаление помеченных предопределённых |
|
||||
| `ReadDataHistory` | Чтение истории данных |
|
||||
| `ReadDataHistoryOfMissingData` | Чтение истории отсутствующих данных |
|
||||
| `UpdateDataHistory` | Обновление истории данных |
|
||||
| `UpdateDataHistoryOfMissingData` | Обновление истории отсутствующих данных |
|
||||
| `UpdateDataHistorySettings` | Настройки истории данных |
|
||||
| `UpdateDataHistoryVersionComment` | Обновление комментария версии |
|
||||
|
||||
#### ChartOfCharacteristicTypes
|
||||
|
||||
Аналогично ChartOfAccounts, плюс:
|
||||
|
||||
| Право | Описание |
|
||||
|-------|----------|
|
||||
| `InteractiveDeleteMarked` | Интерактивное удаление помеченных |
|
||||
| `EditDataHistoryVersionComment` | Редактирование комментария версии |
|
||||
| `SwitchToDataHistoryVersion` | Переход к версии |
|
||||
| `ViewDataHistory` | Просмотр истории данных |
|
||||
|
||||
#### ChartOfCalculationTypes
|
||||
|
||||
| Право | Описание |
|
||||
|-------|----------|
|
||||
| `Read` | Чтение |
|
||||
| `Insert` | Добавление |
|
||||
| `Update` | Изменение |
|
||||
| `Delete` | Удаление |
|
||||
| `View` | Просмотр |
|
||||
| `Edit` | Редактирование |
|
||||
| `InputByString` | Ввод по строке |
|
||||
| `InteractiveInsert` | Интерактивное добавление |
|
||||
| `InteractiveSetDeletionMark` | Пометка удаления |
|
||||
| `InteractiveClearDeletionMark` | Снятие пометки удаления |
|
||||
| `InteractiveDelete` | Интерактивное удаление |
|
||||
| `InteractiveDeletePredefinedData` | Удаление предопределённых |
|
||||
| `InteractiveSetDeletionMarkPredefinedData` | Пометка удаления предопределённых |
|
||||
| `InteractiveClearDeletionMarkPredefinedData` | Снятие пометки предопределённых |
|
||||
| `InteractiveDeleteMarkedPredefinedData` | Удаление помеченных предопределённых |
|
||||
|
||||
#### ExchangePlan
|
||||
|
||||
| Право | Описание |
|
||||
|-------|----------|
|
||||
| `Read` | Чтение |
|
||||
| `Insert` | Добавление |
|
||||
| `Update` | Изменение |
|
||||
| `Delete` | Удаление |
|
||||
| `View` | Просмотр |
|
||||
| `Edit` | Редактирование |
|
||||
| `InputByString` | Ввод по строке |
|
||||
| `InteractiveInsert` | Интерактивное добавление |
|
||||
| `InteractiveSetDeletionMark` | Пометка удаления |
|
||||
| `InteractiveClearDeletionMark` | Снятие пометки удаления |
|
||||
| `InteractiveDelete` | Интерактивное удаление |
|
||||
| `InteractiveDeleteMarked` | Удаление помеченных |
|
||||
| `ReadDataHistory` | Чтение истории данных |
|
||||
| `ViewDataHistory` | Просмотр истории данных |
|
||||
| `UpdateDataHistory` | Обновление истории данных |
|
||||
| `ReadDataHistoryOfMissingData` | Чтение истории отсутствующих |
|
||||
| `UpdateDataHistoryOfMissingData` | Обновление истории отсутствующих |
|
||||
| `UpdateDataHistorySettings` | Настройки истории данных |
|
||||
| `UpdateDataHistoryVersionComment` | Обновление комментария версии |
|
||||
| `EditDataHistoryVersionComment` | Редактирование комментария версии |
|
||||
| `SwitchToDataHistoryVersion` | Переход к версии |
|
||||
|
||||
#### BusinessProcess
|
||||
|
||||
| Право | Описание |
|
||||
|-------|----------|
|
||||
| `Read` | Чтение |
|
||||
| `Insert` | Добавление |
|
||||
| `Update` | Изменение |
|
||||
| `Delete` | Удаление |
|
||||
| `View` | Просмотр |
|
||||
| `Edit` | Редактирование |
|
||||
| `InputByString` | Ввод по строке |
|
||||
| `Start` | Старт |
|
||||
| `InteractiveInsert` | Интерактивное добавление |
|
||||
| `InteractiveSetDeletionMark` | Пометка удаления |
|
||||
| `InteractiveClearDeletionMark` | Снятие пометки удаления |
|
||||
| `InteractiveDelete` | Интерактивное удаление |
|
||||
| `InteractiveActivate` | Интерактивная активация |
|
||||
| `InteractiveStart` | Интерактивный старт |
|
||||
|
||||
#### Task
|
||||
|
||||
| Право | Описание |
|
||||
|-------|----------|
|
||||
| `Read` | Чтение |
|
||||
| `Insert` | Добавление |
|
||||
| `Update` | Изменение |
|
||||
| `Delete` | Удаление |
|
||||
| `View` | Просмотр |
|
||||
| `Edit` | Редактирование |
|
||||
| `InputByString` | Ввод по строке |
|
||||
| `Execute` | Выполнение |
|
||||
| `InteractiveInsert` | Интерактивное добавление |
|
||||
| `InteractiveSetDeletionMark` | Пометка удаления |
|
||||
| `InteractiveClearDeletionMark` | Снятие пометки удаления |
|
||||
| `InteractiveDelete` | Интерактивное удаление |
|
||||
| `InteractiveActivate` | Интерактивная активация |
|
||||
| `InteractiveExecute` | Интерактивное выполнение |
|
||||
|
||||
#### Простые типы (одно-два права)
|
||||
|
||||
| Тип объекта | Права |
|
||||
|-------------|-------|
|
||||
| `DataProcessor` | Use, View |
|
||||
| `Report` | Use, View |
|
||||
| `CommonForm` | View |
|
||||
| `CommonCommand` | View |
|
||||
| `Subsystem` | View |
|
||||
| `FilterCriterion` | View |
|
||||
| `DocumentJournal` | Read, View |
|
||||
| `Sequence` | Read, Update |
|
||||
| `WebService` | Use |
|
||||
| `HTTPService` | Use |
|
||||
| `IntegrationService` | Use |
|
||||
| `SessionParameter` | Get, Set |
|
||||
| `CommonAttribute` | View, Edit |
|
||||
|
||||
#### Типы объектов БЕЗ прав в ролях
|
||||
|
||||
Следующие типы не фигурируют в Rights.xml (права не применимы или управляются иначе):
|
||||
|
||||
- `Enum` (перечисления)
|
||||
- `FunctionalOption`
|
||||
- `DefinedType`
|
||||
- `CommonModule`
|
||||
- `CommonPicture`
|
||||
- `CommonTemplate`
|
||||
- `SettingsStorage`
|
||||
- `ExternalDataSource`
|
||||
|
||||
---
|
||||
|
||||
### Права вложенных объектов
|
||||
|
||||
Права можно задавать не только на уровне объекта, но и на уровне его составных частей.
|
||||
|
||||
#### Реквизиты и стандартные реквизиты
|
||||
|
||||
Доступные права: `View`, `Edit`
|
||||
|
||||
```xml
|
||||
<object>
|
||||
<name>Catalog.Контрагенты.StandardAttribute.PredefinedDataName</name>
|
||||
<right>
|
||||
<name>View</name>
|
||||
<value>false</value>
|
||||
</right>
|
||||
<right>
|
||||
<name>Edit</name>
|
||||
<value>false</value>
|
||||
</right>
|
||||
</object>
|
||||
```
|
||||
|
||||
Применимо к:
|
||||
- `*.StandardAttribute.*` — стандартные реквизиты
|
||||
- `*.Attribute.*` — реквизиты
|
||||
- `*.TabularSection.*` — табличные части (целиком)
|
||||
- `*.TabularSection.*.Attribute.*` — реквизиты табличных частей
|
||||
- `*.TabularSection.*.StandardAttribute.*` — стандартные реквизиты табличных частей
|
||||
|
||||
#### Измерения, ресурсы регистров
|
||||
|
||||
Доступные права: `View`, `Edit`
|
||||
|
||||
```xml
|
||||
<object>
|
||||
<name>InformationRegister.Цены.Dimension.Номенклатура</name>
|
||||
<right>
|
||||
<name>Edit</name>
|
||||
<value>false</value>
|
||||
</right>
|
||||
</object>
|
||||
```
|
||||
|
||||
Применимо к:
|
||||
- `*Register.*.Dimension.*`
|
||||
- `*Register.*.Resource.*`
|
||||
- `*Register.*.Attribute.*`
|
||||
|
||||
#### Команды
|
||||
|
||||
Доступные права: `View`
|
||||
|
||||
```xml
|
||||
<object>
|
||||
<name>Catalog.Контрагенты.Command.ОткрытьКарточку</name>
|
||||
<right>
|
||||
<name>View</name>
|
||||
<value>false</value>
|
||||
</right>
|
||||
</object>
|
||||
```
|
||||
|
||||
Применимо к:
|
||||
- `*.Command.*` — команды любого объекта
|
||||
|
||||
#### Реквизиты адресации (Task)
|
||||
|
||||
Доступные права: `View`, `Edit`
|
||||
|
||||
```xml
|
||||
<object>
|
||||
<name>Task.ЗадачаИсполнителя.AddressingAttribute.Исполнитель</name>
|
||||
<right>
|
||||
<name>View</name>
|
||||
<value>true</value>
|
||||
</right>
|
||||
</object>
|
||||
```
|
||||
|
||||
#### Полная таблица: вложенные объекты и их права
|
||||
|
||||
| Тип вложенного | Родители | Права |
|
||||
|----------------|----------|-------|
|
||||
| `StandardAttribute` | Catalog, Document, ExchangePlan, ChartOf*, Task, BusinessProcess, *Register, DocumentJournal | View, Edit |
|
||||
| `Attribute` | Catalog, Document, ExchangePlan, ChartOf*, Task, BusinessProcess, *Register, DataProcessor, Report | View, Edit |
|
||||
| `TabularSection` | Catalog, Document, ExchangePlan, ChartOf*, Task, BusinessProcess, DataProcessor, Report | View, Edit |
|
||||
| `TabularSection.*.Attribute` | (все с TabularSection) | View, Edit |
|
||||
| `Dimension` | InformationRegister, AccumulationRegister, AccountingRegister | View, Edit |
|
||||
| `Resource` | InformationRegister, AccumulationRegister, AccountingRegister | View, Edit |
|
||||
| `Command` | Catalog, Document, DataProcessor, Report, *Register, DocumentJournal, ExchangePlan, BusinessProcess, Task | View |
|
||||
| `AddressingAttribute` | Task | View, Edit |
|
||||
|
||||
---
|
||||
|
||||
## Ограничения на уровне записей (RLS)
|
||||
|
||||
### Структура
|
||||
|
||||
```xml
|
||||
<right>
|
||||
<name>Read</name>
|
||||
<value>true</value>
|
||||
<restrictionByCondition>
|
||||
<condition>Текст условия</condition>
|
||||
</restrictionByCondition>
|
||||
</right>
|
||||
```
|
||||
|
||||
RLS добавляется внутрь `<right>` как дочерний элемент `<restrictionByCondition>`. Условие содержит текст на языке шаблонов ограничений 1С.
|
||||
|
||||
### Типичная структура условия
|
||||
|
||||
```
|
||||
#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
|
||||
#ДляОбъекта("")
|
||||
#Иначе
|
||||
#ПоЗначениям("Документ.Реализация", "", "",
|
||||
"Организации", "Организация",
|
||||
"","",
|
||||
...)
|
||||
#КонецЕсли
|
||||
```
|
||||
|
||||
Используются препроцессорные директивы (`#Если`, `#Тогда`, `#Иначе`, `#КонецЕсли`) и макросы шаблонов (`#ДляОбъекта`, `#ПоЗначениям`, `#ДляРегистра`, `#ПоЗначениямИНаборамРасширенный`).
|
||||
|
||||
XML-кодирование: `&` → `&` в тексте условия.
|
||||
|
||||
### Применимость
|
||||
|
||||
RLS применяется к правам `Read`, `Update`, `Insert`, `Delete` объектов данных (Catalog, Document, Register и др.). Не применяется к интерактивным правам и правам конфигурации.
|
||||
|
||||
---
|
||||
|
||||
## Шаблоны ограничений (restrictionTemplate)
|
||||
|
||||
Располагаются в конце файла Rights.xml, после всех блоков `<object>`.
|
||||
|
||||
```xml
|
||||
<restrictionTemplate>
|
||||
<name>ИмяШаблона(Параметр1, Параметр2, ...)</name>
|
||||
<condition>
|
||||
// Комментарий с описанием параметров
|
||||
// ...
|
||||
Текст шаблона на языке запросов 1С
|
||||
</condition>
|
||||
</restrictionTemplate>
|
||||
```
|
||||
|
||||
### Типичные шаблоны
|
||||
|
||||
| Шаблон | Описание |
|
||||
|--------|----------|
|
||||
| `ДляОбъекта(Модификатор)` | Ограничение для ссылочных объектов (документы, справочники) |
|
||||
| `ПоЗначениям(Таблица, -, Модификатор, В1,П1, ...)` | Ограничение по значениям видов доступа |
|
||||
| `ДляРегистра(Регистр, Поле1, ..., Поле5)` | Ограничение для регистров |
|
||||
| `ПоЗначениямИНаборамРасширенный(...)` | Расширенное ограничение по наборам и значениям |
|
||||
|
||||
Шаблоны определяются в роли и вызываются из `<condition>` блоков RLS через макросы `#ИмяШаблона(...)`.
|
||||
|
||||
---
|
||||
|
||||
## Примеры
|
||||
|
||||
### Минимальная роль (без прав)
|
||||
|
||||
**Roles/МояРоль.xml:**
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:v8="http://v8.1c.ru/8.1/data/core"
|
||||
xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||
<Role uuid="00000000-0000-0000-0000-000000000001">
|
||||
<Properties>
|
||||
<Name>МояРоль</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Моя роль</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
</Properties>
|
||||
</Role>
|
||||
</MetaDataObject>
|
||||
```
|
||||
|
||||
**Roles/МояРоль/Ext/Rights.xml:**
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Rights xmlns="http://v8.1c.ru/8.2/roles" xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:type="Rights" version="2.17">
|
||||
<setForNewObjects>false</setForNewObjects>
|
||||
<setForAttributesByDefault>true</setForAttributesByDefault>
|
||||
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
|
||||
</Rights>
|
||||
```
|
||||
|
||||
### Роль для регламентного задания
|
||||
|
||||
Типичный набор прав для фонового задания, работающего со справочниками и регистрами:
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Rights xmlns="http://v8.1c.ru/8.2/roles" xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:type="Rights" version="2.17">
|
||||
<setForNewObjects>false</setForNewObjects>
|
||||
<setForAttributesByDefault>true</setForAttributesByDefault>
|
||||
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
|
||||
<object>
|
||||
<name>Catalog.Номенклатура</name>
|
||||
<right>
|
||||
<name>Read</name>
|
||||
<value>true</value>
|
||||
</right>
|
||||
</object>
|
||||
<object>
|
||||
<name>Catalog.Контрагенты</name>
|
||||
<right>
|
||||
<name>Read</name>
|
||||
<value>true</value>
|
||||
</right>
|
||||
</object>
|
||||
<object>
|
||||
<name>InformationRegister.ЦеныНоменклатуры</name>
|
||||
<right>
|
||||
<name>Read</name>
|
||||
<value>true</value>
|
||||
</right>
|
||||
<right>
|
||||
<name>Update</name>
|
||||
<value>true</value>
|
||||
</right>
|
||||
</object>
|
||||
<object>
|
||||
<name>DataProcessor.ОбновлениеЦен</name>
|
||||
<right>
|
||||
<name>Use</name>
|
||||
<value>true</value>
|
||||
</right>
|
||||
</object>
|
||||
</Rights>
|
||||
```
|
||||
|
||||
### Роль с запретом редактирования полей
|
||||
|
||||
```xml
|
||||
<object>
|
||||
<name>Document.РеализацияТоваровУслуг</name>
|
||||
<right>
|
||||
<name>Read</name>
|
||||
<value>true</value>
|
||||
</right>
|
||||
<right>
|
||||
<name>View</name>
|
||||
<value>true</value>
|
||||
</right>
|
||||
</object>
|
||||
<object>
|
||||
<name>Document.РеализацияТоваровУслуг.StandardAttribute.Posted</name>
|
||||
<right>
|
||||
<name>Edit</name>
|
||||
<value>false</value>
|
||||
</right>
|
||||
</object>
|
||||
<object>
|
||||
<name>Document.РеализацияТоваровУслуг.StandardAttribute.DeletionMark</name>
|
||||
<right>
|
||||
<name>Edit</name>
|
||||
<value>false</value>
|
||||
</right>
|
||||
</object>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Версии формата
|
||||
|
||||
| Платформа | version (метаданные) | version (Rights.xml) | Изменения |
|
||||
|-----------|:--------------------:|:--------------------:|-----------|
|
||||
| 8.3.20 | 2.17 | 2.17 | Базовая |
|
||||
| 8.3.24 | 2.17 | 2.17 | Без изменений |
|
||||
| 8.3.27 | 2.20 | 2.20 | Только номер версии, структура идентична |
|
||||
|
||||
Namespace Rights.xml (`http://v8.1c.ru/8.2/roles`) и namespace метаданных (`http://v8.1c.ru/8.3/MDClasses`) не менялись.
|
||||
+34
-7
@@ -6,14 +6,32 @@
|
||||
|
||||
| Навык | Параметры | Описание |
|
||||
|-------|-----------|----------|
|
||||
| `/form-add` | `<ObjectPath> <FormName> [Purpose]` | Добавление формы к объекту конфигурации (Document, Catalog и др.) |
|
||||
| `/form-info` | `<FormPath>` | Компактная сводка: дерево элементов, реквизиты, команды, события |
|
||||
| `/form-compile` | `<JsonPath> <OutputPath>` | Генерация Form.xml из компактного JSON-определения |
|
||||
| `/form-validate` | `<FormPath>` | Валидация: уникальность ID, companions, DataPath, команды |
|
||||
| `/form-add` | `<FormPath> <JsonPath>` | Добавление элементов, реквизитов, команд в существующую форму |
|
||||
| `/form-edit` | `<FormPath> <JsonPath>` | Добавление элементов, реквизитов, команд в существующую форму |
|
||||
| `/form-patterns` | (без параметров) | Справочник паттернов: архетипы, конвенции именования, продвинутые приёмы |
|
||||
|
||||
## Сценарии использования
|
||||
|
||||
### Добавление новой формы к объекту конфигурации
|
||||
|
||||
`/form-add` создаёт каркас управляемой формы (metadata XML + Form.xml + Module.bsl) и регистрирует её в объекте конфигурации. Поддерживает Document, Catalog, DataProcessor, Report, InformationRegister и другие типы.
|
||||
|
||||
```
|
||||
> Добавь форму документа к Documents/АвансовыйОтчет.xml
|
||||
```
|
||||
|
||||
Claude вызовет `/form-add` с нужными параметрами. Назначение формы (Purpose) определяет структуру: Object — форма объекта с реквизитом «Объект», List/Choice — форма списка с DynamicList, Record — форма записи регистра.
|
||||
|
||||
Типичный workflow:
|
||||
|
||||
1. `/form-add` — создать каркас (metadata + Form.xml + Module.bsl)
|
||||
2. `/form-compile` или `/form-edit` — наполнить Form.xml элементами
|
||||
3. `/form-validate` — проверить корректность
|
||||
4. `/form-info` — проанализировать результат
|
||||
|
||||
### Анализ формы перед модификацией
|
||||
|
||||
Файлы Form.xml содержат от сотен до десятков тысяч строк XML. 80% объёма — визуальный шум (цвета, шрифты, размеры, автогенерированные подсказки). `/form-info` извлекает суть.
|
||||
@@ -55,13 +73,13 @@ Commands:
|
||||
|
||||
### Добавление элементов в существующую форму
|
||||
|
||||
`/form-add` добавляет элементы, реквизиты и команды в существующий Form.xml. Автоматически назначает ID, генерирует companion-элементы и обработчики событий.
|
||||
`/form-edit` добавляет элементы, реквизиты и команды в существующий Form.xml. Автоматически назначает ID, генерирует companion-элементы и обработчики событий.
|
||||
|
||||
```
|
||||
> Добавь поле "Склад" в шапку формы после "Контрагент"
|
||||
```
|
||||
|
||||
Claude вызовет `/form-info` для анализа структуры, создаст JSON и вызовет `/form-add`:
|
||||
Claude вызовет `/form-info` для анализа структуры, создаст JSON и вызовет `/form-edit`:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -193,17 +211,26 @@ Claude создаст JSON-определение и вызовет `/form-compi
|
||||
> /form-info upload/acc_8.3.24/Documents/РеализацияТоваровУслуг/Forms/ФормаДокумента/Ext/Form.xml
|
||||
> /form-info src/МояОбработка/Forms/Форма/Ext/Form.xml
|
||||
> /form-compile src/form.json src/МояОбработка/Forms/Форма/Ext/Form.xml
|
||||
> /form-add src/МояОбработка/Forms/Форма/Ext/Form.xml src/additions.json
|
||||
> /form-edit src/МояОбработка/Forms/Форма/Ext/Form.xml src/additions.json
|
||||
> /form-validate src/МояОбработка/Forms/Форма/Ext/Form.xml
|
||||
```
|
||||
|
||||
## Связь с EPF-навыками
|
||||
|
||||
Навыки `/form-*` работают с формами из любых источников — конфигурации и внешних обработок. При работе с обработками:
|
||||
Навыки `/form-*` работают с формами из любых источников — конфигурации и внешних обработок.
|
||||
|
||||
При работе с объектами конфигурации:
|
||||
|
||||
1. `/form-add` — создать форму (каркас + регистрация в объекте)
|
||||
2. `/form-compile` или `/form-edit` — наполнить Form.xml элементами
|
||||
3. `/form-validate` — проверить корректность
|
||||
4. `/form-info` — проанализировать результат
|
||||
|
||||
При работе с внешними обработками:
|
||||
|
||||
1. `/epf-add-form` — создать форму (каркас)
|
||||
2. `/form-compile` — сгенерировать Form.xml из JSON-определения
|
||||
3. `/form-add` — добавить элементы/реквизиты/команды в существующую форму
|
||||
3. `/form-edit` — добавить элементы/реквизиты/команды в существующую форму
|
||||
4. `/form-validate` — проверить корректность
|
||||
5. `/form-info` — проанализировать результат
|
||||
6. `/epf-build` — собрать EPF
|
||||
@@ -211,5 +238,5 @@ Claude создаст JSON-определение и вызовет `/form-compi
|
||||
## Спецификации
|
||||
|
||||
- [Управляемая форма](1c-form-spec.md) — Form.xml, элементы, команды, реквизиты, система типов
|
||||
- [Form DSL](form-dsl-spec.md) — JSON-формат описания формы для `/form-compile` и `/form-add`
|
||||
- [Form DSL](form-dsl-spec.md) — JSON-формат описания формы для `/form-compile` и `/form-edit`
|
||||
- [Паттерны компоновки](form-patterns.md) — типовые архетипы форм, конвенции именования, примеры DSL
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
# Роли (Role)
|
||||
|
||||
Навыки группы `/role-*` позволяют анализировать и создавать роли 1С — XML-файлы прав доступа (Rights.xml) и метаданных.
|
||||
|
||||
## Навыки
|
||||
|
||||
| Навык | Параметры | Описание |
|
||||
|-------|-----------|----------|
|
||||
| `/role-info` | `<RightsPath>` | Компактная сводка прав: объекты по типам, только разрешённые, RLS, шаблоны |
|
||||
| `/role-compile` | `<RoleName> <RolesDir>` | Создание роли: метаданные + Rights.xml по описанию прав |
|
||||
|
||||
## Сценарии использования
|
||||
|
||||
### Анализ существующей роли
|
||||
|
||||
```
|
||||
> Проанализируй права роли Roles/БазовыеПраваБП/Ext/Rights.xml
|
||||
```
|
||||
|
||||
Claude вызовет `/role-info`, получит компактную сводку (тысячи строк XML → 50–300 строк текста) и опишет:
|
||||
- какие объекты доступны и с какими правами
|
||||
- где есть ограничения RLS
|
||||
- какие шаблоны ограничений используются
|
||||
|
||||
### Создание роли для регламентного задания
|
||||
|
||||
```
|
||||
> Проанализируй модуль регламентного задания ОбновлениеКурсовВалют
|
||||
> и создай роль с минимальными правами для его выполнения
|
||||
```
|
||||
|
||||
Claude проанализирует код, определит используемые объекты метаданных, и вызовет `/role-compile` для создания роли с нужными правами (Read, Update, Posting и т.д.).
|
||||
|
||||
### Создание роли по описанию
|
||||
|
||||
```
|
||||
> Создай роль МенеджерПродаж с правами:
|
||||
> - Документ РеализацияТоваровУслуг: полные права
|
||||
> - Справочник Контрагенты: чтение
|
||||
> - Справочник Номенклатура: чтение
|
||||
> - Регистр ЦеныНоменклатуры: чтение
|
||||
```
|
||||
|
||||
Рабочий цикл:
|
||||
1. Claude генерирует `Roles/МенеджерПродаж.xml` (метаданные с UUID)
|
||||
2. Claude генерирует `Roles/МенеджерПродаж/Ext/Rights.xml` (права)
|
||||
3. Регистрирует роль в `Configuration.xml` (`<ChildObjects>`)
|
||||
4. Проверяет результат через `/role-info`
|
||||
|
||||
## Структура файлов роли
|
||||
|
||||
```
|
||||
Roles/
|
||||
├── ИмяРоли.xml # Метаданные (UUID, синоним)
|
||||
└── ИмяРоли/
|
||||
└── Ext/
|
||||
└── Rights.xml # Права доступа
|
||||
```
|
||||
|
||||
Регистрация в `Configuration.xml`:
|
||||
```xml
|
||||
<ChildObjects>
|
||||
<Role>ИмяРоли</Role>
|
||||
</ChildObjects>
|
||||
```
|
||||
|
||||
## Спецификация
|
||||
|
||||
Полная спецификация формата: [1c-role-spec.md](1c-role-spec.md) — типы объектов, права, RLS, шаблоны ограничений, версии формата.
|
||||
Reference in New Issue
Block a user