Subreport. Вставка из файла

отредактировано 03:48 Раздел: FastReport 4.0
Как в качестве SubReport'a использовать готовый шаблон-отчет?*

Комментарии

  • gpigpi
    отредактировано 03:48
    В таком случае Вам нужно пакетное построение отчётов
  • отредактировано 03:48
    gpi написал: »
    В таком случае Вам нужно пакетное построение отчётов
    А что это и с чем его едят?*
  • отредактировано 03:48
    Я не пойму
    Неужели основное назначение SubReport'ов-это вывод данных, которые заполняются каждый раз по новой?!!
    Неужели никто не задумывался о том-чтобы использовать их для включения в главный отчет в качестве отчетов-шаблонов?
    Например-если есть 100 отчетов-и у них одинаковая шапка-то зачем каждый раз ее заново переделывать?
    Один раз написал отчет 'Sub_Title.fr3' и потом сколько угодно используешь его в качестве SubReport'a!!!
    Но КАК это сделать?
    Разработчики!! Прием!!
    P.S. Наследование не предлагать
    P.P.S. Интересует реализация ТОЛЬКО посредством SubReport'ов
  • отредактировано 03:48
    Не вижу никаких трудностей.

    Можно сохранить сабрепорт в файл (точнее его страницу), и после загружать:
    var
      Sub: TfrxSubreport;
      Stream: TMemoryStream;
    begin
     Sub := frxReport1.FindObject('Subreport1') as TfrxSubreport;
     if Sub1 <> nil  then
     begin
       Stream := TMemoryStream.Create;
       try
         Sub.Page.SaveToStream(Stream);
         Stream.SaveToFile('subReport.sub');
       finally
         Stream.Free;
       end;
      end;
    
    Загрузка будет аналогична Sub.Page.LoadFromStream(SubReportFileStream).

    Или дрогой вариант с 2-мя компонентами TfrxReport:
    var
      Sub1, Sub2: TfrxSubreport;
    begin
     Sub1 := frxReport1.FindObject('Subreport1') as TfrxSubreport;
     Sub2 := frxReport2.FindObject('Subreport1') as TfrxSubreport;
     if (Sub1 <> nil) and (Sub2 <> nil)then
       Sub2.Page.AssignAll(Sub1.Page);
    
  • отредактировано December 2007
    написал: »
    Не вижу никаких трудностей.
    Загрузка будет аналогична Sub.Page.LoadFromStream(SubReportFileStream)
    var
    Stream: TFileStream;
    begin
    Stream := TFileStream.Create('D:\SubTItle.fr3',fmOpenRead);
    //...Создание компонента......
    Sub.Page := TfrxReportPage(Report.Pages[2]);
    Sub.Page.LoadFromStream(Stream);
    end;
    
    При такой записи у меня происходит следующее:
    +Добавляется компонент SubReport
    +При клике на нем открывается ПУСТАЯ страница
    +все данные из SubReport'a создаются и отображаются в ГЛАВНОМ отчете
  • отредактировано 03:48
    Нужно не шаблон загружать , а XML самого сабрепорта сохраненного таким способом:
    var
      Sub: TfrxSubreport;
      Stream: TMemoryStream;
    begin
     Sub := frxReport1.FindObject('Subreport1') as TfrxSubreport;
     if Sub1 <> nil  then
     begin
       Stream := TMemoryStream.Create;
       try
         Sub.Page.SaveToStream(Stream);
         Stream.SaveToFile('subReport.sub');
       finally
         Stream.Free;
       end;
      end;
    

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

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