Как из управляемой формы вызвать процедуру модуля объекта

Как из управляемой формы вызвать процедуру модуля объекта

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

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

Общая схема вызова серверной процедуры/функции состоит из нескольких этапов:

  1. Вызов контекстной серверной процедуры формы;
  2. Преобразование основного реквизита формы в прикладной объект;
  3. Вызов экспортной процедуры/функции модуля объекта;
  4. Обратное преобразование прикладного объекта в реквизит формы.

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

Процедура модуля объекта документа для применения скидки:

Процедура ПрименитьСкидку(ПроцентСкидки) Экспорт
    Для каждого СтрокаТЧ Из Товары Цикл
        СтрокаТЧ.Цена = СтрокаТЧ.Цена - СтрокаТЧ.Цена / 100 * ПроцентСкидки;
    КонецЦикла;
КонецПроцедуры

Внимание!

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


На форме документа расположим кнопку, вызывающую серверную процедуру:

&НаКлиенте
Процедура ПересчитатьЦены(Команда)

    // Этап 1. Вызов серверной процедуры
    ПересчитатьЦеныНаСервре();

КонецПроцедуры

&НаСервере
Процедура ПересчитатьЦеныНаСервре()

    // Этап 2. Преобразование основного реквизита формы в прикладной объект
    ДокументОбъект = РеквизитФормыВЗначение("Объект");
    // Этап 3. Вызов процедуры модуля объекта
    ДокументОбъект.ПрименитьСкидку(5);
    // Этап 4. Обратное преобразование прикладного объекта в реквизит формы
    ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");

КонецПроцедуры

 

Смотри также:

Программная работа с массивом
Программная работа со справочниками
Как получить реквизит от ссылочного значения на клиенте

Добавить комментарий

Ваш e-mail не будет опубликован.