Запись результата операции над элементами блока в другой блок
При использовании блоков в процессных задачах бывает необходимо значения переменных из одного блока записать в виде значений переменных другого блока. Рассмотрим запись суммы значений столбца одного блока в другой блок.
Пусть у нас есть два блока:
-
Блок Объем продаж. Блок содержит в себе информацию об объеме продаж (шт.) продукта компании за каждый квартал.
Свойства блока:
Наименование – товар, тип Строка;
1 квартал – значение объема продаж по данному продукту в 1-м квартале, тип Целое число;
2 квартал – значение объема продаж по данному продукту в 2-м квартале, тип Целое число;
3 квартал – значение объема продаж по данному продукту в 3-м квартале, тип Целое число;
4 квартал – значение объема продаж по данному продукту в 4-м квартале, тип Целое число. -
Блок Всего. Блок содержит информацию об объеме продаж за каждый квартал по всем продуктам вместе. Блок и его свойства доступны только для чтения.
Свойства блока:
Sum – продукт, тип Строка;
1 квартал – значение объема продаж по всем продуктам в 1-м квартале, тип Целое число;
2 квартал – значение объема продаж по всем продуктам в 2-м квартале, тип Целое число;
3 квартал – значение объема продаж по всем продуктам в 3-м квартале, тип Целое число;
4 квартал – значение объема продаж по всем продуктам в 4-м квартале, тип Целое число.
Напишем сценарий, который при заполнении значений первого блока будет автоматически заполнять значения второго блока. Для этого будем использовать стандартный сценарий при изменении, привязанный к переменной блока Объем продаж. Такой сценарий будет выполняться при добавлении нового элемента или сохранении изменений в уже существующем элементе блока. То есть при каждом изменении блока Объем продаж полностью пересчитываются значения блока Всего.
Для использования сценариев должно быть подключено пространство имен:
using EleWise.ELMA.Model.Services;
Первоначально при открытии задачи блок Всего не будет иметь ни одной строки, поэтому необходимо добавить строку, которая будет содержать в себе значения сумм:
public virtual void LoadForm (Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
{
var newRow = InterfaceActivator.Create<P_RabotaSBlokamiVScenarii_Total> (); //создаем строку блока Total
newRow.Quarter1 = 0; // ячейкам присваиваем значение «0»
newRow.Quarter2 = 0;
newRow.Quarter3 = 0;
newRow.Quarter4 = 0;
newRow.Name = "Сумма";//присваиваем первой ячейке значение «Сумма»
context.Total.Add (newRow); // добавляем созданную строку в блок Total
}
Теперь суммируем значения по первому блоку Объем продаж и записываем результат во второй блок Всего. Для передачи значения используем дополнительные переменные:
Sum_Q1 – значение объема продаж по всем продуктам в 1-м квартале, тип Целое число;
Sum_Q2 – значение объема продаж по всем продуктам в 2-м квартале, тип Целое число;
Sum_Q3 – значение объема продаж по всем продуктам в 3-м квартале, тип Целое число;
Sum_Q4 – значение объема продаж по всем продуктам в 4-м квартале, тип Целое число.
public virtual void SumBlock (Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
{
int Sum_Q1 = 0; // переменным присваиваем значение «0»
int Sum_Q2 = 0;
int Sum_Q3 = 0;
int Sum_Q4 = 0;
foreach (var item in context.VolumeSales)
{
if(item.Quarter1 == null) // проверяем, заполнено ли значение ячейки, если нет, присваиваем значение «0»
item.Quarter1 = 0;
if(item.Quarter2 == null)
item.Quarter2 = 0;
if(item.Quarter3 == null)
item.Quarter3 = 0;
if(item.Quarter4 == null)
item.Quarter4 = 0;
Sum_Q1 += (Int32)item.Quarter1; //в контекстную переменную добавляем значение ячейки блока VolumeSales
Sum_Q2 += (Int32)item.Quarter2;
Sum_Q3 += (Int32)item.Quarter3;
Sum_Q4 += (Int32)item.Quarter4;
}
foreach (var item in context.Total.ToList())
{
item.Quarter1 = Sum_Q1; //в ячейки блока Total записываем значения переменных
item.Quarter2 = Sum_Q2;
item.Quarter3 = Sum_Q3;
item.Quarter4 = Sum_Q4;
}
}
Тогда при использовании простого процесса, получим следующее отображение в веб-части. При открытии задачи "Список товаров" строка блока Всего уже создана, и ей присвоены первоначальные значения:
После добавления строк в блок Объем продаж значения блока Всего автоматически пересчитываются:
Использование подобной реализации бывает удобно, когда в процессе значения текущих показателей вводятся одним пользователем, а другому пользователю необходимо выводить на форму лишь значение агрегированных показателей.