Итог по количеству страниц в группе

FokewolfFokewolf Киев
отредактировано 01:54 Раздел: FastReport 4.0
Добрый день. Требуется очет с такой структурой:

PageHeader
GroupHeader
MasterData
GroupFooter

Все великолепно кроме одного "НО": Необходимо сбрасывать нумерацию страниц по группе . Для этого заголовку группы ставлю StartNewPage и ResetPageNumbers. Использую системную переменную Page. Теперь необходимо вывести в подвале группы ВСЕГО СТРАНИЦ . Так как TotalPages работает только в двухпроходном отчете (не хочется из-за этого городить второй проход), хочу вывести ту же переменную Page в подвале группы , предполагая, что это и будет всего страниц по группе. Так оно и есть, кроме одного случая - когда в MasterData строк уже нет, на следующую страницу выводится только заголовок страницы и подвал группы. В заголовке страницы значение Page, допустим , = 2 (вторая страница), а в подвале группы = 1! Оказывается, в такой ситуации BeforePrint подвала группы прилетает раньше , чем BeforePrint заголовка страницы. Почему?

Комментарии

  • отредактировано 01:54
    Потому, что GroupFooter печатается на предыдущей странице и только потом после вычисления полной высоты переносится.
    Для вывода количества страниц правильней будет использовать подвал страницы(т.к. он не растягивается и не переносится).
  • FokewolfFokewolf Киев
    отредактировано 01:54
    написал: »
    Потому, что GroupFooter печатается на предыдущей странице и только потом после вычисления полной высоты переносится.
    Для вывода количества страниц правильней будет использовать подвал страницы(т.к. он не растягивается и не переносится).
    Есть еще какие-либо варианты решения, кроме использования подвала страницы (не подходит в данном конкретном случае), и двойного прохода отчета?
  • FokewolfFokewolf Киев
    отредактировано 01:54
    Fokewolf написал: »
    Есть еще какие-либо варианты решения, кроме использования подвала страницы (не подходит в данном конкретном случае), и двойного прохода отчета?
    Или каким-то образом в приведенном случае есть возможность перетащить одну строчку из бэнда на следующую страницу, вместе с подвалом группы?
  • отредактировано 01:54
    Если у бенда фиксированная высота, т.е. в процессе построения он не растягивается и не разрывается, то можно в OnBeforePrint у GroupFooter проверять наличие свободного места на странице и если места не достаточно - вызывать NewPage.

    Или другой вариант менять позицию у PageFooter в OnBeforePrint и печатать его сразу под GroupFooter.
  • FokewolfFokewolf Киев
    отредактировано 01:54
    написал: »
    Если у бенда фиксированная высота, т.е. в процессе построения он не растягивается и не разрывается, то можно в OnBeforePrint у GroupFooter проверять наличие свободного места на странице и если места не достаточно - вызывать NewPage.

    Или другой вариант менять позицию у PageFooter в OnBeforePrint и печатать его сразу под GroupFooter.
    Попробовал, спасибо, с количеством страниц все стало в порядке, но выскочило очередное "НО" : В Подвале группы использовались агрегатные функции SUM()для подсчета итогов по группе. Итоги стали пустыми.
  • FokewolfFokewolf Киев
    отредактировано 01:54
    Делал Engine.NewPage
  • отредактировано 01:54
    Создайте переменную отчета, и переместить в нее агрегатную функцию.
    В GruopFooter.OnBrforePrint сделайте так:
      
    GruopFooterMemo.Text := 'GruopFooterMemo: ' + FloatToStr(<Func1>);                                                   
    if Engine.FreeSpace < Band.Height  then
        Engine.NewPage;
    
  • FokewolfFokewolf Киев
    отредактировано 01:54
    написал: »
    Создайте переменную отчета, и переместить в нее агрегатную функцию.
    В GruopFooter.OnBrforePrint сделайте так:
      
    GruopFooterMemo.Text := 'GruopFooterMemo: ' + FloatToStr(<Func1>);                                                   
    if Engine.FreeSpace < Band.Height  then
        Engine.NewPage;
    

    Спасибо, это понятно. Т.е., при Engine.NewPage агрегатные функции в подвалах групп не работают?

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

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