Добавление и изменение страниц через скрипт

отредактировано 09:42 Раздел: FastReport 4.0
Добрый день.

С фастрепортом только начинаю работать, многое не понятно.

Шаблон отчета состоит из 2 страниц, причем Page1 несколько, а Page2 всего одна. Необходимо вставить Page2 после каждой Page1.
Если использовать код Delphi

var i, j: integer;
p : TfrxReportPage;
begin
Report.PrepareReport;
j := Report.PreviewPages.Count - 1;
p := TfrxReportPage.Create(nil);
for i := 0 to j - 2 do
begin
p.AssignAll(Report.PreviewPages.Page[j+i]);
Report.PreviewPages.AddEmptyPage(i*2+1);
Report.PreviewPages.ModifyPage(i*2+1, p);
end;
p.Free;
Report.ShowPreparedReport;
end;

Всё прекрасно работает. Вопрос, возможно подобный код перенести в скрипт шаблона отчета?

Заранее спасибо.

Комментарии

  • gpigpi
    отредактировано 09:42
    Попробуйте вызывать пользовательскую функцию в OnStopReport, которая будет выполнять пересортировку страниц в коде Delphi
  • отредактировано 09:42
    gpi написал: »
    Попробуйте вызывать пользовательскую функцию в OnStopReport, которая будет выполнять пересортировку страниц в коде Delphi


    Дело в том, чтобы код Delphi не использовался совсем, всё должно быть в шаблоне.

    У меня получается только добавить новую пустую страницу с помощью Engine.NewPage, а как её изменить, да ещё чтобы данные с Page2 брались, не знаю.
  • gpigpi
    отредактировано 09:42
    написал:
    У меня получается только добавить новую пустую страницу с помощью Engine.NewPage, а как её изменить, да ещё чтобы данные с Page2 брались, не знаю.
    В таком случае нужно пробовать сразу формировать нужный отчёт с помощью скрипта. Если на второй странице статическая информация, то это возможно. Нужно разместить её на дочернем бэнде и использовать Engine.ShowBand
  • отредактировано September 2012
    gpi написал: »
    В таком случае нужно пробовать сразу формировать нужный отчёт с помощью скрипта. Если на второй странице статическая информация, то это возможно. Нужно разместить её на дочернем бэнде и использовать Engine.ShowBand
    Добавила Child, на нем разместила нужную информацию. Engine.ShowBand вызываю на событие DetailDataOnAfterPrint, но так как строк в DetailData несколько, чайлд показывается после кажой строки. Как можно сначала вывести всю информацию из DetailData, а потом только Child? И ещё, если DetailData пуст, то Child не показывается, как быть? Спасибо )
  • отредактировано 09:42
    Изменила,

    Engine.ShowBand вызвала на событие MasterDataOnBeforePrint, для всех кроме первой страницы, а для последней Page1 в конце печатается одна Page2, так что всё работает как надо.

    Спасибо.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.