/form-patterns — паттерны компоновки форм
Справочник типовых паттернов дизайна управляемых форм 1С. Вызывай перед проектированием формы через /form-compile , когда требования пользователя не детализируют расположение элементов.
Как использовать: выбери подходящий архетип, применяй конвенции именования, при необходимости используй продвинутые паттерны.
Архетипы форм
Форма документа
Шапка (horizontal, 2 колонки) ├─ Левая (vertical): НомерДата (H: Номер + Дата "от"), Контрагент, Договор ├─ Правая (vertical): Организация, Подразделение, ЦеныИВалюта (надпись-ссылка) Страницы (pages) ├─ Товары: таблица Объект.Товары ├─ Услуги: таблица Объект.Услуги (опционально) └─ Дополнительно: прочие реквизиты Подвал (vertical) ├─ Итоги (horizontal): Всего, НДС, Скидка └─ КомментарийОтветственный (horizontal): Комментарий + Ответственный
События: OnCreateAtServer, OnReadAtServer, OnOpen, BeforeWriteAtServer, AfterWriteAtServer, AfterWrite, NotificationProcessing Свойства: autoTitle=false
Форма обработки (DataProcessor)
Параметры (vertical) ├─ Группа полей ввода (Организация, Период, режимы работы) ├─ Информационные надписи (label, hyperlink) Рабочая область ├─ Таблица данных или Pages с вкладками Кнопки действий ├─ Выполнить / Применить (defaultButton) ├─ Закрыть (stdCommand: Close)
События: OnCreateAtServer, OnOpen, NotificationProcessing Свойства: windowOpeningMode=LockOwnerWindow (если диалог), autoTitle=false
Форма списка
Отборы (group: alwaysHorizontal) ├─ ГруппаОтбор[Поле] (H): Флажок + Поле ввода (для каждого фильтра) Список (table, DynamicList) ├─ Колонки: labelField (не input — данные только для чтения)
События: OnCreateAtServer, OnOpen, NotificationProcessing, OnLoadDataFromSettingsAtServer Свойства: autoSaveDataInSettings=Use Фильтры: пара реквизитов на каждый — Отбор[Поле] (значение) + Отбор[Поле]Использование (boolean)
Форма элемента справочника
Простая:
ГруппаРеквизитов (horizontal) ├─ Наименование -> Объект.Description └─ Код -> Объект.Code (если нужен)
Сложная:
Главное (vertical) ├─ Наименование -> Объект.Description ├─ Параметры (horizontal, 2 колонки) │ ├─ Левая: основные реквизиты │ └─ Правая: дополнительные реквизиты └─ КонтактныеДанные / Дополнительно (vertical)
События: OnCreateAtServer, OnReadAtServer, BeforeWriteAtServer, NotificationProcessing
Мастер (Wizard)
Страницы (pages, OnCurrentPageChange) ├─ Шаг1: описание + параметры ├─ Шаг2: основная работа └─ Шаг3: результат Кнопки (horizontal) ├─ Назад (command), Далее (command, defaultButton), Выполнить (command) └─ Закрыть (stdCommand: Close)
Свойства: windowOpeningMode=LockOwnerWindow, commandBarLocation=None
Конвенции именования
Группы
Назначение Имя Тип
Шапка ГруппаШапка
horizontal
Левая колонка ГруппаШапкаЛевая
vertical
Правая колонка ГруппаШапкаПравая
vertical
Номер+Дата ГруппаНомерДата
horizontal
Подвал ГруппаПодвал
vertical
Итоги ГруппаИтоги
horizontal
Кнопки ГруппаКнопок
horizontal
Страницы ГруппаСтраницы / Страницы
pages
Предупреждение ГруппаПредупреждение
horizontal, visible:false
Доп. секция ГруппаДополнительно / ГруппаПрочее
vertical, collapse
Элементы
Назначение Имя
Поле в таблице [Таблица][Поле]
Итог Итоги[Поле]
Надпись-ссылка [Поле]Надпись
Фильтр Отбор[Поле]
Флажок фильтра Отбор[Поле]Использование
Кнопка команды [Команда]Кнопка
Баннер-картинка [Баннер]Картинка
Баннер-надпись [Баннер]Надпись
Подменю Подменю[Действие]
Обработчики событий
Имя = имя элемента + суффикс на русском:
Событие Суффикс Пример
OnChange ПриИзменении ОрганизацияПриИзменении
StartChoice НачалоВыбора КонтрагентНачалоВыбора
Click Нажатие ЦеныИВалютаНажатие
OnEditEnd ПриОкончанииРедактирования ТоварыПриОкончанииРедактирования
OnStartEdit ПриНачалеРедактирования ТоварыПриНачалеРедактирования
Обработчики формы: ПриСозданииНаСервере , ПриОткрытии , ПередЗакрытием , ОбработкаОповещения .
Принципы компоновки
-
Порядок чтения. Сверху вниз, слева направо. Самое важное — вверху.
-
Двухколоночная шапка. Основные реквизиты слева (контрагент, склад), организационные справа (организация, подразделение).
-
Кнопки действий внизу. Главная кнопка — defaultButton: true . Закрыть — всегда последняя.
-
Таблицы — основная область. Табличные части занимают большую часть формы, обычно на Pages.
-
Итоги рядом с таблицей. В подвале, горизонтальная группа, все поля readOnly.
-
Фильтры — отдельная зона. Над списком, alwaysHorizontal, пара «флажок + поле» на каждый фильтр.
-
Скрытые элементы для состояний. Баннеры, предупреждения — visible: false , показываются программно.
-
Надписи-ссылки для диалогов. labelField с hyperlink: true и событием Click.
Продвинутые паттерны (ERP)
Сворачиваемые группы
Для необязательных секций (подписи, дополнительно, прочее):
{ "group": "vertical", "name": "ГруппаПодписи", "title": "Подписи", "behavior": "Collapsible", "collapsed": true, "children": [...] }
Баннер-предупреждение
Группа «картинка + надпись», скрыта по умолчанию, показывается программно:
{ "group": "horizontal", "name": "ГруппаПредупреждение", "showTitle": false, "visible": false, "children": [ { "picture": "ПредупреждениеКартинка" }, { "label": "ПредупреждениеНадпись", "title": "Текст", "maxWidth": 76, "autoMaxWidth": false } ]}
Popup-меню в командной панели
Группировка связанных команд (печать, отправка) в одну кнопку с иконкой:
{ "cmdBar": "КоманднаяПанель", "children": [ { "popup": "ПодменюПечать", "title": "Печать", "picture": "StdPicture.Print", "representation": "Picture", "children": [ { "button": "ПечатьНакладная", "command": "Печать" }, { "button": "ПечатьСчёт", "command": "ПечатьСчёт" } ]} ]}
Форма без стандартной командной панели
Для модальных диалогов и мастеров:
{ "properties": { "commandBarLocation": "None", "windowOpeningMode": "LockWholeInterface" } }
Надпись-гиперссылка
Вместо кнопки для открытия подформ (ЦеныИВалюта, УчётнаяПолитика):
{ "labelField": "ЦеныИВалютаНадпись", "path": "ЦеныИВалюта", "hyperlink": true, "on": ["Click"] }
Пример: форма обработки (полный DSL)
{ "title": "Загрузка данных из CSV", "properties": { "autoTitle": false, "windowOpeningMode": "LockOwnerWindow" }, "events": { "OnCreateAtServer": "ПриСозданииНаСервере" }, "elements": [ { "group": "vertical", "name": "ГруппаПараметры", "children": [ { "input": "ФайлЗагрузки", "path": "ФайлЗагрузки", "title": "Файл", "clearButton": true, "horizontalStretch": true, "on": ["StartChoice"] }, { "input": "Кодировка", "path": "Кодировка" }, { "input": "Разделитель", "path": "Разделитель", "title": "Разделитель колонок" } ]}, { "table": "Данные", "path": "Объект.Данные", "on": ["OnStartEdit"], "columns": [ { "input": "ДанныеНомерСтроки", "path": "Объект.Данные.LineNumber", "readOnly": true, "title": "№" }, { "input": "ДанныеНаименование", "path": "Объект.Данные.Наименование" }, { "input": "ДанныеКоличество", "path": "Объект.Данные.Количество", "on": ["OnChange"] }, { "input": "ДанныеСумма", "path": "Объект.Данные.Сумма", "readOnly": true } ]}, { "group": "horizontal", "name": "ГруппаКнопок", "children": [ { "button": "Загрузить", "command": "Загрузить", "title": "Загрузить из файла", "defaultButton": true }, { "button": "Очистить", "command": "Очистить", "title": "Очистить таблицу" }, { "button": "Закрыть", "stdCommand": "Close" } ]} ], "attributes": [ { "name": "Объект", "type": "ExternalDataProcessorObject.ЗагрузкаИзCSV", "main": true }, { "name": "ФайлЗагрузки", "type": "string" }, { "name": "Кодировка", "type": "string(20)" }, { "name": "Разделитель", "type": "string(5)" } ], "commands": [ { "name": "Загрузить", "action": "ЗагрузитьОбработка" }, { "name": "Очистить", "action": "ОчиститьОбработка" } ] }