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

Второй вариант решения

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

Поэтому в данном решении мы сразу «уйдем» на сервер вместе с контекстом формы и там все пересчитаем. И затем вернемся на клиент.

Для этого изменим обработчик команды ПересчетЦен документа РасходнаяНакладная следующим образом (листинг 4.18).

Листинг 4.18. Обработчик команды «ПересчетЦен»

&НаКлиенте

Процедура ПересчетЦен(Команда)

 

ПересчетЦенНаСервере();

 

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

В этом обработчике мы вызываем серверную контекстную процедуру ПересчетЦенНаСервере(). Поместим ее в модуле формы (листинг 4.19).

Листинг 4.19. Процедура «ПересчетЦенНаСервере()»

&НаСервере

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

 

Для Каждого ТекСтрокаТовары Из Объект.Товары Цикл

ТекСтрокаТовары.Цена = ТекСтрокаТовары.Цена * 1.1;

ТекСтрокаТовары.Сумма = ТекСтрокаТовары.Количество * ТекСтрокаТовары.Цена;

 

КонецЦикла;

 

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

ПРИМЕЧАНИЕ

Этот пример можно посмотреть в демонстрационной конфигурации «04 (вар. 2) Использование контекстных серверных процедур для пересчета данных коллекций форм».

Запустим «1С:Предприятие», откроем документ РасходнаяНакладная № 2 (он содержит 1000 позиций товаров) и нажмем кнопку Пересчет цен. После этого цены и суммы товаров пересчитаются по заданному нами алгоритму.

Посмотрим на схему программного взаимодействия клиента и сервера в этом случае (рис. 4.35).

Рис. 4.35. Схема программного взаимодействия сервера и клиента

Функциональность прикладного решения будет такой же, как и в первом случае, но производительность будет выше, хотя мы и выполнили контекстный серверный вызов.

Посмотрим теперь на показатели производительности при нажатии кнопки Пересчет цен (рис. 4.36).

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

Для наглядности рассмотрим схему передачи данных между клиентом и сервером (первый вариант решения для сравнения приведен слева) – рис. 4.37.

Рис. 4.37. Схема передачи данных между клиентом и сервером

Рассмотрим подробнее, сколько вызовов сервера при этом произойдет и каков будет объем передаваемых между клиентом и сервером данных. Мы специально рассматриваем пример документа с большой табличной частью, так как на нем лучше сравнивать показатели производительности.

Таблица 4.2. Показатели производительности

Текущие вызовы Отправлено Принято
Пересчет табличной части на сервере и возврат на клиент 1 1711 205006

При пересчете табличной части на сервере объем принятых данных отражает ситуацию, когда все 1000 измененных строк табличной части «приезжают» на клиент.

Таким образом, во втором варианте передается 205 006 байтов информации против 367 365 байтов в первом. Заметим, что мы здесь сравниваем только объем передаваемых данных, инициируемый разработчиком.

Назад: Первый вариант решения
Дальше: Резюме