§ 7.1. Команда: действие, которое форма предлагает сделать
Откройте карточку товара и прочитайте, что написано на кнопках сверху: «Записать и закрыть», «Записать», «Ещё». Ни одной из них мы не задавали — форма собрана из полей и групп, про кнопки речи не было. И всё-таки они есть, и каждая что-то делает. Всё, что форма умеет делать, описано у неё отдельно от того, что она показывает, — списком команд.
1. Два списка у одной формы
У формы две стороны, и в редакторе у каждой свой список.
| сторона формы | о чём | где в редакторе |
|---|---|---|
| о чём разговор | данные и их показ | реквизиты и элементы |
| что можно сделать | действия | команды формы |
До сих пор мы читали только первую сторону: какие данные у формы есть, какими элементами они показаны, как сложены на экране. Вторая отвечает на другой вопрос — что человеку здесь разрешено сделать. Речь при этом о двух списках в редакторе, а не о частях окна: на экране команды покажутся кнопками среди прочих элементов.
Реквизиты и элементы говорят, о чём форма. Команды говорят, что в ней можно сделать.
2. Команда — описание действия, а не само действие
Команда — запись о действии: в ней и то, каким действие видит человек, и то, что платформа выполнит, когда его вызовут. Сама работа в команде не лежит. Свойства у неё такие.
| свойство | что задаёт |
|---|---|
| имя | как команду зовут внутри формы |
| заголовок | текст, который видит пользователь |
| подсказка | что всплывает при наведении |
| картинка | значок команды |
| сочетание клавиш | вызов с клавиатуры |
| действие | имя процедуры, которая выполнится |
Первые пять — про то, каким действие видит человек. Последнее — про то, что произойдёт: документация описывает его коротко, как имя процедуры-обработчика.
Отсюда пара, которую стоит запомнить: команда — это глагол формы, а строго — запись в списке команд, у которой есть заголовок для человека и действие для платформы. Заголовок команды становится подписью на кнопке — если у самой кнопки не задан свой.
3. Команда и кнопка — разные вещи
Саму команду на экране не видно. Видно её носителя — кнопку, элемент формы, стоящий в структуре среди полей и групп. Связывает их одно свойство кнопки: имя команды. Выглядеть носитель может по-разному — кнопкой командной панели, обычной кнопкой, гиперссылкой, — но это всё один вид элемента, и о его видах будет отдельный разговор.
команды формы
├── Записать
└── ОбновитьЦены
структура элементов
├── КоманднаяПанель
│ ├── кнопка → Записать
│ └── кнопка → ОбновитьЦены
└── поля
| команда | кнопка | |
|---|---|---|
| что это | описанное действие | элемент формы |
| где живёт | в списке команд формы | в структуре элементов |
| сколько | одна | сколько угодно на одну команду |
| видна ли | нет | да |
Одну и ту же команду может предлагать несколько кнопок: одна в командной панели, другая рядом с таблицей. И наоборот бывает пусто: команда есть, а кнопки нет, — тогда действие описано, но на экране его никто не предлагает. Исчезнуть команда от этого не исчезает: она остаётся в списке, и вызвать её может код.
Команда — что можно сделать. Кнопка — где это предложено. Кнопка без команды ничего не делает, команда без кнопки — действие, о котором человеку не сказали.
4. За командой стоит обработчик
Свойство «действие» указывает на процедуру: когда пользователь нажал кнопку, платформа вызывает её. Сам код в этой книге мы не пишем и не разбираем — но знать, что он там есть, обязательно.
| что видит пользователь | что за этим |
|---|---|
| вызвал команду — кнопкой или с клавиатуры | платформа нашла её описание |
| ждёт | выполняется процедура из свойства «действие» |
| видит результат | то, что сделала процедура |
Отсюда правило чтения, полезное с первого дня: если кнопка нажимается, а ничего не происходит, идти надо не в элементы, а в команду — и смотреть, на какую процедуру она указывает и есть ли в той процедуре хоть что-нибудь.
У стандартных команд платформы такого вопроса не возникает: что делает «Записать», знает сама платформа.
5. Команды, которых никто не задавал
Вернёмся к кнопкам из начала разговора. Мы их не заводили, а они есть — это та же автогенерация, что строила нам формы целиком.
| что мы задали | что получили |
|---|---|
| документ с реквизитами | команды записать, провести, закрыть |
| справочник | команды записать, закрыть |
| ничего сверх этого | кнопки для них в командной панели |
Приходят эти команды от объекта: платформа знает, что делают с записью справочника и с документом, и предлагает эти действия каждой их форме. Свои команды тоже бывают — и откуда берутся те и другие, разберём в следующем разговоре.
Но прежде чем заводить свои, стоит научиться читать чужие.
6. Что список команд говорит о чужой форме
Список команд — короткий ориентир: по нему быстро видно, ради каких действий форму чаще всего открывают. Прочитать его полезно раньше, чем разглядывать поля.
| что видно в списке | что это значит |
|---|---|
| только стандартные команды | форма для просмотра и правки записи |
| есть свои команды | форму открывают ради действий, а не только правок |
| команда без кнопки | действие описано, но не предложено — ищите, кто его вызывает |
| команда помечена как изменяющая сохраняемые данные | после неё форма считается изменённой |
Последняя строка — про свойство, которое так и называется: «изменяет сохраняемые данные». Документация говорит о нём просто: вызов такой команды ставит форме признак изменённости — тот самый, что появляется, когда пользователь правит поле. Отсюда и знакомое поведение: форма после такой команды спросит при закрытии, записывать ли. Подробнее — когда заведём свою команду.
7. В Конфигураторе и в Предприятии
Посмотрим на обе стороны формы — и убедимся, что кнопки берутся из команд.
- Откройте форму элемента «Товаров», которую собирали, и найдите список команд формы. Перепишите, что в нём есть.
-
Найдите в структуре элементов командную панель формы — верхний ряд кнопок — и сами кнопки. Для любой кнопки посмотрите, с какой командой она связана.
-
Откройте в Предприятии карточку любого товара и сверьте: у каждой кнопки сверху есть своя строка в списке команд.
-
Измените заголовок у одной команды — например, добавьте к нему точку. Обновите конфигурацию и посмотрите на кнопку: надпись изменилась.
-
Верните заголовок как был.
Главное в одном абзаце
У формы две стороны: реквизиты с элементами говорят, о чём она, а команды — что в ней можно сделать. Команда не выполняет работу, а описывает её: у неё есть имя, заголовок для человека, подсказка, картинка, сочетание клавиш и действие — имя процедуры, которая выполнится. Команду не видно; видно кнопку — элемент формы, связанный с командой своим свойством. Одну команду могут предлагать несколько кнопок, а может не предлагать ни одна: тогда действие описано, но не предложено. За каждой своей командой стоит обработчик, и если кнопка нажимается без всякого результата, причину ищут в команде, а не в элементах. Стандартные команды приходят от объекта: платформа знает, что делают с записью справочника и с документом, и предлагает эти действия сама. В чужой форме список команд читают раньше полей: он короткий и сразу говорит, ради чего эту форму открывают.
Команд в форме обычно несколько, и появились они по-разному: одни платформа завела сама, другие живут у объекта и достались всем его формам, третьи заведены прямо здесь. Как различить эти три источника и зачем читателю чужой формы это знать?
Контрольные вопросы
- Какие две стороны есть у формы и где каждая живёт в редакторе?
- Что описывает команда и какие у неё свойства?
- Чем команда отличается от кнопки и что их связывает?
- Может ли у одной команды быть несколько кнопок? А команда без кнопки?
- Что стоит за свойством «действие» и почему мы его в этой книге не открываем?
- Кнопка нажимается, а ничего не происходит. Где искать причину?
- Что можно понять о чужой форме по одному списку её команд?
Упражнения
По образцу. Повторите шаги практики на форме документа: выпишите команды формы поступления и для каждой найдите кнопку в структуре элементов.
Своё: назовите глаголы. Для формы, где кладовщик отмечает приёмку товара, перечислите действия, которые ей понадобятся. Пока только словами.
Ловушка: «удалил кнопку — удалил действие». Разработчик убрал кнопку из командной панели и уверен, что команды больше нет. В чём он ошибается и как проверить?
Обратный ход. В чужой форме есть команда «Пересчитать», а кнопки с таким заголовком нет. Какие объяснения возможны?
На чтение. В списке команд чужой формы шесть строк, из них четыре — стандартные. Что вы скажете об этой форме, не открывая ни одного поля?
Ответы — в конце части.