§ 7.2. Три источника команд: платформа, объект, форма

Откройте в редакторе формы поступления список команд и посмотрите, как он устроен: команд там больше, чем кнопок на экране, и лежат они не одной кучей. Список разбит на разделы. Первый — стандартные: то, что платформа добавила сама. Второй — глобальные: туда попадают команды объектов и общие. Третий — собственные команды формы: то, что завели прямо здесь. Эти разделы и отвечают на вопрос, откуда команда взялась, — а с ним и на вопрос, где искать, что она делает.

1. Три источника в одной таблице

источниккто завёлгде живётв каких формахгде то, что она делает
стандартныеплатформав платформе: выводятся из вида объектаво всех формах такого видав самой платформе
команды объектаразработчикв дереве, у объектаво всех подходящих формахв модуле команды
команды формыразработчикв этой форметолько в нейв модуле формы

Последняя колонка — главная для читателя чужой формы. Команда, которая ведёт себя странно, отправляет искать причину в одно из трёх разных мест, и перепутать их — значит час читать не тот код.

Источник команды — адрес, по которому идут за объяснением: у стандартной объяснение встроено в платформу, у команды объекта — в модуле команды, у команды формы — в модуле формы.

Развернём таблицу по строкам и начнём с тех команд, которые никто не заводил.

2. Стандартные: глаголы, которые платформа знает сама

Стандартные команды никто не заводит — платформа выводит их из того, с чем форма работает. Документация приводит в пример «Записать» и «Закрыть».

с чем работает формакакие глаголы добавляет платформа
с записью справочниказаписать, закрыть
с документомзаписать, провести, закрыть
с таблицей на формедобавить строку, удалить, передвинуть

Набор зависит от вида объекта: у формы обработки, например, записывать нечего, и команды записи у неё нет.

Последняя строка таблицы удивляет чаще всего: стандартные команды бывают не только у формы, но и у элементов. Таблица на форме добавляет стандартные команды таблицы, а кнопки над ней, о которых шла речь в разговоре о таблицах, — лишь их носители: их можно спрятать, а команды останутся.

Это прямое продолжение декларативности. Мы задали, что форма работает с документом, — и платформа сама знает, что документ записывают и проводят. Описывать эти действия не нужно: что делает «Записать», решает платформа. Показывать ли для команды кнопку, решает разработчик в форме; а вмешаться в само действие можно только кодом — это уже за границей книги.

Теперь — команды, которые заводят у объекта.

3. Команды объекта: живут в дереве, работают в формах

Второй источник — команды, которые разработчик заводит у самого объекта: у справочника или документа в дереве конфигурации есть для них своя ветка. Такая команда принадлежит объекту, а не форме, и поэтому попадает во все формы, где она к месту.

Что значит «к месту», решает её параметр. У команды объекта есть свойство «тип параметра», и документация прямо говорит: оно имеет смысл только для команд, размещаемых в формах. Этим свойством команда и выбирает формы: если тип параметра — ссылка на товар, редактор предложит её в любой форме, где есть реквизит такого типа. Если таких реквизитов несколько, нужный выбирают, когда ставят команду в форму.

что задал разработчикчто получилось
у «Товаров» команда с параметром «ссылка на товар»она доступна в формах, где есть товар
у той же команды — группа размещенияв какую панель формы она встанет

В редакторе формы такие команды лежат на закладке глобальных, и разделов там два. В параметризуемых — те, у которых задан тип параметра: документация собирает здесь команды, «тип параметра которых совпадает с типом реквизита формы». В независимых — команды без параметра, например открыть список.

Главное для чтения — где их код. У команды объекта свой модуль, модуль команды, и обработчик лежит в нём. В модуле формы искать его бесполезно — хотя сам обработчик, конечно, может обращаться к другим модулям.

Родственник этого источника — общие команды: их заводят не у объекта, а в общей ветке конфигурации. Отдельно разбирать их не будем: для чтения формы правила те же — глобальный раздел в редакторе и свой модуль команды.

4. Команды формы: живут только здесь

Третий источник — команды, заведённые прямо в форме. Их список — на закладке команд формы, и документация называет их «собственно командами формы».

команда объектакоманда формы
где заведенау объекта в деревев форме
в каких формахво всех подходящихтолько в этой
где кодмодуль командымодуль формы
если поменятьизменится вездеизменится только здесь

Отсюда и выбор, который делает разработчик. Действие нужно в одной форме — заводят команду формы. Нужно везде, где встречается товар, — команду объекта: одна правка, и все формы получают её сразу.

