mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-18 08:39:40 +03:00
feat(form-decompile,form-compile): доступ по ролям — userVisible/view/edit/use (единый xr-механизм)
Кластер «доступ по ролям»: единый role-adjustable boolean платформы
(xr:Common + 0..N xr:Value name="Role.X") для четырёх владельцев одним
грамматиком значения:
- элемент → userVisible (<UserVisible>)
- реквизит → view, edit (<View>/<Edit>)
- команда → use (<Use>)
Значение DSL: скаляр false/true → голый <xr:Common>; объект
{ common, roles:{ Имя: bool } } → пер-ролевые исключения (три-state как в
конфигураторе: роль не указана → наследует common; указана → явный bool).
Имя роли forgiving: без префикса / Role. / Роль. → нормализуется в Role.
Отсутствие ключа = полный доступ (платформа тег не пишет) — дефолт не эмитим.
Декомпилятор инвертирует: голый Common → скаляр, есть Value → объект.
Компилятор: общий хелпер Emit-XrFlag / emit_xr_flag (ps1+py).
Порядок схемы: View → Edit после MainAttribute; Use после ToolTip до Action.
Раньше: userVisible умел только голый false (компилятор), декомпилятор не
захватывал ничего; view/edit/use не умел никто.
TOTAL diff lines выборки 2.17: 7911 → 7560 (-351), match 9 → 11.
Снапшоты attributes-types/commands сертифицированы в 1С (8.3.24);
регресс form-compile 33/33 зелёный на ps + python.
decompile v0.28, compile v1.47.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -114,6 +114,7 @@
|
||||
| `hidden` | bool | `true` → `<Visible>false</Visible>` |
|
||||
| `disabled` | bool | `true` → `<Enabled>false</Enabled>` |
|
||||
| `readOnly` | bool | `true` → `<ReadOnly>true</ReadOnly>` |
|
||||
| `userVisible` | bool/object | Пользовательская видимость по ролям (`<UserVisible>`). См. §4.1c. Отсутствие = виден всем |
|
||||
| `events` | object | Обработчики событий: `{ "ИмяСобытия": "ИмяОбработчика" }` — тот же формат, что у событий формы (§3). Значение `null` → имя по конвенции (§4.2). См. §4.2 |
|
||||
| `titleLocation` | string | Расположение заголовка: `none`/`left`/`right`/`top`/`bottom`/`auto`. Эмитится при наличии (input, labelField, picField, table, calendar). У `check`/`radio` — особая семантика с умным дефолтом (см. их разделы) |
|
||||
| `tooltip` | string/object | Всплывающая подсказка элемента (`<ToolTip>`). Строка → ru, объект `{ "ru": …, "en": … }` → мультиязычный (как `title`). Эмитится сразу после `title` |
|
||||
@@ -131,6 +132,35 @@
|
||||
|
||||
Флаг авто-детектится по наличию известной разметки/`</>`: для plain-строки объект не нужен. Явная форма `{text, formatted}` — только когда авто-детект неверен (formatted-текст без разметки, либо буквальные `<…>`-плейсхолдеры в неформатированном).
|
||||
|
||||
### 4.1c. Доступ по ролям (`userVisible` / `view` / `edit` / `use`)
|
||||
|
||||
Единый механизм платформы (role-adjustable boolean): «общее значение + исключения по ролям».
|
||||
Один и тот же грамматик-значения у разных ключей на разных владельцах:
|
||||
|
||||
| Ключ | Владелец | XML-тег | Смысл |
|
||||
|------|----------|---------|-------|
|
||||
| `userVisible` | элемент (§4.1) | `<UserVisible>` | пользовательская видимость |
|
||||
| `view` | реквизит (§5) | `<View>` | просмотр |
|
||||
| `edit` | реквизит (§5) | `<Edit>` | редактирование |
|
||||
| `use` | команда (§7) | `<Use>` | доступность команды |
|
||||
|
||||
**Значение** (общее для всех четырёх):
|
||||
- скаляр `false`/`true` → только `<xr:Common>`, без ролей (массовый случай, особенно `userVisible: false`);
|
||||
- объект `{ "common": <bool>, "roles": { "ИмяРоли": <bool>, … } }` → `<xr:Common>` + по `<xr:Value name="Role.ИмяРоли">` на каждое исключение.
|
||||
|
||||
Семантика как в конфигураторе (три состояния флага роли): роль, **не указанная** в `roles`, наследует `common`; указанная — задаёт явный `true`/`false` (может совпадать с `common`).
|
||||
|
||||
**Имя роли** — forgiving: принимается без префикса (`ПолныеПрава`), с `Role.` или кириллическим `Роль.`; нормализуется в `Role.ИмяРоли`.
|
||||
|
||||
**Отсутствие ключа** = полный доступ (платформа тег не пишет) — дефолт не эмитим.
|
||||
|
||||
```jsonc
|
||||
{ "inputField": "Поле", "userVisible": false } // скрыт у всех
|
||||
{ "name": "Реквизит", "view": false, // не виден…
|
||||
"edit": { "common": false, "roles": { "ПолныеПрава": true } } } // …и редактируем только Полными правами
|
||||
{ "name": "Команда", "use": { "common": false, "roles": { "Роль.Бухгалтер": true } } }
|
||||
```
|
||||
|
||||
### 4.1a. Общие layout-свойства
|
||||
|
||||
Применимы к любому элементу (размеры, растягивание, выравнивание внутри родителя). Эмитятся только при указании.
|
||||
@@ -542,6 +572,8 @@ Pages поддерживает `pagesRepresentation`: `None`, `TabsOnTop`, `Tabs
|
||||
| `type` | string | Тип (shorthand) |
|
||||
| `main` | bool | Основной реквизит формы |
|
||||
| `title` | string | Заголовок |
|
||||
| `view` | bool/object | Просмотр по ролям (`<View>`). См. §4.1c |
|
||||
| `edit` | bool/object | Редактирование по ролям (`<Edit>`). См. §4.1c |
|
||||
| `savedData` | bool | Сохраняемые данные |
|
||||
| `fillChecking` | string | `Show`, `DontShow` |
|
||||
| `columns` | array | Колонки для ValueTable/ValueTree |
|
||||
@@ -630,6 +662,7 @@ Pages поддерживает `pagesRepresentation`: `None`, `TabsOnTop`, `Tabs
|
||||
| `action` | string | Имя процедуры-обработчика |
|
||||
| `title` | string | Заголовок |
|
||||
| `tooltip` | string/object | Всплывающая подсказка команды (`<ToolTip>`) |
|
||||
| `use` | bool/object | Доступность команды по ролям (`<Use>`). См. §4.1c |
|
||||
| `currentRowUse` | string | Использование текущей строки: `Auto`, `DontUse`, `Use` |
|
||||
| `shortcut` | string | Клавиатурное сочетание |
|
||||
| `picture` | string | Ссылка на картинку |
|
||||
|
||||
Reference in New Issue
Block a user