Вертикальные бэнды: не все так гладко

ovaova
отредактировано 02:35 Раздел: FastReport 4.0
Итак, возникла необходимость перевести один из отчетов из горизонтальной табличной формы в вертикальную. Каждую строку такого отчета теперь требуется печатать в виде отдельного листа, названия колонок разместив в левой стороне листа, информационную часть (переменное количество колонок) разместить правее, последней правой колонкой идет итог по колонкам.
Предваряет это все шапка отчета, завершает подвал отчета с разными подписями, как полагается.
Т.е. Было так:
Наименование|Категория | 1.1 | 1.2 | 1.3 | 1.4 |
Предприятие1 |кат.1 | 1.01 | 1.02 | 1.03 | 1.04 |
Предприятие1 |кат.2 | 2.01 | 2.02 | 2.03 | 2.04 |
всего по | 3.02 | 3.04 | 3.06 | 3.08 |
Предприятие3 |кат.1 |
Предприятие4 |кат.1 | и т.п.
Предприятие4 |кат.2 | и т.п.
всего по |
и т.д.
ИТОГО |
Надо теперь так (на примере первой строки, остальные строки по аналогии)
Отчет "разворачивается" на 90 градусов против часовой стрелки и названия колонок становятся названиями строк.
А строки превращаются в колонки.
Т.е. отчет с произвольным количеством строк и фиксированным количеством колонок превращается в отчет с произволиным количеством колонок и фиксированным количеством строк

Отчет по предприятию
Предприятие1
_____________________________________________________________
Графы/Категории кат.1 кат.2 ВСЕГО
_____________________________________________________________
Графа 1.1 1.01 2.01 3.02
Графа 1.2 1.02 2.02 3.04
Графа 1.3 1.03 2.03 3.06
Графа 1.4 1.04 2.04 3.08
_____________________________________________________________
Дополнительные расчеты: Данные1 Данные2
Руководитель (подпись) ФИО
_____________________________________________________________

Мысли мои потекли вот в каком русле:
-- кладем вертикальный и горизонтальный MasterData
-- вертикальный MasterData привязываем к основному Dataset'у
-- горизонтальный MasterData не привязываем к Dataset'у, устанавливаем RowCount=1 и делаем его в высоту почти во всю страницу, чтоб все строки поместились (их будет фиксированное количество)
-- кладем левее вертикального MasterData вертикальный GroupHeader и привязываем его к необходимому полю базы для группировки.
-- кладем правее вертикального MasterData вертикальный GroupFooter
--кладем над горизонтальным MasterData горизонтальный заголовок данных Header
--на пересечении вертикального MasterData и горизонтального заголовка данных Header кладем Memo-поля для заголовков колонок
--на пересечении вертикального GroupFooter с горизонтальным MasterData кладем текстовые Memo с названиями строк (то, что в горизонтальном отчете было названиями колонок и было ВЫШЕ цифр, теперь будет СЛЕВА от цифр)
--на пересечении двух MasterData кладем Memo с полями из базы - информационная часть отчета
--на пересечении горизонтального MasterData и вертикального GroupFooter кладем Memo с функциями SUM соответствующих полей
Запускаем отчет, наслаждаемся результатом. Вчерне все работает. Суммы выводятся, итоги подсчитываются.
Начинаем пытаться "приукрасить" отчет, т.е. сделать заголовок страницы, добавив горизонтальный бэнд PageHeader, а каждую группу отчета обязательно вывести на отдельной странице (ожидая, что это получится, назначив StartNewPage вертикальному GroupHeader'у.
И тут начинаются чудеса:
--Не получается печатать горизонтальный бэнд заголовка страницы. Почему-то он выводится только на первой странице отчета, хотя Page# на PageFooter рапортует о множестве страниц, и сам PageFooter печатается на каждой странице. Хотели мы туда вывести название группы данных (поле базы, по которому группируется отчет - строки Отчет по предприятию Предприятие1 в примере)
--Не получается печатать группу с новой страницы, выставляя StartNewPage=true у вертикального GroupFooter, нет на нее никакой реакции, на эту настройку.
Итак, вопросы:
1) Что я сделал не так? Кто работал с вертикальными бэндами в такой комбинации вертикальных и горизонтальных бэндов, подскажите.
2) Не нашел штатной документации по вертикальным бэндам. Только пара статей в интернете на сторонних ресурсах.

Комментарии

  • отредактировано 02:35
    PageHeader не работает с вертикальными бэндами, используйте Header с ReprintOnNewPage.
    Для вертикальных бэндов StartNewPage не работает(как и некоторые другие св-ва), такое в FR сделать не получится даже через скрипт.
    Сам механизм вывода вертикальных бендов этого не позволяет.
  • ovaova
    отредактировано 02:35
    Да в связке с горизонтальными бэндами ничего толком и не работает! Выходит, что более чем для бухгалтерских "шахматок" их и не приспособишь ни к чему. Никак иначе, чем в табличной форме с помощью GroupHeader-GroupFooter информацию об итогах и не отобразить! А если я просто итоговую табличку хочу нарисовать НИЖЕ данных, которые отрисовываются вертикальными бэндами? В ReportSummary, например?!!
    Я уж позволю себе из тикетов выдержки продублировать тут, т.к. информации по вертикальным бэндам практически никакой. Пусть всем польза, быть может, будет.
    1) Не получается использовать вертикальные бэнды в связке с горизонтальными бэндами итога отчета и подвала страницы. Данные на этих бэндах не отображаются, если memo-поля попадают целиком на пересечение например ReportSummary и вертикального бэнда. Можно добиться правильной отрисовки, если вертикальные бэнды класть не пиксель в пиксель друг за другом, а оставлять между ними промежутки, и Memo-поля класть на ReportSummary так, чтобы верхний левый угол был НЕ НА ПЕРЕСЕЧЕНИИ с вертикальными бэндами. Но даже в этом случае смещение (радостно-то как!) отобразившихся таки в результирующем отчете memo-полей является непредсказуемым моментом.
    2) И что-то совсем мне не понравилось поведение функции SUM на ReportSummary: удваивает результат в случае с одной записью данных. Такое же memo-поле, будучи расположенным на PageFooter, показывает правильную сумму.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.