Вставить отчет внутрь другого отчета

отредактировано 09:11 Раздел: FastReport 4.0
Добрый день !
Имеется отчет, ВНУТРЬ которого надо бы вставлять
а) оптимальный вариант - сформированный "на-лету" своего рода дочерний отчет (строится из внешнего произвольного шаблона)
б) если невозможно а то как-нибудь заранее "прорешать" дочерние отчеты а потом готовое уже вставить именно внутрь главного отчета

Т е своего рода композитный отчет где другие отчеты будут вставляться не в конец главного а в нужные места базового

Это можно ? Спасибо

Комментарии

  • gpigpi
    отредактировано 09:11
    procedure TForm1.FormCreate(Sender: TObject);
    var Report: TfrxReport;
        Page: TfrxReportPage;
        Subreport: TfrxSubreport;
        MasterData: TfrxMasterData;
        i: integer;
        c: TfrxComponent;
    begin
        Report:=TfrxReport.Create(Form1);
        Report.LoadFromFile('subreport.fr3');
        Page:=TfrxReportPage.Create(nil);
        Page.AssignAll(Report.Pages[1]);
        Page.Parent:=frxReport1;
        Page.CreateUniqueName;
        for i:=0 to Page.AllObjects.Count-1 do
          begin
            c:=Page.AllObjects.Items[i];
            c.CreateUniqueName;
          end;
        MasterData:=TfrxMasterData(frxReport1.FindObject('MasterData1'));
        Subreport:=TfrxSubreport.Create(MasterData);
        Subreport.CreateUniqueName;
        Subreport.SetBounds(0, 0, 100, MasterData.Height);
        Subreport.Page:=Page;
        Report.Free;
        frxReport1.ShowReport();
    end;
    
  • отредактировано January 2012
    Cпасибо, идея понятна.
    К сожалению этот метод не очень годится, как мне кажется. У сабрепорта есть свои ограничения, динамически строить довольно сложные отчеты которые внутри имеют допобработку через скрипт и дружить их между собой тоже не очень удобно...

    А можно как-то вызывать вот эти дочерние отчеты а их результат построения вставлять в нужное место ?
    Т е условно говоря - зарегестрировали нужную функцию, которая вызовет в нужном бенде независимое построение отчета (без превью) и как-то ее результат в виде сформированного дочернего отчета вставит в нужное место. Очень будет похоже на сабрепорт по сути но без его ограничений и все параметры и источники данных независимы от главного отчета..

    =================
    Пробовал 2 способа оба провалились
    1. Завел пользовательскую функцию, по вызову которой при построении отчета с помощью PreviewPages.AddFrom пытаюсь добавить сформированный другой отчет
    2. После того как первый способ провалился ввиду ошибки Out of bounds(-1) попробовал просто тупо
    загрузил шаблон и сделал ему
    frxReport1.PrepareReport(true);
    3 В frxReport2 прогрузил fp3 другого отчета
    4. Попытался добавить в первый frxReport1.PreviewPages.AddFrom(frxReport2);
    та жа ошибка.
    Что делаю не так ?

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

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