§ 10.5. Где здесь код: события и обработчики

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

1. Три места, где форма оживает

Код не разлит по форме ровным слоем. Он приходит в заранее заданные точки.

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

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

Форма описана правилами. Код отзывается на моменты, которые эти правила предусмотрели, — и работает по тем же правилам, даже когда что-то добавляет.

2. Событие и обработчик

Два слова, которые дальше встретятся на каждом шагу.

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

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

3. Имена событий уже всё объясняют

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

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

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

4. Что в поведении формы объясняется кодом

Читая форму, полезно заранее знать, какие симптомы к коду и ведут.

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

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

5. Чего код не отменяет

Код может многое, но не всё — и границы эти для читателя важнее возможностей.

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

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

6. Как читать форму с кодом, не читая кода

Список обработчиков — это карта мест, где форма оживает, и прочитать её можно, не открывая ни одной процедуры.

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

Последняя строка — грубая, но полезная мерка. Форма без обработчиков целиком описана правилами: прочитали дерево — знаете всё. Форма с двумя десятками обработчиков живёт своей жизнью, и без модуля в ней не разобраться.

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

Посмотрим на места для кода в своих формах и в чужих.

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

  2. Выделите поле артикула и посмотрите его события. Запишите, какие из них сработали бы, если бы человек поменял значение.

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

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

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

Код приходит в форму не везде, а в заданные места: действие команды, события формы и события элементов. Событие — момент, о котором платформа сообщает; обработчик — процедура, которую она в этот момент вызывает. Имена событий сами объясняют клиент-серверную границу: создание формы происходит на сервере, открытие и изменение поля — на клиенте; рядом в модуле стоят директивы компиляции — пометки «на клиенте» и «на сервере», которые говорят, где процедуре работать. Эта книга их не разбирает — она показывает, где они живут. Поведение формы, которое «происходит само», объясняется одним из двух: правилом в дереве или обработчиком в модуле, и сначала ищут правило. Код не отменяет правил: он заполняет, пересчитывает, прячет и даже добавляет элементы, но связь поля с реквизитом, роли форм и состав подсистем остаются за описанием. А прочитать форму с кодом можно и не читая кода: список обработчиков показывает, где она оживает, и насколько она вообще «живая».


Место для кода названо. Но за этой границей лежит не одна тропа, а развилка, и у шагов есть разумная очередь. Какая?

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

  1. В какие три места в форме приходит код?
  2. Что такое событие и что такое обработчик?
  3. Как по имени события понять, где оно происходит?
  4. Что такое директивы компиляции и зачем о них знать читателю форм?
  5. Какие симптомы в поведении формы ведут к коду?
  6. Чего код не отменяет?
  7. Что можно узнать по списку обработчиков, не открывая процедуры?

Упражнения

По образцу. Выпишите для формы поступления все места, куда мог бы прийти код: команды, события формы, события полей.

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

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

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

На чтение. В чужой форме есть элемент, которого нет в дереве. Как он туда попал и подчиняется ли он общим правилам?

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