Общее количество страниц в двухпроходном отчете
В связи с требованиями делопроизводства заголовок группы не должен оставаться последним на странице.
Для решения этой проблемы (к сожалению, стандартных средств для этого я не обнаружил ) я на первом проходе запоминаю высоту Group Header & Master Data (в OnCalcHeight), а на втором проходе стартую новую страницу (Engine.NewPage), если на текущей не хватает места для заголовка группы и ее первой записи.
Проблема в том, что переменная TotalPages возвращает старое количество страниц, не учитывая эти переносы, т.е. на последней страницы вполне реально увидеть надпись "Страница 130 из 129". Подскажите пожалуйста, как выйти из такого положения?
Для решения этой проблемы (к сожалению, стандартных средств для этого я не обнаружил ) я на первом проходе запоминаю высоту Group Header & Master Data (в OnCalcHeight), а на втором проходе стартую новую страницу (Engine.NewPage), если на текущей не хватает места для заголовка группы и ее первой записи.
Проблема в том, что переменная TotalPages возвращает старое количество страниц, не учитывая эти переносы, т.е. на последней страницы вполне реально увидеть надпись "Страница 130 из 129". Подскажите пожалуйста, как выйти из такого положения?
Комментарии
Engine.NewPage;
Set('TotalPages',<TotalPages>+1);
Какая версия FR? У меня в 3.17 при использовании в OnBeforePrint бэнда кода
ToltalPages выводит нормальное значение. Попробуйте обновить версию.
Тогда, если мне нельзя осталять запись 3 последней на странице, я переношу ее на следующую, но общее количество страниц не меняется, т.к. места на второй странице хватает. Если же вторая страница будет заполненной, то последняя запись не влезет, и произойдет формирование третьей страницы самим ядром FastReport'a.
Поэтому каждый раз увеличивать количество страниц не годится.
общее количество страниц может увеличиться уже после печати первой страницы?
1) Создайте новый отчет;
2) Для MasterData выставьте
RowCount=5,
StartNewPage=true,
3) Добавьте обработчик для MasterData1.OnBeforePrint
4) На PageFooter в Memo1 поместите выражение
[PAGE#] из [TOTALPAGES#]
5) Внимательно смотрите, какое значение TotalPages выдает ShowMessage и какое значение выводится в Memo на футере.
Выводы делайте сами. По крайней мере про 3.17 можно точно сказать, что <span style='color:blue'>точное значение TotalPages становится известно во втором проходе только после печати последней страницы и только потом в мемках происходит подстановка значений.</span>
Я использовал не [TOTALPAGES#], а [TOTALPAGES].
Хотя в руководстве по поводу переменных написано следующее:
TotalPages - всего страниц в текущем отчете (отчет должен быть двухпроходным)
TotalPages# - всего страниц в пакете.
Кто бы мог подумать, что несмотря на отсутствие каких-либо пакетов, нужно использовать именно вторую из них!