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