<< Click to Display Table of Contents >> Navigation: Проект > Документы объектов > Генератор отчетов > Примеры построения отчетов > Отчет с колонками > Создание многостраничных отчетов > Третий вариант |
Расположить бэнд данных в контейнере – в панели. Этим можно решить несколько проблем:
1) Создать в отдельной панели колонку с подписями для строк. Это облегчит их настройку и сделает вывод этой колонки на каждой странице
2) Можно задать размер контейнера таким, чтобы в него поместились ровно 24 строки данных, и следующие строки уже будут создаваться на новой странице.
Рассмотрим подробнее использование панелей для создания отчетов с колонками.
Создадим еще один отчет, аналогичный по функционалу уже созданному, но с более широкими полями и состоящий из двух страниц. На первой странице будет располагаться данные за интервал с 1 по 16 число, а на второй с 16 и до конца месяца.
Чтобы упростить создание отчета – не создавать заново источники данных и переменные, мы скопируем уже созданный отчет. Для этого, в MasterSCADA на закладке Отчеты, нажмем на кнопку Экспортировать, выберем папку для экспорта и дадим новое имя отчету.
После этого импортируем отчет, нажав на кнопку Импорт. Копия отчета добавилась. Восстановим связи с источником данных – для этого перетащим переменную источника в поле таблицы "Связь".
Примечание. Используя механизм экспорта-импорта и последующего восстановления связей можно переносить отчеты в другие проекты. Также можно защитить проекты от изменения, установив соответствующую галочку при экспорте.
Откроем редактирование отчета. Удалим бэнд "Итог отчета", и выделим все бэнды кроме бэнда "Заголовок отчета", для этого, отметим каждый из них мышью, удерживая клавишу Ctrl. Используя контекстное меню, вырежем все бэнды в буфер обмена.
Теперь добавим на страницу два компонента "Панель".
Одну панель сделаем узкой и расположим ее слева, а вторую, широкую – справа.
Теперь вставим из буфера вырезанные бэнды, на панель "Panel2".
В левой панели – "Panel1" – мы разместим столбец подписей. Для этого мы воспользуемся бэндом "Данные".
Вытащим источник данных "Расход" и положим его в панель "Panel1". Отметим вставку заголовка данных и итога данных, а также отметим добавление любого из полей, например "Время".
Подкорректируем текст в поле на бэнде "Данные" - сделаем, чтобы в поле выводилось не время, а системная переменная Line.
Включим у бэнда "Данные" условное выделение – будем скрывать бэнд если Line больше 48 (2 страницы по 24 колонки).
Теперь перенесем подписи строк из панели "Panel2" в "Panel1". Операции условного выделения у них можно удалить.
Теперь в панели "Panel2", в бэнде "Данные" зададим меньшее количество столбцов – 16, ширину столбца сделаем 1,6.
Подкорректируем на бэнде текстовые поля – переместим их влево и сделаем шире (по ширине колонки).
Запустим построение отчета.
Построилось две страницы. Возникло несколько проблем.
На первой странице, у нас вывелось 27 строчек данных, а на второй странице данных не хватило. Это связано с тем, что сейчас панели занимают у нас все свободное место страницы, поэтому после построения всех 15 колонок на странице, колонки начинают строиться на этой же панели. Нам нужно уменьшить размер панели, чтобы на нее вывелось ровно 24 строки.
Перейдем снова в режим разработки, и, используя маркеры, уменьшим размер панелей.
Вторая проблема – на первой странице не вывелся итог. Это связано с тем, что сейчас бэнды "Итог данных" на панели "Panel1" и "Итог колонки" на панели "Panel2" выводятся в конце отчета. Чтобы они выводились на каждой странице, включим у обоих бэндов свойство "Печатать на всех страницах".
Запустим построение отчета
На каждой странице теперь содержится по 24 строки данных, поля итогов также выводиться, но на первой странице поля пустые.
Чтобы эти поля заполнились, включим у полей для вывода суммы и максимума настройку "Обработать в" в "В конце отчета".
В этом случае выражение данного поля будет обработано в конце построения отчета – то есть когда у нас будут заполнены переменные-списки.
Кроме того, как можно заметить на рисунках, на обеих страницах выводится одинаковые номера колонок - на первой странице с 1 по 16 и на второй со 1 по 16. То есть переменная Column возвращает номер колонки на текущей странице. Нам же необходимо чтобы на второй странице номера выводились с 17 и до конца месяца.
Мы можем при помощи тернарного оператора проверить номер страницы, и если номер равен 1, то прибавить к переменной Column 16, тогда номера будут верными. Напишем код в редакторе текста поля заголовка колонки:
{PageNumber==0 ? Column : Column+16}
Запустим построение отчета:
На обеих страницах у нас вывелись номера колонок начиная с номера 17, то есть как будто бэнды заголовков колонки находятся на второй странице. В чем же дело?
Дело в том, что переменная PageNumber возвращает номер строящейся страницы. Но у нас в левой части страницы находится панель "Panel1" с размещенной на ней бэндом, который строится первым и создает две страницы, поэтому переменная PageNumber возвращает номер второй страницы. Чтобы посмотреть порядок выполнения бэндов, нужно нажать на кнопку "Показывать порядок".
Посмотрим текущий порядок построения бэндов:
Итак, первыми у нас начинаются строиться бэнды с панели "Panel1". Если мы сделаем, чтобы первой построилась панель "Panel2", то тогда переменная PageNumber на бэндах с этой панели будет определяться корректно. Для изменения порядка выполнения, нужно переместить панель уровнем ниже. Для этого нужно вызвать контекстное меню панели и переместить ее на задний план:
Теперь бэнды с этой панели будут выводиться первыми:
Снова запустим построение отчета:
Теперь номера колонок построились правильно.
Также нужно исправить код в подведении итога. В поле для вычисления суммы напишем:
{Sum[(PageNumber==1 ? Column:Column+16)-1]}
В поле для вычисления максимума напишем:
{Max[(PageNumber==1 ? Column:Column+16)-1]}
Также нужно задать условие скрытия полей заголовка и итога – в инструменте условное выделение. Скрывать поля нужно только на второй странице – на первой странице будут выводиться все колонки. Код можно написать такой:
PageNumber==2 && Column>Кол_во_дней-16
Исправим также вывод номера часа суток – сейчас на второй странице у нас выводятся номера с 25 по 48. Пропишем другой код в поле:
{Line<=24 ? Line : Line-24}
Запустим построение отчета
Теперь отсчет построился согласно нашему заданию. Отчет при необходимости можно дополнительно оформить – добавить бэнд "Заголовок данных" и разместить на нем подпись таблицы, добавить бэнд "Итог данных" для вычисления суммарного расхода энергии или для подписи оператора и т.д.
Примечание. Готовый отчет можно посмотреть в проекте "Отчет с колонками" в объекте "Профиль мощности" - "Многостраничный отчет"