Страница 1 из 2

Шаблон из 2 страниц.

Добавлено: 16 ноя 2007, 10:39
Kirill
У меня в шаблоне отчета 2 страницы шаблонные - PageHead и PageBody
Сам отчет состоит например из 4х страниц. В итоге хочу получить
Первая страница сформирована по шаблону PageHead,
вторая, третья и четвертая по шаблону PageBody

У меня же получается сейчас
1ая, 2ая, 3ья, 4ая - PageHead и
1ая, 2ая, 3ья, 4ая - PageBody

Что и куда надо написать, чтобы отчет сформировался по моим требованиям?
Я в AfterPrintEvent пишу

Код: Выделить всё

if (PageNumber > 0) PageHead.Enabled = false;
Все бы ничего. Но! Данные на странице PageBody опять начинаются заново. Т.е. если у меня идут данные id1, id2, id3.. idn, то на странице
PageHead - id1, id2, id3,
а на странице PageBody снова id1, id2, id3, и уже потом идут id4, id5, id6,...,idn

Шаблон из 2 страниц.

Добавлено: 16 ноя 2007, 13:09
Pavel
Здравствуйте.

Вы можете использовать фильтр для бэнда на второй шаблонной странице. Для этого запомните положение данных после первой страницы(допустим id_last), а затем укажите в фильтре для бэнда на второй странице чтобы печатались все данные больше id_last.

id_last можно получить разными способами. Например, указать id_last как переменную и написав в событии RenderingEvent, для бэнда на первой странице: id_last = DataSource.DataSourceID

В событии BeforePrintEvent для первой страницы укажите:

Код: Выделить всё

if (PageNumber > 1) Page1.Enabled = false;
тогда у первой шаблонной страницы будет отображаться только одна страница.

Спасибо.

Шаблон из 2 страниц.

Добавлено: 19 ноя 2007, 05:19
Kirill
Запутался я что-то.
Куда вставить переменную id_last, т.е. куда вставить ее так, чтобы она была видна для второй страницы (ну т.е. чтобы id_last была как бы глобальной что ли)
И второй вопрос, если у меня например DataSourceID не числовое, а строковое значение, будет ли работать id_last>DataSourceID?

Шаблон из 2 страниц.

Добавлено: 19 ноя 2007, 05:49
Kirill
В данном случае DataSourceID у меня строковое и имеет значение типа "xx.xxx.xx.xxx" (например "12.133.47.000")
Что мне делать в данном случае? Данные не отсортированы ((
Может быть можно как-то иначе переходить на следующую шаблонную страницу?

Я вот думаю, может можно по количеству записей определять. Ну т.е. что-то вроде
"Начинай выводить данные на второй шаблонной страницы с 18 позиции"

Шаблон из 2 страниц.

Добавлено: 19 ноя 2007, 08:20
Kirill
Надо получить как бы алгоритм такой, "если страница1 закончилась, то все остальные данные пишем на второй странице"
Это реально реализовать?

Шаблон из 2 страниц.

Добавлено: 19 ноя 2007, 08:26
Edward
Да, это возможно. В этом случае Вам необходимо установить значение фильтра следующим образом:

Код: Выделить всё

Line > NumberOfRecordsAlreadyPrinted
Здесь NumberOfRecordsAlreadyPrinted - переменная, которая содержит количество уже отпечатанных записей. Она должна быть описана в словаре и установлена до печати следующей страницы шаблона.

Спасибо.

Шаблон из 2 страниц.

Добавлено: 19 ноя 2007, 09:11
Kirill
Не получается ничего... :cry:
Смотрите что я делаю.

-- Есть 2 шаблонные страницы Page1 и Page2
1. Создал переменную в словаре типа int и назвал Test
2. В бэнде данных страницы Page2 в фильтре написал Line > Test
3. В Page1 в методе BeforePrintEvent стоит

Код: Выделить всё

if (PageNumber > 1) Page1.Enabled = false;
4. В Page2 методе BeforePrintEvent стоит

Код: Выделить всё

Test = 18;
Где я не прав?

Шаблон из 2 страниц.

Добавлено: 19 ноя 2007, 09:29
Kirill
А нет. Все работает!
Беда вот в чем!
У меня помимо бэнда данных, есть еще и бэнд группировки. В результате которого мы получаем погрешность по количеству выводимых данных. Отсюда вопрос, как динамически записать в Test количество полученных данных на первой странице

Шаблон из 2 страниц.

Добавлено: 20 ноя 2007, 07:35
Edward
Для того, чтобы скорректировать количество строк, которые Вам необходимо распечатать на второй странице шаблона, в событии BeforePrint GroupHeader бэнда Вы можете уменьшать на единицу количество необходимых к распечатке строк.

Спасибо.

Шаблон из 2 страниц.

Добавлено: 20 ноя 2007, 07:45
Kirill
Не понял идеи... Как это можно сделать?

P.S. на всякий случай, чтобы мы говорили об одном и том же. На первой стронице может быть одна или более группировок, поэтому жестко задать количество строк выводимых данных из бэнда данных невозможно.
Поэтому стоит задача получить в BeforePrintEvent что-то вроде
Test = Данные1.Count (но это не работает((( )