В модуле формы директивы компиляции должны быть указаны не только перед определением процедур и функций, но и перед определением переменных.
Если перед описанием переменной используется директива компиляции &НаКлиенте, то такая переменная будет существовать с момента создания формы до момента ее закрытия. Причем только в клиентской части формы. Из серверных процедур формы она доступна не будет.
Если перед описанием переменной используется директива компиляции &НаСервере, то такая переменная будет существовать только на период вызова и исполнения какой-либо серверной процедуры или функции. После того как исполнение кода вернется на клиент, модуль, исполнявшийся на сервере, будет уничтожен вместе с этой переменной (рис. 3.23).

Рис. 3.23. Однократная компиляция клиентской части модуля и многократная компиляция серверной части модуля
Если эти замечания трудно воспринимаются прямо сейчас, можно прочитать несколько следующих разделов и вернуться еще раз к этому фрагменту. Он станет понятнее.
Почему важно понимать эту особенность? Потому что порой переменные модуля объявляются в явном виде, без указания директивы компиляции. В этом случае, как уже говорилось выше, платформа будет использовать директиву &НаСервере.
Можно пытаться в одной серверной процедуре устанавливать значение этой переменной и читать ее в другой. Но так получится только в том случае, если все эти процедуры выполняются в одном серверном вызове. Если серверные вызовы разные, переменная будет инициализироваться каждый раз заново.
В то же время на клиенте можно использовать переменные модуля для хранения значений на все время жизни формы, но для этого при объявлении таких переменных обязательно должна быть указана директива компиляции &НаКлиенте.
Передавать значения с клиента на сервер с помощью переменных модуля формы нельзя. Хранить значения на сервере в переменных модуля также не получится. Для этого нужно либо использовать реквизиты формы (и выполнять контекстные серверные вызовы), либо передавать значения в параметрах вызываемой процедуры/функции.
Что касается процесса записи объекта из формы, тут есть одна удобная возможность, позволяющая использовать некоторый произвольный набор значений (структуру), доступный одновременно как в клиентских, так и в серверных процедурах. Речь идет о параметрах записи – это структура, указываемая в методе Записать() расширения формы. Подробнее об этом можно прочитать в разделе .