<< Click to Display Table of Contents >> Navigation: Проект > Документы объектов > Генератор отчетов > Примеры построения отчетов > Непрерывно-периодический отчет > Подсчет итогов. Использование Master-Detail списков |
Нам по заданию также требуется найти максимальное и минимальное значение на каждом цикле. Ранее мы уже проводили вычисление итогов – для этого в MasterReport есть специальные функции. Однако для того чтобы подвести итог данных, эти данные нужно сначала построить – вывести в бэнд. Кроме того, необходимо чтобы итог считался (и выводился) независимо для каждого цикла.
Решить указанные проблемы поможет использование инструмента Master-Detail. В отчетах с использованием данной функции одному выводимому значению из Master источника данных, соответствует какое-то количество значений (от нуля и более) из Detail источника данных, то есть несколько строк из Detail как бы вложены в строку данных Master. Примером такого отчета в жизни является, например, телефонный справочник, где Master-строка – это буква алфавита, а Detail строки – список абонентов с фамилией на данную букву.
Наш отчет будет строиться следующим образом. Сначала будет выведена Master строка – параметры цикла, затем будут выведены строки данных Detail источника – значения температуры. После вывода строк Detail источника мы сможем подвести итог – найти максимум и минимум. Рассмотрим подробно такую реализацию.
Сначала перетащим на страницу источник данных "Значения_температуры". Отметим вывод всех колонок, и бэнда Итог данных.
Бэнды добавились в низ страницы
Теперь сделаем чтобы бэнд "DataЗначения_температуры" был Detail источником, бэнда "DataПараметры_цикла" (он, соответственно, будет Master). Для этого вызовем контекстное меню бэнда "DataЗначения_температуры", и выберем пункт Редактировать.
Перейдем на закладку Мастер компонент и привяжем наш бэнд к бэнду "DataПараметры_цикла". Нажмем Ок. Теперь мы сделали Master-Detail список.
Запустим построение отчета.
Теперь у каждого цикла, после графика идет набор строк со значениями температуры.
Однако в нашем задании не нужно создавать строки со значениями температуры – достаточно только графика. То есть необходимо, чтобы бэнд с данными был построен, но значения не были видны в отчете. Для этого нужно задать у бэнда нулевую высоту.
Удалим с бэнда данных "DataЗначения_температуры" текстовые поля, а затем при помощи маркера уменьшим размер бэнда до нуля – чтобы от бэнда остался только заголовок.
Теперь бэнд будет вычислен, но строки в отчет выводиться не будут.
Теперь можно производить вычисление итогов. Добавим на бэнд 4 поля. На два из них поместим подписи. Также увеличим высоту бэнда – для лучше визуального отделения каждого цикла.
В оставшихся двух разместим поля с вычисленным итогом. Вызовем окна редактора текста. Укажем функцию вычисления максимума, по бэнду "DataЗначения_температуры".
Но при таких настройках будет вычислен максимум за весь диапазон отчета, а не за диапазон конкретного цикла. Чтобы ограничить вычисление нужным нам циклом, воспользуемся полем Условие.
Установим галочку у данного поля, и введем в него такой же код, какой мы указывали при фильтрации графика:
Значения_температуры.Время>Параметры_цикла.Начало_цикла &&
Значения_температуры.Время<Параметры_цикла.Конец_цикла
Теперь условие будет вычисляться в нужном нам диапазоне. Аналогичным образом сделаем для вычисления поля Минимум.
Запустим построение отчета.
Теперь для каждого цикла вычислены итоги.
В конце отчета нам нужно подвести итог – количество выполненных циклов. Для решения этой задачи воспользуемся подведением итога в бэнде "FooterПараметры_цикла".
Добавим на бэнд два текстовых поля, установим у них границу, в одно добавим подпись "Количество циклов:".
Во второе поле добавим итог. Для вычисления количества выполненных циклов, нужно просто подсчитать количество построенных бэндов "DataПараметры_цикла".
Воспользуемся для этого функцией Count.
Запустим построение отчета.
Отчет необходимой формы построен.
Примечание. Готовый отчет можно посмотреть в проекте "Master-Detail отчет" в объекте "Непрерывно-периодический".