Groupheader и двусторонняя печать двух страниц
*просьба к админам - перенесите тему в раздел FastReport 4.0, пожалуйста.*
Не смог найти по поиску решение поставленной задачи.
Буду очень рад ответу или ссылке. Задача вроде бы типовая, но увы...
Задача:
Есть таблица данных из, скажем, 21ой строки.
Нужно напечатать отчёт по этим данным состоящий из лицевой страницы(табличка с этими данными) и задней страницы(нечто типа памятки).
Но с условием, что один лист должен содержать не более 7 строк данных.
Т.е. из 21 строки данных мы должны получить три таких листа.
Моя реализация:
Добавил Page1, на которой разместил groupheader, masterdata, groupfooter. В masterdata есть колонка PrintGroupID с номером, который увеличивается на единицу через каждые семь строк, на неё и завязался в groupheader.
Добавил Page2, на которой разметил groupheader(также завязанный на PrintGroupID) и невидимый masterdata(ибо без него groupheader не работает, как понимаю).
В итоге у меня печатается три лицевых страницы(Page1), и только потом три задних страницы(Page2).
Как сделать так, что бы эти страницы шли через одну?
Примечание:
Нашёл где-то решение, через программную пересортировку страниц превью отчёта после его формирования. Код примера привёл ниже.
Или, опять же программно, формировать отчёт по листам, передавая в него не сразу все данные, а урывками по семь строк.
Но может есть более элегантное решение?
Не смог найти по поиску решение поставленной задачи.
Буду очень рад ответу или ссылке. Задача вроде бы типовая, но увы...
Задача:
Есть таблица данных из, скажем, 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;
Комментарии
А по делу - рекомендую почитать документацию по поводу обработчика событий страницы OnManualBuild.