Чтобы обеспечить перерасчет суммы услуги при изменении цены, мы сразу пойдем на сервер (ведь расчеты нужно делать на сервере), там рассчитаем вознаграждение и сумму услуги и поместим их в форму. Затем вернемся на клиент с готовой формой.
Для этого создадим форму документа ОказаниеУслуги и обработчик события ПриИзменении() для поля формы ЦенаУслуги (листинг 4.14).
Листинг 4.14. Процедура «ЦенаУслугиПриИзменении()»
&НаКлиенте
Процедура ЦенаУслугиПриИзменении(Элемент)
РасчетСуммыУслуги();
КонецПроцедуры
В этом обработчике мы вызываем процедуру РасчетСуммыУслуги(), исполняющуюся на сервере (листинг 4.15).
Листинг 4.15. Процедура «РасчетСуммыУслуги()»
&НаСервере
Процедура РасчетСуммыУслуги()
Если Объект.ЦенаУслуги > 1000 Тогда
Объект.Вознаграждение = 10;
Иначе
Объект.Вознаграждение = 5;
КонецЕсли;
Объект.Сумма = Объект.ЦенаУслуги + Объект.ЦенаУслуги * Объект.Вознаграждение / 100;
КонецПроцедуры
В процедуру расчета передается контекст формы, так как в ней изменяются реквизиты объекта Вознаграждение и Сумма. Отключим для соответствующих полей формы свойство Доступность, так как они рассчитываются при изменении поля ЦенаУслуги.
ПРИМЕЧАНИЕ
Этот пример можно посмотреть в демонстрационной конфигурации «03 (вар. 1) Использование клиентских процедур для небольших расчетов данных формы».
Запустим «1С:Предприятие», откроем документ об оказании услуг, выберем услугу и внесем цену услуги. После этого поля Вознаграждение и Сумма автоматически пересчитаются по заданному нами алгоритму (рис. 4.28).

Рис. 4.28. Пересчет данных в документе при изменении цены услуги
В результате будет сделано одно обращение на сервер, кроме того, этот вызов будет контекстным (рис. 4.29).

Рис. 4.29. Показатели производительности