Header с другого рапорта

отредактировано June 2017 Раздел: FastReport VCL
Привет всем.
Мне надо чтоб header репорта брался из какого то шаблона.
Шас делаю так - создаю новыи репорт и header соxраняю в фаил:
MyfrxHeader.SaveToStream
Создаётс красивыи XML фаил.
Потом в другом репорте заливаю его в другои хеадер:
MyAnotherReportHeader.LoadFromStream
Частично всё работает, но там нету данные которых брал из базы данных, тоесть в XML их нету.
В новом header-е только то что в дизаинтаиме поставлено :)

Есть идеи как реализовать токую задачу?

WBR
Janex

Комментарии

  • gpigpi
    отредактировано 21:02
    Если наследование от отчёта с TfrxHeader не устраивает, то тогда попробуйте загрузить шаблон с TfrxHeader в отдельный TfrxReport, создайте TfrxHeader в целевом отчёте и скопируйте TfrxHeader в него с помощью TfrxHeader.AssignAll
  • отредактировано 21:02
    gpi написал: »
    Если наследование от отчёта с TfrxHeader не устраивает, то тогда попробуйте загрузить шаблон с TfrxHeader в отдельный TfrxReport, создайте TfrxHeader в целевом отчёте и скопируйте TfrxHeader в него с помощью TfrxHeader.AssignAll
    Ето неподоидёт. Потому что сам репорт, из которого надо скопировать хидер, дизаинится в рантаиме, даже датасети и всё остальное делается в рантаиме и
    одновременно работать можно только с одним рапортом, так шас устроено и переделывать на 2 паралельные будет страшная работа :)
    Скопировать через фаили или TMemoryStream для меня лучшии вариант, только как в фаил загнать хидер не только в виде как в дизаине сделано, а
    со всемы данными взятыми с базы, тоесть уже сгенерированыи ... вот где загвоздка ...

  • gpigpi
    отредактировано 21:02
    написал:
    Ето неподоидёт. Потому что сам репорт, из которого надо скопировать хидер, дизаинится в рантаиме, даже датасети и всё остальное делается в рантаиме и
    одновременно работать можно только с одним рапортом, так шас устроено и переделывать на 2 паралельные будет страшная работа
    В случае генерации формы отчёта в рантайме, это как раз и подойдёт. Генерацию TfrxHeader оформляете отдельной процедурой, которую вызываете отдельной процедурой, когда это нужно
    написал:
    только как в фаил загнать хидер не только в виде как в дизаине сделано, а
    со всемы данными взятыми с базы, тоесть уже сгенерированыи ... вот где загвоздка ...
    Если в сгенерированном отчёте присутствуют только объекты сгенерированного TfrxHeader, то можно попробовать использовать TfrxReport.PreviewPages.AddFrom. Но это опять второй TfrxReport, и, возможно, добавление произойдёт со следующей страницы.
    Так что вариант с формированием требуемого шаблона сразу - самый оптимальный
  • отредактировано 21:02
    Нашёл всётаки способ как решить задачу, мож кому пригодится:


    For i := 0 To Pred( frxReport1.PreviewPages.Page[0].Objects.Count) do 
       If  Тobject(frxReport1.PreviewPages.Page[0].Objects[i]).ClassType =  TfrxPageHeader Then begin
        TfrxPageHeader(frxReport1.PreviewPages.Page[0].Objects[i]).SaveToStream(HeaderStream);
        break;
       End;
    
      HeaderStream.Position := 0;
    
      frxReport2.FindObject('PageHeader1').LoadFromStream(HeaderStream);
    

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

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