Версия для печати Поиск
Главная Для начинающих разработчиков Учимся программировать

Почему не выполняется обработчик события в форме?

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

Тут есть важная особенность. Дело в том, что форма существует и на сервере и на клиенте одновременно. Поэтому для каждой процедуры, которая существует в модуле формы, нужно указывать в явном виде контекст ее исполнения – где она будет исполняться, на сервере или на клиенте. Наличие директив компиляции &НаКлиенте или &НаСервере или &НаСервереБезКонтекста связано с тем, что при использовании встроенного языка в модуле формы клиентский код должен быть четко отделен от серверного.

Директива компиляции относится только к той процедуре/функции, перед которой она находится. Если перед процедурой/функцией нет директивы - это означает директиву по умолчанию, ей является директива &НаСервере. Поскольку в рассматриваемом примере событие ОбработкаВыбора происходит на клиенте, то при отсутствии директивы компиляции код обработчика компилируется на сервере, и поэтому не исполняется на клиенте.

Чтобы избежать таких ошибок, при создании обработчиков событий элементов формы удобнее всего пользоваться кнопкой открытия справа от событий отображенных в палитре свойств этих элементов. Тогда система автоматически создаст шаблон процедуры обработчика в модуле формы и предварит его нужной директивой &НаКлиенте или &НаСервере в зависимости от того, где происходит то или иное событие.

Последнее обновление: 22.06.2012

Обсудить статью на форуме

Задать другой вопрос / Закрыть