NewUser писал(а):Я вдруг подумал, а что, если использовать свойство: Report{PROP:NextPageNo}?
Но она не заработала…
Интересно, я что-то сделал не так, или направление мысли принципиально не верно?
Вся проблема в том, что "движек" формирования отчета в Кларионе держит в памяти сразу две страницы - текущую и предыдущую. По этой причине невозможно легально отследить завершение первой страницы. А вот следующие страницы уже отследить можно. Но! Это не поможет - если печатаемая деталька не помещается на текущем листе, то производится завершение печати текущего листа (с печатью страничного футера), после чего на новом листе печатается страничная шапка и деталька, которая не влезла на предыдущей странице. Если в этот момент подменить страничную шапку, то новая шапка пойдет только со следующего листа! Т.е., менять страничную шапку необходимо ПЕРЕД переходом на страницу, с которой новая шапка должна печататься. Но только ПОСЛЕ того, как на текущей странице уже была напечатана хотя-бы одна деталька. Иначе новая шапка начнет печататься уже с текущей страницы.
Вообщем, как видно, если использовать стандартный "движек" формирования страниц отчета, то менять страничные шапки будет очень затруднительно, а иногда - просто невозможно.
Выход, как правильно подсказали коллеги, только один - самому формировать страницы отчета. А для правильного решения данной задачи необходимо в любой момент времени знать две величины - текущий остаток высоты рабочей области листа и РЕАЛЬНУЮ высоту печатаемой детальки. Сразу отмечу - даже использование 1/1000 дюйма в качестве единицы измерения отчета не гарантирует правильный ручной подсчет использованной высоты рабочей области листа и ее остаток. Дело в том, что RTL Клариона для всех подстчетов использует внутреннюю единицу измерения, реальная величина которой зависит от используемого в данный момент драйвера принтера. И практически ВСЕГДА будут иметь место погрешности округления при переводе этих единиц измерения в единицы измерения отчета. А несовпадение вычисленной ручками свободной высоты рабочей области страницы с ее внутренним значением может привести к тому, что "движек" RTL сам выполнит смену страницы и, тем самым, "обломает" всю красоту ручного формирования отчета!
Таким образом, для полного счастья необходимо знать внутреннее значение свободной высоты рабочей области страницы и высоту печатаемой детальки, опять-же, во внутренней единице измерения. Сразу скажу - это возможно. Но! Необходимо за этими данными "залезать" в структуру отчета и детальки. Сам я использую именно этот вариант, но не советую тем коллегам, которые плохо разбираются во всех этой "кухне" - вполне возможны проблемы при переходе между версиями (иногда - даже между билдами!).
Кстати! Кроме вышеперечисленного есть еще один подводный камень - РЕАЛЬНАЯ высота деталек переменной высоты. Особенно - деталек с TEXT-контролом, работающим с RTF-текстом! И опять - выход здесь только один - одновременно с основным отчетом открываем временный отчет с теми-же параметрами, что и основной, но только с одной деталькой. И, естественно, в режиме предпросмотра. Перед печатью детальки переменной высоты выполняем ее печать на временном отчете и определяем реальную высоту, занятую этой деталькой в отчете - для этого можно воспользоваться разницей между предыдущим и текущим значениями внутреннего остатка высоты рабочей области отчета. Хотя я предпочитаю брать эти данные несколько по-другому - прямо у самой напечатанной детальки из очереди напечатанных деталек на текущей странице. Эта очередь, как и вся прочая полезная инфа, так-же "сидит" в структуре отчета.
Да! "Заслать-бы" своего "козачка" в SV - что-бы он надоумил разработчиков "открыть" как можно больше такой вот полезной инфы в разных структурах (отчет, окно, контрол) - тем более, что через существующий интерфейс PROP-ов сделать это очень легко!