FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9115
Вход
Способ определить общее количество страниц в Reportе

Способ определить общее количество страниц в Reportе


 
Прислал: Egor Pashkevich   Категория: Отчеты


Способ определить общее количество страниц в 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е
[+][?]
Владимир Максимов
26.12.01 17:46:52

Есть способ проще.

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"
[Дополнить]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика