MasterData.AfterPrint и PageFooter.AfterPrint

отредактировано 06:46 Раздел: FastReport 3.0
Здравствуйте!
Решаю следующую задачу: надо вывести табличку с подсчетом суммы как по каждой странице, так и глобально.
Для печати суммы по странице использую PageFooter, вывожу итог из переменной, которую заполняю на MasterData.onAfterPrint.
Итоговая (общая) сумма печатается на бэнде Footer, который по условию задачи должен печататься неразрывно с MasterData (т.е. MasterData.KeepFooter = true).
Все заполняется и печатается правильно, пока не доходим до последней записи в выборке. Если при этом MasterData умещается на текущей странице, но Footer требует переноса текущей записи на следующую страницу, то сначала отрабатывает MasterData.onAfterPrint и лишь потом - PageFooter.AfterPrint, т.е. сначала отрабатывает AfterPrint объекта на новой странице, а потом на старой.
Что с этим можно поделать и как вообще решаются подобные задачи умными людьми? ;)

FastReport 3.11, Delphi 5

Комментарии

  • gpigpi
    отредактировано 06:46
    А если попробовать MasterData.KeepFooter = False
    procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
    begin
           if (MasterData1.Dataset.Eof) and (Engine.FreeSpace<MasterData1.Height_Footer1.Height) then Engine.NewPage;
    end;
    
  • отредактировано 06:46
    MasterData растягиваемый, а насколько я в курсе - подсчет Height производится позже onBeforePrint. Наверное, можно перенести Ваш код в событие onAfterCalcHeight, но я не уверен что в это время движок не сформировал уже новую страницу.
    И еще - в моем мануале не сказано, в какой момент происходит DataSet.Next.
    Я так подозреваю, что это происходит перед заполнением бэндов данными, так что на нашей последней печатаемой записи EOF еще не будет установлен.
  • gpigpi
    отредактировано 06:46
    написал:
    Наверное, можно перенести Ваш код в событие onAfterCalcHeight, но я не уверен что в это время движок не сформировал уже новую страницу.
    Нужно попробовать
    написал:
    на нашей последней печатаемой записи EOF еще не будет установлен.
    В моих отчётах это работает

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

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