Способ определить общее количество страниц в Reportе
Предлагаю способ определить общее количество страниц в Reportе, чтобы юзер смог увидеть
вожделенное «Страница X из Y». К сожалению, работает только с режимом предварительного
просмотра.
1. В стартовой процедуре определить public переменную max_page_of_report.
2. В требуемом отчёте создать в PageHeader или PageFooter поле 'Стр. '+alltrim(str(_pageno))+' из
'+alltrim(str(max_page_of_report)).
3. Создать в отчёте переменную (Report/Variables) с именем current_report_last_page.
4. Поставить этой переменной галочку Release after report, и прописать Value to store:
get_last_page_of_report(). Остальное оставить как есть: Initial value – 0, Calculate – nothing,
Reset at: End of report.
5. Прописать в какой-нибудь общий путь функцию:
function get_last_page_of_report
if max_page_of_report<_pageno
max_page_of_report=_pageno
endif
return .t.
endfunc
6. Для предварительного просмотра исполнить такой код:
max_page_of_report=0
report form (_report_name) preview noconsole nowait
keyboard '{END}'
keyboard '{HOME}'
Всё это, конечно, сделано криво, но работает!
Текущая оценка: (4.772)
Дополнения пользователей Способ определить общее количество страниц в Reportе
Есть способ проще.
PRIVATE max_page_of_report
max_page_of_report = 0
report form MyReport.frx noconsole to file TmpFile.txt
max_page_of_report = _PAGENO
delete file TmpFile.txt
И теперь уже печатаем окончательно
report form MyReport.frx to printer prompt preview
И в отчете, соответсвенно, использовать переменную max_page_of_report как и указано ранее в
качестве указателя общего количества страниц.
По возможности, я стараюсь избегать переменных PUBLIC. Тем более здесь вполне достаточно PRIVATE.
Egor Pashkevich
26.12.01 23:02:18
Спасибо за замечание, Владимир!
Указанный Вами способ, безусловно, проще.
Можно даже указать вместо to file xxx устройство NULL.
Однако, этот способ беспощадно врёт в случаях,
когда последняя страница отчёта либо заполнена
"под завязку", либо, наоборот,
содержит всего одну строку. В этих случаях _pageno
равняется, например 2 вместо 1 или наоборот.
Владимир Максимов
27.12.01 12:22:57
>Можно даже указать вместо to file xxx устройство NULL
У меня (VFP6SP5) - это не получается. Т.е. команда
REPORT FORM MyReport.frx TO NULL
Конечно проходит, но результат посылается в ФАЙЛ с именем "NULL.TXT"
>В этих случаях _pageno равняется, например 2 вместо 1 или наоборот
Ну так ведь и номер текущей страницы в отчете тоже будет неверен! Ты же явно печатаешь там
_PAGENO. Так что противоречия я не вижу.
Денис В. Степанов
04.01.02 12:58:27
>У меня (VFP6SP5) - это не получается. Т.е. команда
>REPORT FORM MyReport.frx TO NULL
>Конечно проходит, но результат посылается в ФАЙЛ с >именем "NULL.TXT"
Тут нужен NUL - стандартное устройство DOS.
Владимир Максимов
08.01.02 14:26:44
В журнале FoxTalk за сентябрь 2001 №9(51) приведено решение данной проблемы (тоже через печать в
файл, но там есть дополнительные сложности).
Я переписал приведенные там решения в свой пример опубликованный здесь же "FAQ for Reports"