diff --git a/docs/form-patterns.md b/docs/form-patterns.md index 5e9ef562..870eab36 100644 --- a/docs/form-patterns.md +++ b/docs/form-patterns.md @@ -104,6 +104,8 @@ | Итоги | `ГруппаИтоги` | horizontal | | Кнопки | `ГруппаКнопок` | horizontal | | Страницы | `ГруппаСтраницы` / `Страницы` | pages | +| Предупреждение | `ГруппаПредупреждение` | horizontal, visible:false | +| Доп. секция | `ГруппаДополнительно` / `ГруппаПрочее` | vertical, collapse | ### Элементы @@ -115,6 +117,9 @@ | Фильтр | `Отбор[Поле]` | — | | Флажок фильтра | `Отбор[Поле]Использование` | — | | Кнопка команды | `[Команда]Кнопка` | — | +| Баннер-картинка | `[Баннер]Картинка` | — | +| Баннер-надпись | `[Баннер]Надпись` | — | +| Подменю | `Подменю[Действие]` | — | ### Обработчики событий @@ -141,6 +146,119 @@ 7. **Скрытые элементы для состояний.** Баннеры, предупреждения — `visible: false` по умолчанию, показываются программно. 8. **Надписи-ссылки для диалогов.** `labelField` с `hyperlink: true` и событием Click — для открытия подформ (ЦеныИВалюта, УчётнаяПолитика). +## Продвинутые паттерны (ERP) + +Извлечены из конфигурации «Управление предприятием» (ERP 8.3.24). Применяйте в сложных формах. + +### Сворачиваемые группы (Collapsible) + +Для необязательных секций — «Подписи», «Дополнительно», «Прочее». Сворачиваются по умолчанию, экономят место. + +``` +ГруппаПодписи (vertical, collapse, collapsed) +├─ Руководитель -> Объект.Руководитель +└─ ГлавныйБухгалтер -> Объект.ГлавныйБухгалтер +``` + +DSL: +```json +{ "group": "vertical", "name": "ГруппаПодписи", "title": "Подписи", + "behavior": "Collapsible", "collapsed": true, "children": [ + { "input": "Руководитель", "path": "Объект.Руководитель" }, + { "input": "ГлавныйБухгалтер", "path": "Объект.ГлавныйБухгалтер" } +]} +``` + +### Баннер-предупреждение (Status Banner) + +Группа «картинка + надпись» без заголовка, скрыта по умолчанию. Показывается программно при определённых условиях (просрочка, блокировка, информация). + +``` +ГруппаПредупреждение (horizontal, showTitle:false, visible:false) +├─ [Picture] ПредупреждениеКартинка -> StdPicture.Information +└─ [Label] ПредупреждениеНадпись (maxWidth:76, textColor:style:ПоясняющийТекст) +``` + +DSL: +```json +{ "group": "horizontal", "name": "ГруппаПредупреждение", "showTitle": false, + "visible": false, "children": [ + { "picture": "ПредупреждениеКартинка" }, + { "label": "ПредупреждениеНадпись", "title": "Текст предупреждения", + "maxWidth": 76, "autoMaxWidth": false } +]} +``` + +### Выпадающее меню в командной панели (Popup) + +Группировка связанных команд (печать, отправка, выгрузка) в одну кнопку-меню с иконкой. + +``` +[CmdBar] КоманднаяПанель +├─ [Popup] ПодменюПечать (picture: StdPicture.Print, representation: Picture) +│ ├─ [Button] ПечатьНакладная -> Печать [cmd] +│ └─ [Button] ПечатьСчёт -> ПечатьСчёт [cmd] +└─ [Popup] ПодменюОтправить (picture: StdPicture.SendByEmail) + └─ [Button] ОтправитьПоПочте -> Отправить [cmd] +``` + +DSL: +```json +{ "cmdBar": "КоманднаяПанель", "children": [ + { "popup": "ПодменюПечать", "title": "Печать", + "picture": "StdPicture.Print", "representation": "Picture", "children": [ + { "button": "ПечатьНакладная", "command": "Печать" }, + { "button": "ПечатьСчёт", "command": "ПечатьСчёт" } + ]}, + { "popup": "ПодменюОтправить", "title": "Отправить", + "picture": "StdPicture.SendByEmail", "representation": "Picture", "children": [ + { "button": "ОтправитьПоПочте", "command": "Отправить" } + ]} +]} +``` + +### Форма без стандартной командной панели + +Для модальных диалогов и мастеров — отключение стандартной командной панели, полностью ручное управление кнопками. + +``` +properties: commandBarLocation=None, windowOpeningMode=LockWholeInterface +Содержимое (vertical) +├─ ... рабочая область ... +ГруппаКнопок (horizontal) +├─ Назад (command), Далее (command, defaultButton) +└─ Закрыть (stdCommand: Close) +``` + +DSL: +```json +{ + "properties": { "commandBarLocation": "None", "windowOpeningMode": "LockWholeInterface" }, + "elements": [ + { "group": "vertical", "name": "Содержимое", "children": [ "..." ] }, + { "group": "horizontal", "name": "ГруппаКнопок", "children": [ + { "button": "Назад", "command": "Назад" }, + { "button": "Далее", "command": "Далее", "defaultButton": true }, + { "button": "Закрыть", "stdCommand": "Close" } + ]} + ] +} +``` + +### Надпись-гиперссылка для открытия подформ + +`labelField` с `hyperlink: true` и событием Click — вместо кнопки. Типичный приём для «ЦеныИВалюта», «УчётнаяПолитика» и подобных. + +``` +[LabelField] ЦеныИВалютаНадпись -> ЦеныИВалюта (hyperlink) {Click} +``` + +DSL: +```json +{ "labelField": "ЦеныИВалютаНадпись", "path": "ЦеныИВалюта", + "hyperlink": true, "on": ["Click"] } +``` + ## Примеры DSL ### Типичная форма обработки