5. Зачем читателю знать источник

Три источника — три разных ответа на вопросы, которые возникают при чтении чужой формы.

вопросстандартнаяобъектаформы
где смотреть, что делаетнигде: знает платформамодуль командымодуль формы
есть ли она в других формахво всех такого видаво всех подходящихнет
можно ли убрать из формытолько кнопкутолько кнопкусаму команду

Последняя строка — ловушка для торопливых. Стандартную команду или команду объекта нельзя удалить из одной формы: они не её. Можно лишь не показывать кнопку. А вот команду формы удаляют вместе с кнопками — и тогда действие пропадает по-настоящему.

6. Как узнать источник в чужой форме

Узнают по кнопке: у неё есть свойство с именем команды, и это имя часто подсказывает, откуда команда пришла.

что видно в имени командыисточник
команда из раздела стандартныхплатформа
имя объекта конфигурации в началекоманда объекта или общая
имя из списка команд формыформа

Если по имени сразу не ясно, второй шаг простой: найти команду в редакторе. В каком разделе нашлась — тот и источник. А за кодом идут туда, куда указывает последняя колонка таблицы из начала разговора.

7. В Конфигураторе

Разберём по источникам команды формы поступления — только смотрим, ничего не меняем.

  1. Откройте форму поступления и её список команд. Найдите раздел стандартных: перепишите, какие глаголы платформа дала документу.
Здесь будет снимок экранаредактор команд формы поступления с раскрытым разделом стандартных команд
  1. Перейдите к глобальным командам. Посмотрите раздел независимых и раздел параметризуемых: что там есть и какой у них тип параметра.

  2. Найдите в дереве конфигурации документ «ПоступлениеТоваров» и его ветку команд. В «Канцтоварах» она пуста: команд объекта мы не заводили.

  3. Вернитесь к форме и посмотрите собственные команды формы — список тоже пуст или почти пуст.

  4. Для каждой кнопки командной панели формы определите источник её команды — по имени команды в свойствах кнопки.

Итог опыта: все кнопки нашей формы пришли от платформы. Свою команду мы заведём позже — и тогда в списке собственных команд формы появится первая строка.

Главное в одном абзаце

Команды приходят в форму из трёх источников, и в редакторе у каждого свой раздел. Стандартные никто не заводит: платформа выводит их из того, с чем работает форма, — у документа записать и провести, у таблицы добавить и удалить; что они делают, знает сама платформа. Команды объекта заводит разработчик в дереве конфигурации, и благодаря типу параметра они попадают во все формы, где к месту, — а код у них в модуле команды, не в модуле формы. Команды формы заведены прямо в ней, живут только в ней, и код их в модуле формы. Источник команды — адрес, по которому идут за объяснением: он говорит, где искать код, есть ли команда в других формах и можно ли убрать её из этой. Узнают источник по имени команды у кнопки, а если оно не подсказывает — по разделу редактора, где команда нашлась.


Команда — действие, но пользователь нажимает не на неё. Он нажимает на кнопку, а у кнопки свои свойства: вид, подпись, место. Как кнопка связывается с командой и что будет, если связь оборвать?

Контрольные вопросы

  1. Назовите три источника команд и скажите, где в каждом случае лежит то, что команда делает.
  2. Откуда берутся стандартные команды и кто решает, что они делают?
  3. Почему команда таблицы на форме тоже считается стандартной?
  4. Как команда объекта попадает в форму и при чём здесь тип её параметра?
  5. Где искать код команды объекта и почему его нет в модуле формы?
  6. Какую команду можно удалить из формы, а у какой можно только спрятать кнопку?
  7. Как по кнопке узнать источник её команды?

Упражнения

По образцу. Разберите по источникам команды формы элемента «Товаров»: какие стандартные, есть ли глобальные, есть ли собственные.

Своё: куда завести. Нужна команда «Распечатать ценник». Она должна быть и в карточке товара, и в строке поступления. Команду формы или команду объекта вы заведёте и почему?

Ловушка: «удалил команду — пропала везде». Разработчик убрал из формы кнопку команды объекта и уверен, что команды в конфигурации больше нет. Что он на самом деле сделал?

Обратный ход. Кнопка в чужой форме что-то делает, но в модуле формы нет ни одной процедуры с похожим именем. Где искать?

На чтение. В форме документа три кнопки: «Провести», «Заполнить по заказу», «Отправить поставщику». О последних двух ничего не известно. Какие предположения об их источнике вы сделаете и как проверите?

Ответы — в конце части.