<< Click to Display Table of Contents >> Navigation: Проект > Документы объектов > Генератор отчетов > Примеры построения отчетов > Различные способы обработки данных > Пример первый. Обработка атрибута времени. > Способ второй – использование двух проходов |
Нам необходимо при построении отчета определить метку времени максимального (минимального) значения и отметить их цветом. Но как узнать что значение максимальное (минимальное), если отчет еще до конца не построен? В этом случае, можно использовать метод двух проходов.
В свойствах отчета, можно включить два прохода отчета – то есть отчет будет сгенерирован дважды. В этом случае, в первом проходе мы сможем определить максимальное и минимальное значение, а уже на втором проходе определить их метку времени и выделить цветом нужные ячейки. Вернемся к исходному отчету (до добавления второго источника) и рассмотрим данный способ подробно
Добавим в раздел переменных 4 переменные. 2 переменных типа Double с Null – "Максимум" и "Минимум".
И две переменных типа DateTime с Null. Установим у них галочку Не назначено. В этом случае переменная в начале построения отчета будет иметь "Null" – то есть пустое значение.
Теперь в словаре у нас созданы 4 переменных, с которыми мы можем работать через события бэндов.
Сначала, выделим ячейку с рассчитанным итогом максимума, и на закладке Выражение скопируем код в буфер, а затем код из выражения удалим.
Выделим бэнд Итог данных и перейдем на закладку События.
Создадим код в событии Перед печатью - в нем мы определим значения максимума и минимума и присвоим это значение одноименным переменным. Напишем код (код для вычисления максимума вставим из буфера):
Максимум=MaxD(DataДанные,Данные.Значение_максимум);
Минимум=MinD(DataДанные,Данные.Значение_минимум);
Данный код вычислит максимальное и минимальное значение и присвоит переменным "Максимум" и "Минимум".
Теперь в конце построения отчета, нам известны максимальное и минимальное значение. Теперь включим второй проход у отчета. Щелкнем мышью в свободной части редактора отчетов и перейдем на закладку Свойства. Установим настройку Количество проходов – "Два прохода".
Теперь после первого прохода, отчет начнет строиться заново, но переменные сохранят свое значение. Теперь мы сможем манипулировать ими при построении.
Выделим бэнд "Данные" и перейдем на закладку событий. В событии Перед печатью, напишем следующий код:
if (Время_максимума==null && Максимум==Данные.Значение_максимум)
{
Время_максимума=Данные.Время_максимум;
}
if (Время_минимума==null && Минимум==Данные.Значение_минимум)
{
Время_минимума=Данные.Время_минимум;
}
Вначале, код проверяет, есть ли значение у переменной "Время_максимума", если значения нет, то проверяется, равно ли сохраненное максимальное значение выводимому максимальному значению. Если оно равно, значит, мы нашли строку с максимальным значением, и его метку времени можно сохранить. Аналогично делается и для минимального значения.
Теперь значения переменных "Максимум", "Минимум", "Время_максимума", "Время_минимума" можно вывести в бэнд итога.
Запустим построение отчета
Сформированный отчет аналогичен первому.
Выделение ячеек цветом осуществляется, как и в предыдущем отчете.
Второй способ несколько сложнее в реализации, из-за необходимости писать код, но он более гибкий и функциональный. Какой из способов использовать остается на усмотрение пользователя.
Примечание. Метод двух проходов также можно использовать и в других случаях – когда нужное значение будет известно только в конце построения отчета.
Примечание. Готовый отчет можно посмотреть в проекте "Обработка в отчетах" в объекте "Максимум и минимум" - "Отчет второй способ".