Groupheader и двусторонняя печать двух страниц

отредактировано June 2015 Раздел: FastReport 3.0
*просьба к админам - перенесите тему в раздел FastReport 4.0, пожалуйста.*

Не смог найти по поиску решение поставленной задачи.
Буду очень рад ответу или ссылке. Задача вроде бы типовая, но увы...

Задача:
Есть таблица данных из, скажем, 21ой строки.
Нужно напечатать отчёт по этим данным состоящий из лицевой страницы(табличка с этими данными) и задней страницы(нечто типа памятки).
Но с условием, что один лист должен содержать не более 7 строк данных.
Т.е. из 21 строки данных мы должны получить три таких листа.

Моя реализация:
Добавил Page1, на которой разместил groupheader, masterdata, groupfooter. В masterdata есть колонка PrintGroupID с номером, который увеличивается на единицу через каждые семь строк, на неё и завязался в groupheader.
Добавил Page2, на которой разметил groupheader(также завязанный на PrintGroupID) и невидимый masterdata(ибо без него groupheader не работает, как понимаю).
В итоге у меня печатается три лицевых страницы(Page1), и только потом три задних страницы(Page2).
Как сделать так, что бы эти страницы шли через одну?


Примечание:
Нашёл где-то решение, через программную пересортировку страниц превью отчёта после его формирования. Код примера привёл ниже.
Или, опять же программно, формировать отчёт по листам, передавая в него не сразу все данные, а урывками по семь строк.
Но может есть более элегантное решение?
// код на Delphi: программная пересортировка страниц превью отчёта после его формирования
var i, j: integer; 
page : TfrxReportPage; 
begin 
frxReport1.PrepareReport(); 
j := frxReport1.PreviewPages.Count div 2; 
page := TfrxReportPage.Create(nil); 
for i := 0 to j - 2 do 
begin 
page.AssignAll(frxReport1.PreviewPages.Page[j + i]); 
frxReport1.PreviewPages.AddEmptyPage(i * 2 + 1); 
frxReport1.PreviewPages.ModifyPage(i * 2 + 1, page); 
frxReport1.PreviewPages.DeletePage(j + i + 1); 
end; 
page.Free; 
frxReport1.ShowPreparedReport; 
end;

Комментарии

  • Stalker4Stalker4 123
    отредактировано 19:49
    Karp131 написал: »
    Не смог найти по поиску решение поставленной задачи.
    Буду очень рад ответу или ссылке. Задача вроде бы типовая, но увы...
    Я бы не сказал, что это типовая задача ...

    А по делу - рекомендую почитать документацию по поводу обработчика событий страницы OnManualBuild.

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

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