mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-15 02:14:57 +03:00
9b77f06aba
<v8:TypeSet> (набор типов) не поддерживался: Decompile-Type итерировал только v8:Type
→ тип колонки/реквизита/параметра с TypeSet терялся (компилятор эмитил пустой <Type/>).
Покрыто (9282 вхождения в корпусе):
- DefinedType.X (6515) — определяемый тип (синоним ОпределяемыйТип.X)
- Characteristic.X (216) — характеристика (синоним Характеристика.X)
- AnyRef (268) / AnyIBRef (207) — любая ссылка / любая ссылка ИБ
- голый ref-вид без .Имя: CatalogRef/DocumentRef/EnumRef/ExchangePlanRef/TaskRef/
BusinessProcessRef/ChartOf*Ref — «любая ссылка вида»
Развязка с обычным типом — по наличию точки: CatalogRef.Валюты → <v8:Type>,
CatalogRef (голый) → <v8:TypeSet>. DefinedType/Characteristic/голый ref никогда не
бывают v8:Type (проверено: 0). Составной тип через " | " роутит каждую часть
независимо (в т.ч. смешанный Type+TypeSet).
Emit-SingleType (+py) детектит и эмитит <v8:TypeSet>; Decompile-Type снимает cfg:-префикс.
TOTAL diff lines выборки 2.17: 4443 → 4068 (-375), match 13 → 14. Снапшот table
(колонки AnyRef/CatalogRef) сертифицирован в 1С (8.3.24). Регресс form-compile 33/33
зелёный на ps + python. decompile v0.34, compile v1.52.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
805 lines
47 KiB
Markdown
805 lines
47 KiB
Markdown
# Form DSL Specification
|
||
|
||
Спецификация JSON-формата для `/form-compile` — компактного описания управляемых форм 1С:Предприятия 8.3.
|
||
|
||
---
|
||
|
||
## 1. Корневой объект
|
||
|
||
```json
|
||
{
|
||
"title": "Заголовок формы",
|
||
"properties": { ... },
|
||
"excludedCommands": [ ... ],
|
||
"events": { ... },
|
||
"elements": [ ... ],
|
||
"attributes": [ ... ],
|
||
"parameters": [ ... ],
|
||
"commands": [ ... ]
|
||
}
|
||
```
|
||
|
||
| Поле | Тип | Описание |
|
||
|------|-----|----------|
|
||
| `title` | string | Заголовок формы (необязательный) |
|
||
| `properties` | object | Свойства формы (необязательный) |
|
||
| `excludedCommands` | string[] | Исключённые стандартные команды (необязательный) |
|
||
| `events` | object | Обработчики событий формы (необязательный) |
|
||
| `elements` | array | Дерево UI-элементов (необязательный) |
|
||
| `attributes` | array | Реквизиты формы (необязательный) |
|
||
| `parameters` | array | Параметры формы (необязательный) |
|
||
| `commands` | array | Команды формы (необязательный) |
|
||
|
||
---
|
||
|
||
## 2. Properties — свойства формы
|
||
|
||
Объект со свойствами в camelCase. Компилятор преобразует в PascalCase для XML.
|
||
|
||
```json
|
||
"properties": {
|
||
"autoTitle": false,
|
||
"windowOpeningMode": "LockOwnerWindow",
|
||
"commandBarLocation": "Bottom"
|
||
}
|
||
```
|
||
|
||
### Поддерживаемые свойства
|
||
|
||
| DSL ключ | XML элемент | Значения |
|
||
|----------|-------------|----------|
|
||
| `autoTitle` | `<AutoTitle>` | `true` / `false` |
|
||
| `windowOpeningMode` | `<WindowOpeningMode>` | `LockOwnerWindow`, `Modeless` |
|
||
| `commandBarLocation` | `<CommandBarLocation>` | `Top`, `Bottom`, `None` |
|
||
| `saveDataInSettings` | `<SaveDataInSettings>` | `UseList`, `Use`, `DontUse` |
|
||
| `autoSaveDataInSettings` | `<AutoSaveDataInSettings>` | `Use`, `DontUse` |
|
||
| `autoTime` | `<AutoTime>` | `CurrentOrLast`, `Current`, `Last` |
|
||
| `usePostingMode` | `<UsePostingMode>` | `Auto`, `Postings`, `Movements` |
|
||
| `repostOnWrite` | `<RepostOnWrite>` | `true` / `false` |
|
||
| `autoURL` | `<AutoURL>` | `true` / `false` |
|
||
| `autoFillCheck` | `<AutoFillCheck>` | `true` / `false` |
|
||
| `customizable` | `<Customizable>` | `true` / `false` |
|
||
| `enterKeyBehavior` | `<EnterKeyBehavior>` | `DefaultButton`, `NewLine` |
|
||
| `verticalScroll` | `<VerticalScroll>` | `useIfNecessary`, `Auto`, `AlwaysShow`, `Never` |
|
||
| `width` | `<Width>` | число |
|
||
| `height` | `<Height>` | число |
|
||
| `group` | `<Group>` | `Vertical`, `Horizontal`, `AlwaysHorizontal`, `AlwaysVertical` |
|
||
| `useForFoldersAndItems` | `<UseForFoldersAndItems>` | `Folders`, `Items`, `FoldersAndItems` |
|
||
|
||
Нераспознанные ключи преобразуются с автоматическим PascalCase (первая буква в верхний регистр).
|
||
|
||
---
|
||
|
||
## 3. Events — обработчики событий формы
|
||
|
||
```json
|
||
"events": {
|
||
"OnCreateAtServer": "ПриСозданииНаСервере",
|
||
"OnOpen": "ПриОткрытии"
|
||
}
|
||
```
|
||
|
||
Ключ — имя события, значение — имя процедуры-обработчика. **Тот же формат `events` используется и на элементах** (§4.1) — единый способ описания событий во всём DSL.
|
||
|
||
### Доступные события
|
||
|
||
| Событие | Описание |
|
||
|---------|----------|
|
||
| `OnCreateAtServer` | Создание формы на сервере |
|
||
| `OnOpen` | Открытие формы |
|
||
| `BeforeClose` | Перед закрытием |
|
||
| `OnClose` | При закрытии |
|
||
| `BeforeWrite` | Перед записью |
|
||
| `BeforeWriteAtServer` | Перед записью на сервере |
|
||
| `OnWriteAtServer` | При записи на сервере |
|
||
| `AfterWriteAtServer` | После записи на сервере |
|
||
| `AfterWrite` | После записи |
|
||
| `OnReadAtServer` | При чтении объекта |
|
||
| `NotificationProcessing` | Обработка оповещений |
|
||
| `ChoiceProcessing` | Обработка выбора |
|
||
| `FillCheckProcessingAtServer` | Проверка заполнения |
|
||
|
||
---
|
||
|
||
## 4. Elements — дерево UI-элементов
|
||
|
||
Массив объектов. Тип элемента определяется ключом-идентификатором.
|
||
|
||
### 4.1. Общие свойства всех элементов
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `name` | string | Имя элемента (по умолчанию — из значения ключа типа) |
|
||
| `title` | string/object | Заголовок. **Нет ключа** → авто-вывод из имени (для page/popup/label и непривязанных полей/кнопок). **`""`** → подавить (заголовок не выводится). Строка → ru. Объект `{ "ru": "…", "en": "…" }` → мультиязычный (по `<v8:item>` на язык). Так же `tooltip`/`inputHint`/`title` команд/реквизитов/колонок |
|
||
| `hidden` | bool | `true` → `<Visible>false</Visible>` |
|
||
| `disabled` | bool | `true` → `<Enabled>false</Enabled>` |
|
||
| `readOnly` | bool | `true` → `<ReadOnly>true</ReadOnly>` |
|
||
| `userVisible` | bool/object | Пользовательская видимость по ролям (`<UserVisible>`). См. §4.1c. Отсутствие = виден всем |
|
||
| `commandBar` | object/array | Командная панель элемента (companion `<AutoCommandBar>`) с контентом. См. §4.1d |
|
||
| `contextMenu` | object/array | Контекстное меню элемента (companion `<ContextMenu>`) с контентом. См. §4.1d |
|
||
| `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` |
|
||
| `tooltipRepresentation` | string | Режим показа подсказки (`<ToolTipRepresentation>`): `None`, `Button`, `ShowBottom`, `ShowTop`, `ShowLeft`, `ShowRight`, `ShowAuto`, `Balloon`. Эмитится при наличии |
|
||
| `extendedTooltip` | string/object | Расширенная подсказка (контент companion `<ExtendedTooltip>`). См. форму ML-текста ниже. Синоним: `extTooltip` |
|
||
|
||
#### Форма ML-текста и `formatted`
|
||
|
||
`title`/`tooltip`/`extendedTooltip` принимают:
|
||
- `"строка"` — ru-текст;
|
||
- `{ "ru": "…", "en": "…" }` — многоязычный;
|
||
- `{ "text": <строка|мапа>, "formatted": true }` — **форматированный** текст (атрибут `<Title formatted="true">`).
|
||
|
||
**`formatted`** включает интерпретацию inline-разметки в тексте (1С-формат, похож на BBCode): `<b>…</>`, `<i>`, `<u>`, `<color web:Red>…</>`, `<bgColor …>`, `<font …>`, `<fontSize …>`, `<link URL>…</>`, `<img …>`; закрывающий тег — `</>`. Текст несётся **raw** (разметка — часть строки), парсинг не требуется.
|
||
|
||
Флаг авто-детектится по наличию известной разметки/`</>`: для 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.1d. Companion-панели элемента (`commandBar` / `contextMenu`)
|
||
|
||
Командная панель (`<AutoCommandBar>`) и контекстное меню (`<ContextMenu>`) элемента — это
|
||
companion-панели с собственным контентом. Оба несут одну грамматику.
|
||
|
||
| Ключ | XML companion | Forgiving-синонимы (при объект/массив-значении) |
|
||
|------|---------------|--------------------------------------------------|
|
||
| `commandBar` | `<AutoCommandBar>` | `autoCommandBar`, `AutoCommandBar`, `autoCmdBar`, `cmdBar`, `КоманднаяПанель` |
|
||
| `contextMenu` | `<ContextMenu>` | `ContextMenu`, `КонтекстноеМеню` |
|
||
|
||
**Значение** (обе формы):
|
||
- массив `[ … ]` → shorthand для `{ "children": [ … ] }`;
|
||
- объект `{ "autofill"?: bool, "children": [ … ] }` (+ `horizontalAlign` у `commandBar`).
|
||
|
||
`children` — обычная грамматика кнопок: `button` (с `command`/`commandName`/`stdCommand`), `buttonGroup`, `popup`.
|
||
|
||
- `autofill`: `false` → подавить автозаполнение (тег `<Autofill>false</Autofill>`); `true` или отсутствие → автозаполнение (платформенный дефолт, тег **не пишется**). Платформа `Autofill=true` не эмитит никогда.
|
||
- Отсутствие свойства целиком → пустой companion (как обычно).
|
||
- **Дин-список-таблица**: компилятор по эвристике подавляет её панель (`autofill=false`), чтобы не дублировать командную панель формы. Чтобы оставить панель таблицы (она автозаполняется) — задайте явно `commandBar: { "autofill": true }`.
|
||
|
||
**Разведение тип-элемента и панель-свойства — по типу значения:** `cmdBar: "Имя"` (строка) — это
|
||
отдельный элемент-панель в дереве (§4.3); `commandBar: { … }` (объект/массив) — companion-панель *данного*
|
||
элемента. Поэтому модель может писать панель таблицы любым знакомым словом.
|
||
|
||
```jsonc
|
||
{ "table": "Список", "path": "Список",
|
||
"commandBar": { "autofill": false, "children": [
|
||
{ "button": "Создать", "command": "СоздатьЭлемент" } ] },
|
||
"contextMenu": { "children": [
|
||
{ "button": "Карта", "commandName": "CommonCommand.КартаМаршрута" } ] } }
|
||
```
|
||
|
||
### 4.1a. Общие layout-свойства
|
||
|
||
Применимы к любому элементу (размеры, растягивание, выравнивание внутри родителя). Эмитятся только при указании.
|
||
|
||
| Свойство | XML | Значения |
|
||
|----------|-----|----------|
|
||
| `width` | `<Width>` | число |
|
||
| `height` | `<Height>` | число (у `table` → `<HeightInTableRows>`, высота в строках) |
|
||
| `horizontalStretch` | `<HorizontalStretch>` | `true` |
|
||
| `verticalStretch` | `<VerticalStretch>` | `true` |
|
||
| `autoMaxWidth` | `<AutoMaxWidth>` | `false` (у `input` при `multiLine` подставляется автоматически) |
|
||
| `autoMaxHeight` | `<AutoMaxHeight>` | `false` |
|
||
| `maxWidth` | `<MaxWidth>` | число |
|
||
| `maxHeight` | `<MaxHeight>` | число |
|
||
| `groupHorizontalAlign` | `<GroupHorizontalAlign>` | `Left`, `Center`, `Right` |
|
||
| `groupVerticalAlign` | `<GroupVerticalAlign>` | `Top`, `Center`, `Bottom` |
|
||
| `horizontalAlign` | `<HorizontalAlign>` | `Left`, `Center`, `Right` |
|
||
| `skipOnInput` | `<SkipOnInput>` | `true`/`false` (эмитится явное значение, в т.ч. `false`) |
|
||
| `defaultItem` | `<DefaultItem>` | `true` (элемент активируется по умолчанию) |
|
||
| `enableStartDrag` | `<EnableStartDrag>` | `true` (разрешить начало перетаскивания) |
|
||
| `fileDragMode` | `<FileDragMode>` | `AsFile`/… (режим drag-n-drop файлов) |
|
||
|
||
> `defaultItem`/`enableStartDrag`/`fileDragMode`/`skipOnInput` — общие для любого типа элемента (таблица, поле, надпись, картинка, кнопка), не только таблицы.
|
||
|
||
### 4.2. События элемента и автоименование обработчиков
|
||
|
||
События элемента описываются мапой `events` (как у формы):
|
||
|
||
```json
|
||
{ "input": "Контрагент", "path": "Объект.Контрагент",
|
||
"events": { "OnChange": "КонтрагентПриИзменении" } }
|
||
```
|
||
|
||
Значение — имя процедуры-обработчика. Если вместо имени указать **`null`**, имя
|
||
генерируется автоматически по конвенции 1С `<ИмяЭлемента><РусскийСуффикс>`:
|
||
|
||
```json
|
||
{ "input": "Контрагент", "path": "Объект.Контрагент",
|
||
"events": { "OnChange": null } } // → обработчик КонтрагентПриИзменении
|
||
```
|
||
|
||
Суффиксы для авто-имени:
|
||
|
||
| Событие | Суффикс |
|
||
|---------|---------|
|
||
| `OnChange` | `ПриИзменении` |
|
||
| `StartChoice` | `НачалоВыбора` |
|
||
| `ChoiceProcessing` | `ОбработкаВыбора` |
|
||
| `AutoComplete` | `АвтоПодбор` |
|
||
| `Clearing` | `Очистка` |
|
||
| `Opening` | `Открытие` |
|
||
| `Click` | `Нажатие` |
|
||
| `OnActivateRow` | `ПриАктивизацииСтроки` |
|
||
| `BeforeAddRow` | `ПередНачаломДобавления` |
|
||
| `BeforeDeleteRow` | `ПередУдалением` |
|
||
| `BeforeRowChange` | `ПередНачаломИзменения` |
|
||
| `OnStartEdit` | `ПриНачалеРедактирования` |
|
||
| `OnEndEdit` | `ПриОкончанииРедактирования` |
|
||
| `Selection` | `ВыборСтроки` |
|
||
| `OnCurrentPageChange` | `ПриСменеСтраницы` |
|
||
| `TextEditEnd` | `ОкончаниеВводаТекста` |
|
||
|
||
> **Legacy-формат (принимается, но устарел).** Ранее события элемента задавались парой
|
||
> `on` (массив имён событий) + `handlers` (переопределение имён): `{ "on": ["OnChange"], "handlers": { … } }`.
|
||
> Компилятор по-прежнему его принимает ради совместимости, но рекомендуемый и
|
||
> единственный эмитируемый формат — мапа `events`. Новые формы пишите через `events`.
|
||
|
||
### 4.3. Типы элементов
|
||
|
||
#### group — UsualGroup
|
||
|
||
```json
|
||
{ "group": "horizontal", "name": "ГруппаШапка", "children": [ ... ] }
|
||
```
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `group` | string | Ориентация: `horizontal`, `vertical`, `alwaysHorizontal`, `alwaysVertical`, `collapsible` |
|
||
| `children` | array | Вложенные элементы |
|
||
| `showTitle` | bool | Показывать заголовок группы |
|
||
| `representation` | string | `none`, `normal`, `weak`, `strong` |
|
||
| `united` | bool | Объединение |
|
||
|
||
#### input — InputField
|
||
|
||
```json
|
||
{ "input": "Организация", "path": "Объект.Организация", "events": { "OnChange": "ОрганизацияПриИзменении" } }
|
||
```
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `path` | string | DataPath |
|
||
| `multiLine` | bool | Многострочный режим |
|
||
| `passwordMode` | bool | Режим пароля |
|
||
| `titleLocation` | string | `none`, `left`, `right`, `top`, `bottom` |
|
||
| `choiceButton` | bool | Показывать кнопку выбора |
|
||
| `clearButton` | bool | Показывать кнопку очистки |
|
||
| `spinButton` | bool | Показывать кнопку прокрутки |
|
||
| `dropListButton` | bool | Показывать кнопку раскрытия |
|
||
| `markIncomplete` | bool | Автопометка незаполненных |
|
||
| `editMode` | string | Режим редактирования: `EnterOnInput`, `Directly` |
|
||
| `skipOnInput` | bool | Пропускать при вводе |
|
||
| `inputHint` | string | Подсказка ввода (placeholder) |
|
||
| `choiceList` | array | Список выбора: массив `{ value, presentation?/title? }` — та же грамматика, что у `radio` (см. ниже) |
|
||
| `width` | int | Ширина |
|
||
| `height` | int | Высота |
|
||
| `horizontalStretch` | bool | Растягивание по горизонтали |
|
||
| `verticalStretch` | bool | Растягивание по вертикали |
|
||
| `autoMaxWidth` | bool | Автомаксимальная ширина |
|
||
| `autoMaxHeight` | bool | Автомаксимальная высота |
|
||
|
||
#### check — CheckBoxField
|
||
|
||
```json
|
||
{ "check": "ФлагАктивности", "path": "Активен", "events": { "OnChange": "ФлагАктивностиПриИзменении" } }
|
||
```
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `path` | string | DataPath |
|
||
| `checkBoxType` | string | Вид флажка. **Нет ключа** → умный дефолт `Auto`. **`""`** → не выводить тег (платформа применит своё умолчание). Значения: `auto`, `checkBox`, `switcher`, `tumbler` |
|
||
| `editMode` | string | Режим редактирования: `EnterOnInput`, `Directly` |
|
||
| `titleLocation` | string | Расположение заголовка. **Нет ключа** → умный дефолт `Right` (флажки почти всегда справа). **`""`** → не выводить тег (платформа применит своё умолчание, `Left`). Значение (`none`/`left`/`top`/…) → как указано |
|
||
|
||
#### radio — RadioButtonField
|
||
|
||
```json
|
||
{
|
||
"radio": "СпособКурса",
|
||
"path": "Объект.СпособУстановкиКурса",
|
||
"radioButtonType": "Auto",
|
||
"choiceList": [
|
||
{ "value": "Enum.СпособыКурса.EnumValue.Авто", "presentation": "автоматически" },
|
||
{ "value": "Enum.СпособыКурса.EnumValue.Ручной", "presentation": { "ru": "вручную", "en": "manual" } }
|
||
]
|
||
}
|
||
```
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `path` | string | DataPath |
|
||
| `radioButtonType` | string | `Auto` (по умолчанию), `RadioButtons`, `Tumbler` |
|
||
| `columnsCount` | int | Число колонок раскладки |
|
||
| `titleLocation` | string | Расположение заголовка. **Нет ключа** → умный дефолт `None`. **`""`** → не выводить тег (платформа применит своё умолчание). Значение → как указано |
|
||
| `choiceList` | array | Варианты выбора: массив `{ value, presentation }` |
|
||
|
||
`choiceList[*]`:
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `value` | string/number/bool | Значение варианта. Для перечисления — `"Enum.ИмяТипа.EnumValue.ИмяЗначения"` (xsi:type автоматически: `xr:DesignTimeRef` / `xs:string` / `xs:decimal` / `xs:boolean`) |
|
||
| `presentation` | string или object | Текст рядом с переключателем. Строка → ru; объект `{ru, en, ...}` → мультиязык. Если не задано — выводится из имени значения |
|
||
|
||
#### label — LabelDecoration
|
||
|
||
```json
|
||
{ "label": "Подсказка", "title": "Выберите параметры", "hyperlink": true }
|
||
```
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `title` | string/object | Текст надписи. Единая ML-text форма (см. §4.1): строка / `{ru,en}` / `{text, formatted}`. У декораций `<Title>` всегда несёт атрибут `formatted` (авто-детект по разметке) |
|
||
| `hyperlink` | bool | Режим гиперссылки |
|
||
| `formatted` | bool | **Back-compat**: явный override авто-детекта formatted (раньше — отдельный ключ). Предпочтительно — форма `title: {text, formatted}` |
|
||
| `width` | int | Ширина |
|
||
| `height` | int | Высота |
|
||
| `autoMaxWidth` | bool | Автомаксимальная ширина |
|
||
| `autoMaxHeight` | bool | Автомаксимальная высота |
|
||
|
||
#### labelField — LabelField
|
||
|
||
```json
|
||
{ "labelField": "СтатусОбработки", "path": "Статус" }
|
||
```
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `path` | string | DataPath |
|
||
| `hyperlink` | bool | Режим гиперссылки (у LabelField платформенный тег `<Hiperlink>` — опечатка 1С, компилятор учитывает) |
|
||
| `editMode` | string | Режим редактирования: `EnterOnInput`, `Directly` |
|
||
|
||
#### table — Table
|
||
|
||
```json
|
||
{
|
||
"table": "Товары", "path": "Объект.Товары",
|
||
"columns": [
|
||
{ "input": "Номенклатура", "path": "Объект.Товары.Номенклатура" }
|
||
]
|
||
}
|
||
```
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `path` | string | DataPath |
|
||
| `columns` | array | Колонки (элементы input/check/labelField/picField, либо `columnGroup` для группировки) |
|
||
| `representation` | string | `List`, `Tree`, `HierarchicalList` |
|
||
| `changeRowSet` | bool | Разрешить добавление/удаление строк (эмитится явное значение, в т.ч. `false`) |
|
||
| `changeRowOrder` | bool | Разрешить перемещение строк (явное значение) |
|
||
| `autoInsertNewRow` | bool | Автодобавление новой строки |
|
||
| `enableDrag` | bool | Разрешить перетаскивание из таблицы |
|
||
| `rowFilter` | null | Отбор строк (nil-плейсхолдер `<RowFilter xsi:nil="true"/>`); значение всегда `null` |
|
||
| `choiceMode` | bool | Режим выбора |
|
||
| `useAlternationRowColor` | bool | Чередование цвета строк |
|
||
| `selectionMode` | string | Режим выделения (`SingleRow`, …) |
|
||
| `rowSelectionMode` | string | Режим выделения строки (`Row`, …) |
|
||
| `verticalLines` / `horizontalLines` | bool | Линии сетки (эмитится явное `false`) |
|
||
| `initialTreeView` | string | `ExpandTopLevel`, `ExpandAllLevels`, `NoExpand` |
|
||
| `rowsPicture` | string | Картинка строк (`CommonPicture.X`) |
|
||
| `height` | int | Высота в строках таблицы |
|
||
| `header` | bool | Показывать шапку |
|
||
| `footer` | bool | Показывать подвал |
|
||
| `commandBarLocation` | string | `None`, `Top`, `Bottom`, `Auto` |
|
||
| `searchStringLocation` | string | `None`, `Top`, `Bottom`, `CommandBar`, `Auto` |
|
||
| `viewStatusLocation` | string | `None`, `Top`, `Bottom`, `Auto` |
|
||
| `searchControlLocation` | string | `None`, `Top`, `Bottom`, `Auto` |
|
||
| `excludedCommands` | string[] | Исключённые стандартные команды таблицы (`Add`, `Delete`, `MoveUp`, `SortListAsc`, …) → `<CommandSet>` |
|
||
|
||
##### Таблица динамического списка
|
||
|
||
Когда таблица привязана к реквизиту `type: "DynamicList"` (её `path` = имя такого реквизита), платформа эмитит блок специфичных свойств. Компилятор генерирует его автоматически с умолчаниями; в DSL указываются **только отличия** от умолчания (декомпилятор так и поступает). Чистые константы (`Period`, `TopLevelParent`) не настраиваются.
|
||
|
||
| Свойство | Тип | Умолчание | Описание |
|
||
|----------|-----|-----------|----------|
|
||
| `rowPictureDataPath` | string | `<Список>.DefaultPicture` (если есть осн. таблица) | Путь к картинке строки. `""` — подавить авто-вывод |
|
||
| `autoRefresh` | bool | `false` | Автообновление |
|
||
| `autoRefreshPeriod` | int | `60` | Период автообновления, сек |
|
||
| `choiceFoldersAndItems` | string | `Items` | `Items`, `Folders`, `FoldersAndItems` |
|
||
| `restoreCurrentRow` | bool | `false` | Восстанавливать текущую строку |
|
||
| `showRoot` | bool | `true` | Показывать корень |
|
||
| `allowRootChoice` | bool | `false` | Разрешить выбор корня |
|
||
| `updateOnDataChange` | string | `Auto` | `Auto`, `DontUpdate` |
|
||
| `allowGettingCurrentRowURL` | bool | `true` | Получение URL текущей строки |
|
||
| `userSettingsGroup` | string | — | Группа пользовательских настроек |
|
||
| `rowsPicture` | string | — | Картинка строк (`CommonPicture.X`) → `<RowsPicture>` |
|
||
|
||
#### columnGroup — ColumnGroup
|
||
|
||
Группа колонок таблицы. Используется только внутри `columns` таблицы. Допускается вложение `columnGroup` в `columnGroup`.
|
||
|
||
```json
|
||
{ "table": "Список", "path": "Список", "columns": [
|
||
{ "columnGroup": "horizontal", "name": "ГруппаДата", "title": "Срок", "children": [
|
||
{ "input": "ДатаНачала", "path": "Список.ДатаНачала" },
|
||
{ "input": "ДатаОкончания", "path": "Список.ДатаОкончания" }
|
||
]},
|
||
{ "columnGroup": "inCell", "name": "ГруппаИсполнитель", "showInHeader": true, "children": [
|
||
{ "input": "Исполнитель", "path": "Список.Исполнитель" }
|
||
]}
|
||
]}
|
||
```
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `columnGroup` | string | Ориентация: `horizontal`, `vertical`, `inCell` (склейка колонок в одной ячейке шапки) |
|
||
| `name` | string | Имя элемента (рекомендуется задавать явно) |
|
||
| `title` | string/object | Заголовок группы |
|
||
| `showTitle` | bool | Показывать заголовок |
|
||
| `showInHeader` | bool | Показывать в шапке таблицы |
|
||
| `width` | int | Ширина |
|
||
| `horizontalStretch` | bool | Растягивание |
|
||
| `children` | array | Колонки внутри группы |
|
||
|
||
#### pages / page — Pages / Page
|
||
|
||
```json
|
||
{
|
||
"pages": "Страницы", "children": [
|
||
{ "page": "Основное", "children": [ ... ] },
|
||
{ "page": "Дополнительно", "children": [ ... ] }
|
||
]
|
||
}
|
||
```
|
||
|
||
Page поддерживает `group` для задания ориентации содержимого и `children` для вложенных элементов.
|
||
|
||
Pages поддерживает `pagesRepresentation`: `None`, `TabsOnTop`, `TabsOnBottom`, `TabsOnLeft`, `TabsOnRight`.
|
||
|
||
#### button — Button
|
||
|
||
```json
|
||
{ "button": "Загрузить", "command": "Загрузить", "defaultButton": true }
|
||
```
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `command` | string | Имя команды формы (→ `Form.Command.<name>`) |
|
||
| `commandName` | string | Глобальная команда «как есть» (`CommonCommand.X`, `Catalog.X.Command.Y` …) — без обёртки `Form.` |
|
||
| `stdCommand` | string | Стандартная команда (→ `Form.StandardCommand.<name>`; `X.Y` → `Form.Item.X.StandardCommand.Y`) |
|
||
| `type` | string | `usual`, `hyperlink`, `commandBar` |
|
||
| `defaultButton` | bool | Кнопка по умолчанию |
|
||
| `picture` | string | Ссылка на картинку (`StdPicture.Name`) |
|
||
| `representation` | string | `Auto`, `Picture`, `Text`, `PictureAndText` |
|
||
| `locationInCommandBar` | string | `InCommandBar`, `InAdditionalSubmenu` |
|
||
|
||
#### picture — PictureDecoration
|
||
|
||
```json
|
||
{ "picture": "Логотип", "src": "CommonPicture.Логотип" }
|
||
```
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `src` или `picture` (как свойство) | string | Ссылка на картинку |
|
||
| `loadTransparent` | bool | `true` → загружать прозрачной. По умолчанию `false` |
|
||
| `hyperlink` | bool | Режим гиперссылки |
|
||
| `width` | int | Ширина |
|
||
| `height` | int | Высота |
|
||
|
||
#### picField — PictureField
|
||
|
||
```json
|
||
{ "picField": "Фото", "path": "Фотография" }
|
||
```
|
||
|
||
Для поля, привязанного к булеву/числу (иконка-индикатор в колонке), задайте картинку значения через `valuesPicture` — без неё иконка не отрисуется:
|
||
|
||
```json
|
||
{ "picField": "Картинка", "path": "Таблица.Картинка",
|
||
"valuesPicture": "StdPicture.Favorites", "loadTransparent": true }
|
||
```
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `valuesPicture` | string | Ссылка на картинку значения (`StdPicture.*`, `CommonPicture.*`) |
|
||
| `loadTransparent` | bool | Скрыть кадр «нет значения». Выводится только при `true` |
|
||
|
||
#### calendar — CalendarField
|
||
|
||
```json
|
||
{ "calendar": "Дата", "path": "ДатаОтчета",
|
||
"selectionMode": "Interval", "showCurrentDate": false, "widthInMonths": 2 }
|
||
```
|
||
|
||
| Свойство | XML | Значения |
|
||
|----------|-----|----------|
|
||
| `selectionMode` | `<SelectionMode>` | `Single`, `Multiple`, `Interval` |
|
||
| `showCurrentDate` | `<ShowCurrentDate>` | bool (выводится при наличии ключа) |
|
||
| `widthInMonths` | `<WidthInMonths>` | число месяцев по ширине |
|
||
| `heightInMonths` | `<HeightInMonths>` | число месяцев по высоте |
|
||
| `showMonthsPanel` | `<ShowMonthsPanel>` | bool |
|
||
|
||
Также поддерживается общий `titleLocation` (`none`/`left`/`right`/`top`/`bottom`/`auto`).
|
||
|
||
#### cmdBar — CommandBar
|
||
|
||
```json
|
||
{ "cmdBar": "КоманднаяПанель", "children": [ ... ] }
|
||
```
|
||
|
||
#### popup — Popup
|
||
|
||
```json
|
||
{ "popup": "Печать", "picture": "StdPicture.Print", "children": [ ... ] }
|
||
```
|
||
|
||
#### buttonGroup — ButtonGroup
|
||
|
||
Группа кнопок внутри командной панели (`autoCmdBar`/`cmdBar`/`popup`). Значение ключа — имя элемента.
|
||
|
||
```json
|
||
{ "buttonGroup": "ГруппаПереместить", "title": "Переместить", "children": [
|
||
{ "button": "ПереместитьВверх", "command": "ПереместитьВверх" },
|
||
{ "button": "ПереместитьВниз", "command": "ПереместитьВниз" }
|
||
] }
|
||
```
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `buttonGroup` | string | Имя элемента |
|
||
| `title` | string/object | Заголовок группы |
|
||
| `commandSource` | string | Источник команд группы (`<CommandSource>`): `Form`, `FormCommandPanelGlobalCommands`, `Item.<ИмяЭлемента>`. Также у `cmdBar`. Эмитится «как есть» |
|
||
| `representation` | string | `Auto`, `Picture`, `Text`, `PictureAndText` |
|
||
| `children` | array | Кнопки (`button`) внутри группы |
|
||
|
||
#### autoCmdBar — командная панель формы
|
||
|
||
Командная панель самой формы (`<AutoCommandBar id="-1">`). Задаётся как элемент в `elements`; компилятор автоматически вынимает его из дерева. Нужен только если в панель помещаются **явные** кнопки/группы или меняется выравнивание/автозаполнение — иначе панель формируется автоматически.
|
||
|
||
```json
|
||
{ "autoCmdBar": "ФормаКоманднаяПанель", "horizontalAlign": "Right", "autofill": false, "children": [
|
||
{ "button": "ОК", "command": "ОК", "defaultButton": true },
|
||
{ "button": "Отмена", "command": "Отмена" }
|
||
] }
|
||
```
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `autoCmdBar` | string | Имя панели (обычно `ФормаКоманднаяПанель`) |
|
||
| `horizontalAlign` | string | `Right`, `Left`, `Center` |
|
||
| `autofill` | bool | `false` — отключить автозаполнение стандартными командами |
|
||
| `children` | array | Кнопки/группы кнопок панели |
|
||
|
||
---
|
||
|
||
## 5. Attributes — реквизиты формы
|
||
|
||
```json
|
||
"attributes": [
|
||
{ "name": "Объект", "type": "DocumentObject.Реализация", "main": true },
|
||
{ "name": "Итого", "type": "decimal(15,2)" },
|
||
{ "name": "Таблица", "type": "ValueTable", "columns": [
|
||
{ "name": "Номенклатура", "type": "CatalogRef.Номенклатура" },
|
||
{ "name": "Количество", "type": "decimal(10,3)" }
|
||
]}
|
||
]
|
||
```
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `name` | string | Имя реквизита (обязательно) |
|
||
| `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 |
|
||
| `settings` | object | Настройки динамического списка (только `type: "DynamicList"`) |
|
||
|
||
### settings — динамический список
|
||
|
||
Для реквизита `type: "DynamicList"` объект `settings` описывает источник данных и настройки компоновщика (`ListSettings`).
|
||
|
||
```json
|
||
{ "name": "Список", "type": "DynamicList", "main": true,
|
||
"settings": {
|
||
"mainTable": "Catalog.Контрагенты",
|
||
"query": "@Список.sql",
|
||
"dynamicDataRead": false,
|
||
"fields": [ { "field": "Отложен", "title": "Отложен" } ]
|
||
} }
|
||
```
|
||
|
||
| Ключ | Тип | Описание |
|
||
|------|-----|----------|
|
||
| `mainTable` | string | Основная таблица. Принимает рус-имена метаданных (`Справочник.X` → `Catalog.X`) |
|
||
| `query` | string | Текст запроса (`ManualQuery=true`). Поддерживает `@file.sql` (путь относительно JSON) |
|
||
| `dynamicDataRead` | bool | Динамическое считывание. **Умолчание `true`** — указывать только для отключения (`false`) |
|
||
| `fields` | array | Явные поля набора (редко): `{ field, dataPath?, title? }` — для переопределения заголовка. Обычно поля выводятся из запроса автоматически |
|
||
| `order` | array | Сортировка списка (см. ниже) |
|
||
| `filter` | array | Отбор списка (грамматика как в СКД) |
|
||
| `conditionalAppearance` | array | Условное оформление списка (грамматика как в СКД) |
|
||
|
||
`ManualQuery` выводится из наличия `query` — отдельным ключом не задаётся.
|
||
|
||
Пустой блок настроек компоновщика (`ListSettings`) генерируется автоматически (каноничный скелет платформы); указывать ничего не нужно.
|
||
|
||
#### order / filter / conditionalAppearance
|
||
|
||
Грамматика этих ключей идентична настройкам СКД — см. [skd-dsl-spec.md](skd-dsl-spec.md) (разделы filter / order / conditionalAppearance). Кратко:
|
||
|
||
```json
|
||
"settings": {
|
||
"mainTable": "Catalog.Контрагенты",
|
||
"order": [ "Дата desc", "Наименование", "Auto" ],
|
||
"filter": [ "Организация = _ @off @user", "Сумма > 1000" ],
|
||
"conditionalAppearance": [
|
||
{ "filter": ["Просрочено = true"], "appearance": { "ЦветТекста": "web:Red" } }
|
||
]
|
||
}
|
||
```
|
||
|
||
- **order** — строка `"Поле"` (asc) / `"Поле desc"` (синонимы `убыв`/`desc`, `возр`/`asc`) / `"Auto"`, либо объект `{ field, direction?, use?, viewMode? }`.
|
||
- **filter** — shorthand `"Поле оператор значение @флаги"` (`@off`, `@user`, `@quickAccess`, `@normal`, `@inaccessible`; `_` = пусто) или объект `{ field, op, value?, use?, userSettingID? }` или группа `{ group: "And"|"Or"|"Not", items: [...] }`.
|
||
- **conditionalAppearance** — объект `{ selection?, filter?, appearance?, presentation?, viewMode?, userSettingID?, use? }`. `appearance` — словарь «параметр: значение» платформы (`ЦветТекста`, `ЦветФона`, `Шрифт` и т.п.).
|
||
|
||
`userSettingID: "auto"` → платформа сгенерирует идентификатор пользовательской настройки. Пустые контейнеры (без правил) эмитируются автоматически.
|
||
|
||
---
|
||
|
||
## 6. Parameters — параметры формы
|
||
|
||
```json
|
||
"parameters": [
|
||
{ "name": "Ключ", "type": "DocumentRef.Реализация", "key": true },
|
||
{ "name": "Основание", "type": "DocumentRef.Реализация" }
|
||
]
|
||
```
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `name` | string | Имя параметра (обязательно) |
|
||
| `type` | string | Тип (shorthand) |
|
||
| `key` | bool | Ключевой параметр |
|
||
|
||
---
|
||
|
||
## 7. Commands — команды формы
|
||
|
||
```json
|
||
"commands": [
|
||
{ "name": "Печать", "action": "ПечатьОбработка", "shortcut": "Ctrl+P" },
|
||
{ "name": "Обновить", "action": "ОбновитьОбработка", "picture": "StdPicture.Refresh" }
|
||
]
|
||
```
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `name` | string | Имя команды (обязательно) |
|
||
| `action` | string | Имя процедуры-обработчика |
|
||
| `title` | string | Заголовок |
|
||
| `tooltip` | string/object | Всплывающая подсказка команды (`<ToolTip>`) |
|
||
| `use` | bool/object | Доступность команды по ролям (`<Use>`). См. §4.1c |
|
||
| `currentRowUse` | string | Использование текущей строки: `Auto`, `DontUse`, `Use` |
|
||
| `shortcut` | string | Клавиатурное сочетание |
|
||
| `picture` | string | Ссылка на картинку |
|
||
| `representation` | string | `Auto`, `Picture`, `Text`, `PictureAndText` |
|
||
|
||
---
|
||
|
||
## 8. Система типов (shorthand)
|
||
|
||
### Примитивные типы
|
||
|
||
| DSL | XML |
|
||
|-----|-----|
|
||
| `"string"` | `xs:string` (неограниченная) |
|
||
| `"string(100)"` | `xs:string` + Length=100 |
|
||
| `"decimal(15,2)"` | `xs:decimal` + Digits=15, FractionDigits=2, AllowedSign=Any |
|
||
| `"decimal(10,0,nonneg)"` | `xs:decimal` + AllowedSign=Nonnegative |
|
||
| `"boolean"` | `xs:boolean` |
|
||
| `"date"` | `xs:dateTime` + DateFractions=Date |
|
||
| `"dateTime"` | `xs:dateTime` + DateFractions=DateTime |
|
||
| `"time"` | `xs:dateTime` + DateFractions=Time |
|
||
|
||
### Ссылочные типы
|
||
|
||
| DSL | XML |
|
||
|-----|-----|
|
||
| `"CatalogRef.Организации"` | `cfg:CatalogRef.Организации` |
|
||
| `"DocumentObject.Реализация"` | `cfg:DocumentObject.Реализация` |
|
||
| `"EnumRef.СтавкиНДС"` | `cfg:EnumRef.СтавкиНДС` |
|
||
| `"DataProcessorObject.ЗагрузкаДанных"` | `cfg:DataProcessorObject.ЗагрузкаДанных` |
|
||
|
||
### Платформенные типы
|
||
|
||
| DSL | XML |
|
||
|-----|-----|
|
||
| `"ValueTable"` | `v8:ValueTable` |
|
||
| `"ValueTree"` | `v8:ValueTree` |
|
||
| `"ValueList"` | `v8:ValueListType` |
|
||
| `"FormattedString"` | `v8ui:FormattedString` |
|
||
| `"Picture"` | `v8ui:Picture` |
|
||
| `"DynamicList"` | `cfg:DynamicList` |
|
||
|
||
### Наборы типов (TypeSet → `<v8:TypeSet>`)
|
||
|
||
«Набор типов» вместо конкретного типа. Развязка с обычным типом — по наличию `.Имя`:
|
||
|
||
| DSL | XML | Смысл |
|
||
|-----|-----|-------|
|
||
| `"DefinedType.ДенежнаяСумма"` | `<v8:TypeSet>cfg:DefinedType.ДенежнаяСумма</v8:TypeSet>` | определяемый тип (синоним `ОпределяемыйТип.X`) |
|
||
| `"Characteristic.Номенклатура"` | `<v8:TypeSet>cfg:Characteristic.Номенклатура</v8:TypeSet>` | характеристика (синоним `Характеристика.X`) |
|
||
| `"AnyRef"` | `<v8:TypeSet>cfg:AnyRef</v8:TypeSet>` | любая ссылка (синоним `ЛюбаяСсылка`) |
|
||
| `"AnyIBRef"` | `<v8:TypeSet>cfg:AnyIBRef</v8:TypeSet>` | любая ссылка ИБ |
|
||
| `"CatalogRef"` (голый, без `.Имя`) | `<v8:TypeSet>cfg:CatalogRef</v8:TypeSet>` | любая ссылка справочника (аналогично `DocumentRef`, `EnumRef`, `ExchangePlanRef`, `TaskRef`, `BusinessProcessRef`, `ChartOf*Ref`) |
|
||
|
||
`CatalogRef.Валюты` (с `.Имя`) → обычный `<v8:Type>`; `CatalogRef` (голый) → `<v8:TypeSet>`.
|
||
|
||
### Составные типы
|
||
|
||
Разделитель `" | "` (или `+`). Каждая часть независимо роутится в `<v8:Type>` или `<v8:TypeSet>` (можно смешивать):
|
||
|
||
```json
|
||
"type": "CatalogRef.Организации | CatalogRef.ИндивидуальныеПредприниматели"
|
||
"type": "CatalogRef.Контрагенты | DefinedType.ДенежнаяСумма"
|
||
```
|
||
|
||
---
|
||
|
||
## 9. Автогенерация
|
||
|
||
### Companion-элементы
|
||
|
||
Для каждого элемента автоматически создаются служебные вложенные элементы:
|
||
|
||
| Тип элемента | Companions |
|
||
|---|---|
|
||
| UsualGroup | ExtendedTooltip |
|
||
| InputField | ContextMenu, ExtendedTooltip |
|
||
| CheckBoxField | ContextMenu, ExtendedTooltip |
|
||
| RadioButtonField | ContextMenu, ExtendedTooltip |
|
||
| LabelDecoration | ContextMenu, ExtendedTooltip |
|
||
| LabelField | ContextMenu, ExtendedTooltip |
|
||
| PictureDecoration | ContextMenu, ExtendedTooltip |
|
||
| PictureField | ContextMenu, ExtendedTooltip |
|
||
| CalendarField | ContextMenu, ExtendedTooltip |
|
||
| Table | ContextMenu, AutoCommandBar, SearchStringAddition, ViewStatusAddition, SearchControlAddition |
|
||
| Pages | ExtendedTooltip |
|
||
| Page | ExtendedTooltip |
|
||
| Button | ExtendedTooltip |
|
||
|
||
Именование: `<name>КонтекстноеМеню`, `<name>РасширеннаяПодсказка`, `<name>КоманднаяПанель`, `<name>СтрокаПоиска`, `<name>СостояниеПросмотра`, `<name>УправлениеПоиском`.
|
||
|
||
### ID
|
||
|
||
Последовательная нумерация начиная с 1. `AutoCommandBar` формы всегда имеет `id="-1"`.
|
||
|
||
### Namespace
|
||
|
||
Все 17 namespace-деклараций добавляются автоматически (version="2.17").
|
||
|
||
### Кодировка
|
||
|
||
UTF-8 с BOM (как в файлах конфигурации 1С).
|