Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > FastReport. Печать PageFooter после MasterData


Автор: huminclouds 2.7.2010, 16:17
Как в FastReport 4.9 осуществить корректный вывод PageFooter непосредственно после MasterData?
Пробовал так:
Код

var
  Y: extended;
procedure MasterData1OnAfterPrint(Sender: TfrxComponent);
begin
  Y:=Engine.CurY;
end;

procedure PageFooter1OnBeforePrint(Sender: TfrxComponent);
begin
  Engine.CurY:=Y;
end;


При переносе нескольких строк данных на новую страницу все отображается корректно:
http://radikal.ru/F/s52.radikal.ru/i137/1007/8d/d2981b1ad4bb.jpg.html

Далее... В отчете присутсвуют бэнды: ReportTitle, Header, MasterData, Footer и PageFooter. MasterData.KeepFooter := True, т.е. если Footer переносится на новую страницу, то последняя строка данных, в любом случае, переходит вместе с ним, и вот когда такое происходит, то получается некрасиво
http://radikal.ru/F/s45.radikal.ru/i109/1007/44/2dc2a3ec0ff6.jpg.html

Автор: pseud 6.7.2010, 11:25
а я бы заюзал GroupFooter
написана фигня. читать следующий пост.

Автор: huminclouds 6.7.2010, 15:10
pseud, обоснуй, пожалуйста.

Автор: pseud 7.7.2010, 11:08
Цитата(huminclouds @  2.7.2010,  16:17 Найти цитируемый пост)
В отчете присутсвуют бэнды: ReportTitle, Header, MasterData, Footer и PageFooter.

Header и Footer - это кто? и зачем.

Цитата(huminclouds @  6.7.2010,  15:10 Найти цитируемый пост)
pseud, обоснуй, пожалуйста. 

Сходу фигню я написал. Прошу прощения.

Короче мне кажется, что не нужен тебе PageFooter и все пляски с ним.
Похоже с твоей задачей справится ColumnFooter. Он и отображается всегда непосредственно после последнего MasterData на странице.
Проверял на FastReport 4.6

Добавлено @ 11:13
http://ipicture.ru/Gallery/Viewfull/577670.html

http://ipicture.ru/Gallery/Viewfull/577673.html

Автор: huminclouds 7.7.2010, 15:46
Опробовал. Необходимость в скрипте отпала. Но проблема осталась. Все корректно работает, только если выставить MasterData.KeepFooter := False. Но мне необходимо, чтобы если все бэнды не помещаются на странице, то последняя строка MasterData переносилась бы на следующую страницу.

Автор: huminclouds 8.7.2010, 09:19
Проблема решена скриптом
Код

procedure MasterDataOnBeforePrint(Sender: TfrxComponent);
begin
  if (MasterData.Dataset.RecNo + 1 = MasterData.Dataset.RecordCount) 
  and (Engine.FreeSpace < (MasterData.Height + ColumnFooter.Height + ReportSummary.Height)) then
    Engine.NewPage;                                                                           
end;

Используемые бэнды: ReportTitle, ColumnHeader, MasterData, ColumnFooter и ReportSummary.

Автор: huminclouds 8.7.2010, 09:36
pseud, спасибо за участие и поддержку smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)