Серверные процедуры и функции могут исполняться с передачей контекста формы на сервер (директива компиляции &НаСервере) и без (директива компиляции &НаСервереБезКонтекста).
При контекстных серверных вызовах процедур в модуле формы форма передает свои данные (реквизиты) и элементы на сервер и обратно. Данные формы становятся доступны на сервере, но нужно понимать, что передача контекста формы на сервер – это целый непростой процесс.
Ведь контекст формы сначала на клиенте нужно подготовить к передаче, упаковать, а потом на сервере создать специальную среду, в которой будет исполняться код, развернуть весь полученный контекст, инициализировать им эту среду и т. д. После выполнения процедуры измененные данные снова «поедут» на клиент, если их нужно отображать в форме. На все это, естественно, тратится время и ресурсы системы.
Однако использование контекстных серверных процедур необходимо, когда нужно, например, поменять данные во всей табличной части или когда нужно при этом поработать с тем объектом, который отображается в форме, выполнить его экспортируемый метод и т. п.
Во внеконтекстных серверных процедурах недоступен контекст формы. Это значит, что при вызове этих процедур не происходит передача данных формы на сервер и обратно. Соответственно, производительность прикладного решения при использовании внеконтекстных серверных процедур будет выше.
Так что же использовать в том или ином случае: внеконтекстные или контекстные серверные процедуры? Решение зависит от конкретной задачи. Рассмотрим пример.
Предположим, в периодическом регистре сведений Цены содержатся розничные цены товаров из справочника Товары. Для расходования товаров существует документ РасходнаяНакладная, в табличную часть которого подбираются товары.
Хочется, чтобы пользователь, выбрав товар, видел в документе не только ссылку, но сразу же и цену выбранного товара из регистра сведений, актуальную на дату документа (рис. 4.21).

Рис. 4.21. Подстановка актуальной цены товара в расходную накладную
Таким образом, в тот момент, когда пользователь выбирает товар в колонке Товар, ссылающейся на справочник Товары, колонку Цена табличной части документа РасходнаяНакладная нужно заполнить актуальной ценой товара из регистра сведений.
Рассмотрим возможные варианты решения этой задачи.