§ 7.6. Чужая форма: каталог команд

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

1. Что собираем

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

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

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

Собираем команды, а не кнопки: кнопка — только место, где действие предложено. Одна строка каталога может иметь три носителя, а может ни одного.

Кнопки отвечают на вопрос «где нажать». Каталог команд отвечает на вопрос, что у этой формы задумано и где из этого предложено человеку.

2. Два прохода: от команд и от кнопок

Обойти форму можно с двух сторон, и надёжнее сделать оба круга.

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

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

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

Смотрят при этом не только главную панель: у каждой таблицы своя, у панели есть меню «Ещё», а у таблиц и полей — контекстные меню. Всё это мы разбирали, когда говорили о панелях; здесь это превращается в маршрут обхода.

3. Разбор на примере

Вот команды чужой формы документа «Заявка поставщику» — так, как они лежат в редакторе.

Команды формы
├── ЗаполнитьПоОстаткам
└── ОтправитьПоставщику

Стандартные
├── Записать, Провести, Закрыть
└── у таблицы «Товары»:
    добавить, удалить, передвинуть

Глобальные
└── Справочник.Контрагенты:
    ПоказатьДолг

И её структура элементов — та часть, где кнопки.

Форма
├── КоманднаяПанель
│   ├── Записать, Провести
│   ├── Заполнить по остаткам
│   └── Показать долг
├── Шапка
├── Товары
│   └── КоманднаяПанель
│       ├── добавить, удалить
│       └── Заполнить по остаткам
└── КонтекстноеМеню таблицы
    └── удалить

Каталог получается такой.

командазаголовокисточникгде предложеначто известно
Записать, Провестите жестандартныепанель формызнает платформа
добавить, удалитьте жестандартные, от таблицыпанель таблицы, меню строкизнает платформа
ЗаполнитьПоОстаткамЗаполнить по остаткамформыпанель формы и панель таблицыпроцедура непустая
ОтправитьПоставщикуОтправить поставщикуформынигдепроцедура пуста
ПоказатьДолгДолг контрагентаглобальные, от «Контрагентов»панель формыкод в модуле команды справочника

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

4. Что каталог говорит о форме

Готовый каталог читается целиком, а не по строкам.

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

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

5. Чего каталог не скажет

Границу полезно знать заранее.

вопросотвечает ли каталог
что можно сделатьда
где это предложенода
откуда действие и где его кодда
что именно код делаетнет
безопасно ли нажатьнет

Две последние строки — не недостаток разбора, а его честная граница. Каталог доводит читателя до двери: вот имя процедуры, вот модуль. Что за дверью — покажет книга о коде.

6. Четыре ловушки

Первая: считать кнопки вместо команд. Двадцать кнопок и восемь команд — обычное дело. Каталог строят по командам, иначе форма покажется сложнее, чем она есть.

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

Третья: обойти только главную панель. Кнопки живут ещё на панелях таблиц, в меню «Ещё» и в контекстных меню. Пропустив их, легко записать команду в «нигде не предложена».

Четвёртая: принять серую кнопку за запрет. Чаще всего выключена именно кнопка: команда на месте, и там, где её предлагает другая кнопка, она сработает. Бывает и так, что платформа гасит все носители разом — например, пока действие не имеет смысла для этой записи. Но запрет в любом случае задают права, а не серый цвет.

7. Разбор по шагам

Шесть шагов — и каталог готов.

  1. Откройте список команд формы и выпишите все три раздела: собственные, стандартные, глобальные.

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

Здесь будет снимок экранасписок команд чужой формы и структура элементов с раскрытыми панелями рядом
  1. Сведите оба списка в каталог: команда, заголовок, источник, где предложена.

  2. Отметьте строки без кнопок и кнопки, у которых снята видимость или доступность.

  3. Заполните последнюю колонку: у своих команд — есть ли что-нибудь в процедуре, у глобальных — от какого объекта команда и где её модуль.

  4. Скажите одной фразой, ради чего эту форму открывают.

Шестой шаг — итог разбора, и проверяется он просто: если фраза получилась только про запись и закрытие, перед вами обычная карточка. Если в ней появились свои глаголы — значит, форму делали ради них, и с них начнётся любой разговор о ней.

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

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


Форму мы теперь читаем целиком: данные, элементы, композицию, списки и команды. Но форма не висит в пустоте — её кто-то открывает. Через что пользователь до неё добирается и почему одни формы видны сразу, а другие приходится искать?

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

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

Упражнения

По образцу. Составьте каталог команд для формы элемента «Товаров», которую вы собирали, — вместе с командой «Обновить цены».

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

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

Обратный ход. В каталоге есть команда «ПересчитатьСкидки» без единой кнопки, а процедура у неё непустая. Что это значит и где искать продолжение?

На чтение. Две формы одного документа: в каталоге первой — только стандартные команды, во второй — те же плюс четыре своих. Зачем в конфигурации обе и кому какая?

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