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

Первый вариант решения

Чтобы реализовать поставленную задачу, создадим форму документа ОказаниеУслуги и обработчик события ПриИзменении для поля формы Скидка (листинг 4.65).

Листинг 4.65. Процедура «СкидкаПриИзменении()»

&НаКлиенте

Процедура СкидкаПриИзменении(Элемент)

 

Если Объект.Скидка Тогда

Элементы.СуммаСкидки.Шрифт = Новый Шрифт(,, Истина);

Элементы.СуммаСкидки.ЦветТекста = WebЦвета.ЗеленаяЛужайка;

 

Объект.СуммаУслуги = Объект.ЦенаУслуги - Объект.СуммаСкидки;

 

Иначе

Элементы.СуммаСкидки.Шрифт = Новый Шрифт();

Элементы.СуммаСкидки.ЦветТекста = WebЦвета.Коралловый;

 

Объект.СуммаСкидки = 0;

Объект.СуммаУслуги = Объект.ЦенаУслуги;

 

КонецЕсли;

 

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

В этом обработчике мы анализируем значение реквизита документа Скидка типа Булево и в зависимости от него устанавливаем цвет и жирность шрифта для поля формы СуммаСкидки. Новый шрифт поля мы создаем конструктором – Новый Шрифт(), при создании которого в третьем параметре указывается жирность.

Кроме того, при изменении флажка Скидка мы производим пересчет суммы услуги в соответствии с заданным алгоритмом.

Теперь обеспечим пересчет суммы услуги при изменении цены услуги и суммы скидки, в зависимости от состояния флажка Скидка.

Создадим обработчик события ПриИзменении для поля формы ЦенаУслуги и заполним его следующим образом (листинг 4.66).

Листинг 4.66. Процедура «ЦенаУслугиПриИзменении()»

&НаКлиенте

Процедура ЦенаУслугиПриИзменении(Элемент)

 

Если Объект.Скидка Тогда

Объект.СуммаУслуги = Объект.ЦенаУслуги - Объект.СуммаСкидки;

 

Иначе

Объект.СуммаУслуги = Объект.ЦенаУслуги;

 

КонецЕсли;

 

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

Затем создадим обработчик события ПриИзменении для поля формы СуммаСкидки и заполним его следующим образом (листинг 4.67).

Листинг 4.67. Процедура «СуммаСкидкиПриИзменении()»

&НаКлиенте

Процедура СуммаСкидкиПриИзменении(Элемент)

 

Если Объект.Скидка Тогда

Объект.СуммаУслуги = Объект.ЦенаУслуги - Объект.СуммаСкидки;

 

КонецЕсли;

 

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

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

Включим для поля формы СуммаУслуги свойство ТолькоПросмотр, так как оно является расчетным.

И в заключение установим оформление поля СуммаСкидки в зависимости от отметки в поле Скидка в обработчике события формы ПриСозданииНаСервере (листинг 4.68).

Листинг 4.68. Обработчик события «ПриСозданииНаСервере»

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

 

Если Объект.Скидка Тогда

Элементы.СуммаСкидки.Шрифт = Новый Шрифт(,, Истина);

Элементы.СуммаСкидки.ЦветТекста = WebЦвета.ЗеленаяЛужайка;

 

Иначе

Элементы.СуммаСкидки.Шрифт = Новый Шрифт();

Элементы.СуммаСкидки.ЦветТекста = WebЦвета.Коралловый;

 

КонецЕсли;

 

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

ПРИМЕЧАНИЕ

Этот пример можно посмотреть в демонстрационной конфигурации «13 (вар. 1) Изменение свойств элементов формы, не требующих обращения к серверу».

Запустим «1С:Предприятие», создадим документ об оказании услуги, выберем услугу, клиента и внесем цену услуги. Первоначально флажок Скидка не установлен, сумма услуги равна цене услуги, а сумма скидки отображается красным цветом текста обычной жирности. Внесем сумму скидки – сумма услуги не изменится. Установим флажок Скидка. После этого поле СуммаСкидки будет отображено жирным шрифтом и зеленым цветом текста, а поле СуммаУслуги автоматически пересчитается по заданному нами алгоритму (рис. 4.77).

При снятии флажка Скидка поле СуммаСкидки обнуляется и отображается красным, а поле СуммаУслуги снова пересчитывается.

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

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

ПРИМЕЧАНИЕ

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

Пересчет поля СуммаУслуги происходит на клиенте и не требует обращения к серверу. Также «безболезненно» произойдет и изменение цвета текста поля СуммаСкидки. А вот при изменении свойства Шрифт на клиенте произойдет нежелательный вызов сервера, так как изменение этого свойства влияет на размер элемента формы. Это приведет к пересчету местоположения элементов формы, которое происходит на сервере.

Для наглядности рассмотрим схему программного взаимодействия клиента и сервера (рис. 4.79).

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

Назад: Изменение оформительских свойств элементов формы, не требующих обращения к серверу
Дальше: Второй вариант решения