Нумерация страниц и содержание

отредактировано 05:07 Раздел: FastReport 4.0
Прембула :

Три датасета. DS1, DS11, DS12. Последние два завязаны к первому через Master/Detail.
В отчете они соответственно привязаны чере МастерДата и пару ДетайлДата. МастерДата начинает новую страницу.

Амбула :

Для каждого "шага" МастерДата на страницах надо начинать нумерацию заново. Это решаемо, через переменную. Но надо так же на страницах выводить количество сгенеренных ДетаилДата-ми страниц.
Что то вроде:
1/2
2/2
1/3
2/3
3/3
и т.д
Заведомо их количество неизвестно (число строк в detail каждый раз разное, высота строк варьируется от длинн текстов).

Подскажите - какие варианты возможны? (двухпроходником не получилось - появляется несколько копий отчетов. видимо из-за нюансов то ли Master/Detail связки, то ли из-за особенностей доп кода внутри... делать внешним кодом после PrepareReport? ...? )

Хуже еще то, что помимо этого надо до этих страниц эдакое содержание, в коем надо указать в числе прочего все те самые 1/2, 2/2 ... 3/3. Как быть с этим?

заранее благодарю за идеи...

Комментарии

  • отредактировано 05:07
    Если я правильно понял суть вопроса, то можно так:

    DS1.onBeforePrint:
    Set('myTotalPages', 0);

    DS1_footer.onBeforePrint:
    //Устанавливаем новое значение TotalPages

    Аналогично с детейлами. Более точно не подскажу, т.к. не экспериментировал. У меня была другая ситуация - когда надо продублировать нумерацию на повторяющихся страницах - то есть идут 20 страница с нумерацией от 1 до 20, затем столько же таких же (ну почти таких же) и опять нумерация от 1 до 20. Специфика, как понимаете, другая. Но методы, в принципе, одни и те же.
    Увеличение страниц, например, можно сделать так:
    procedure PageFooter1OnBeforePrint(Sender: TfrxComponent);
    begin
      Set('MyPage', <MyPage> + 1);  
    end;
    
  • отредактировано 05:07
    2 Nightmareterrible

    Если я верно понял - то вы предлагаете следующее:
    - завести переменную, например, myTotalPages
    - и в футере мастердетайла делать
    Set('myTotalPages', 0);
    

    смысл?

    - чем set отличается от просто?
    myTotalPages := 0;
    
    - если делать так (через set ли, через присвоение ли), то myTotalPages изменится, но уже для последующих страниц... а мне надо, как бы, перед очередным "шагом" мастердетайла понять сколько страниц нагенерили детайлы (допустим N шутк) (это понятно как сделать), вернуться к этим страницам и на них проставить рядом с их нумерацией, что их было N штук.
  • отредактировано 05:07
    Пытался пойти иным методом...
    Если сделать PrepareReport, то потом можно пробежаться по страницам, и откорректировать нумерацию. Однако если сделать функцию, которая б вызывалась при завершении шага МастерДетайла и корректировала заданное количество предыдущих страниц - то балалайка. функция вызывается, всё находит и корректирует, однако на отображении в готовом отчете - её корректировки не проходят...
  • отредактировано 05:07
    Двойной проход пробовали?
  • отредактировано 05:07
    2 Nightmareterrible

    пробовал... но, так сказать, - не сильно :) . после ряда неудачных попыток - бросил это дело... или я чего в в двухпроходнике не понимаю, или не походит он в моем случае...
    пока остановился на дураццком, но работающем варианте (сроки жгут... проект ждут... разбираться не всегда есть время) - предварительно генерю упрощенные некоторые странички, смотрю на кол-во страниц в них, храню в доп поле одного из датасетов и потом - выдаю "нагора" и содержание, и требуемый мне функционал с нумерацией...

    понятно, но такой подход не гибок, но вполне шустр.
  • gpigpi
    отредактировано 05:07
    Пропробуйте добавить заголовок группы с ResetPageNumbers = True

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

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