Способ второй – использование двух проходов

<< Click to Display Table of Contents >>

Navigation:  Проект > Документы объектов > Генератор отчетов > Примеры построения отчетов > Различные способы обработки данных > Пример первый. Обработка атрибута времени. >

Способ второй – использование двух проходов

Нам необходимо при построении отчета определить метку времени максимального (минимального) значения и отметить их цветом. Но как узнать что значение максимальное (минимальное), если отчет еще до конца не построен? В этом случае, можно использовать метод двух проходов.

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

ReportManualPart2_img32

Добавим в раздел переменных 4 переменные. 2 переменных типа Double с Null"Максимум" и "Минимум".

ReportManualPart2_img33ReportManualPart2_img34

И две переменных типа DateTime с Null. Установим у них галочку Не назначено. В этом случае переменная в начале построения отчета будет иметь "Null" – то есть пустое значение.

ReportManualPart2_img35ReportManualPart2_img36

Теперь в словаре у нас созданы 4 переменных, с которыми мы можем работать через события бэндов.

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

ReportManualPart2_img37

Выделим бэнд Итог данных и перейдем на закладку События.

ReportManualPart2_img38

Создадим код в событии Перед печатью - в нем мы определим значения максимума и минимума и присвоим это значение одноименным переменным. Напишем код (код для вычисления максимума вставим из буфера):

Максимум=MaxD(DataДанные,Данные.Значение_максимум);

Минимум=MinD(DataДанные,Данные.Значение_минимум);

Данный код вычислит максимальное и минимальное значение и присвоит переменным "Максимум" и "Минимум".

Теперь в конце построения отчета, нам известны максимальное и минимальное значение. Теперь включим второй проход у отчета. Щелкнем мышью в свободной части редактора отчетов и перейдем на закладку Свойства. Установим настройку Количество проходов"Два прохода".

ReportManualPart2_img39

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

Выделим бэнд "Данные" и перейдем на закладку событий. В событии Перед печатью, напишем следующий код:

if (Время_максимума==null && Максимум==Данные.Значение_максимум)

{

 Время_максимума=Данные.Время_максимум;

}

if (Время_минимума==null && Минимум==Данные.Значение_минимум)

{

 Время_минимума=Данные.Время_минимум;

}

Вначале, код проверяет, есть ли значение у переменной "Время_максимума", если значения нет, то проверяется, равно ли сохраненное максимальное значение выводимому максимальному значению. Если оно равно, значит, мы нашли строку с максимальным значением, и его метку времени можно сохранить. Аналогично делается и для минимального значения.

ReportManualPart2_img40

Теперь значения переменных "Максимум", "Минимум", "Время_максимума", "Время_минимума" можно вывести в бэнд итога.

ReportManualPart2_img41

Запустим построение отчета

ReportManualPart2_img42

Сформированный отчет аналогичен первому.

Выделение ячеек цветом осуществляется, как и в предыдущем отчете.

Второй способ несколько сложнее в реализации, из-за необходимости писать код, но он более гибкий и функциональный. Какой из способов использовать остается на усмотрение пользователя.

Примечание. Метод двух проходов также можно использовать и в других случаях – когда нужное значение будет известно только в конце построения отчета.

Примечание. Готовый отчет можно посмотреть в проекте "Обработка в отчетах" в объекте "Максимум и минимум" - "Отчет второй способ".