Книга: Разработка интерфейса прикладных решений на платформе "1С:Предприятие 8"
Назад: Глава 3.4. Преобразование прикладных данных в данные формы
Дальше: Переменные модуля формы

Глава 3.5. Исполнение модуля формы на клиенте и на сервере

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

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

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

Например, директива компиляции и процедура могут выглядеть следующим образом (рис. 3.22).

Рис. 3.22. Директива компиляции в тексте модуля

На этом рисунке показана директива компиляции &НаСервере и процедура, обрабатывающая событие формы При создании на сервере.

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

Что же касается контекстов исполнения собственных процедур или функций – их определяет сам разработчик в зависимости от своих нужд.

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

Директива &НаКлиенте указывает, что процедура или функция будет исполняться в контексте клиентского приложения. В этой процедуре будет доступен весь контекст формы: реквизиты, элементы и параметры формы. Эта директива используется для всех обработчиков клиентских событий формы, а также для процедур, описывающих локальные команды формы. В дальнейшем процедуры, которым предшествует эта директива, мы будем называть иногда клиентскими процедурами формы.

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

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

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

Если по ошибке никакая директива компиляции не указана, то платформа считает, что используется директива &НаСервере.

Процесс исполнения кода на клиенте и сервере в формах соответствует общему подходу, принятому в «1С:Предприятии». Из клиентских процедур можно вызвать серверные, после их выполнения исполнение кода возвращается на клиент. Принудительно передать исполнение кода в обратную сторону, с сервера на клиент, нельзя, т. е. из серверных процедур нельзя вызвать клиентские.

Назад: Глава 3.4. Преобразование прикладных данных в данные формы
Дальше: Переменные модуля формы