Компоненты экспорта и отчеты

zz 5zz 5 Россия, Москва
отредактировано 04:27 Раздел: FastReport 4.0
Такая проблема. Для того, чтобы в окне предпросмотра FR были доступны различные виды экспорта, надо соотвествующие компоненты положить на форму с объектом TfrxReport. Но, к сожалению, форм frxReport в проекте достаточно, получается, что на кажной надо устраивать "свалку" компонентов-экспорта, а также других компонентов FR.
Можно ли этого как-нибудь избежать, а то очень уж неудобно работать с такой формой ? :)

Комментарии

  • gpigpi
    отредактировано 04:27
    Зачем же использовать на каждой форме отдельный frxReport?
    Достаточно разместить один frxReport с набором фильтров экспорта на главной форме или модуле данных и обращаться к нему из остальных форм
  • zz 5zz 5 Россия, Москва
    отредактировано 04:27
    gpi Не понял. У меня каждый отчет связан со своим НД. Также в отчете может использоваться информация с формы. Получается, что мне придется каждый раз вручную, программно настраивать Report для текущей формы ?
  • gpigpi
    отредактировано 04:27
    Как я понял, у Вас все отчёты хранятся в DFM. Переделайте программу под загрузку шаблонов отчётов из файлов (см. демо). Требуемый набор данных можно сопоставить frxDBDataset перед загрузкой шаблона
  • zz 5zz 5 Россия, Москва
    отредактировано 04:27
    gpi написал: »
    Требуемый набор данных можно сопоставить frxDBDataset перед загрузкой шаблона
    Не совсем понял. Кстати, шаблоны хранятся и так, и эдак. Получается, что, чтобы выпустить отчет, надо в "главный" Report, лежащий на форме (датамодуле) с компонентами экспорта, загрузить шаблон, настроить frxDBDataSet, так ?


    P.S. Пришла другая идея. Сохранять готовый отчет, а показывать через другой отчет, в который загружать готовый отчет через PreparedPages.LoadFromFile. Буду пробывать.
  • zz 5zz 5 Россия, Москва
    отредактировано 04:27
    Слава Богам, все получилось. Публикую код:
    function TfrmCore_DMfrx.PrepareAndShowReport(AReport: TfrxReport): Boolean;
    var
      MS: TMemoryStream;
    begin
      Result := AReport.PrepareReport(True);
      if Result then
      begin
        MS := TMemoryStream.Create;
        try
          AReport.PreviewPages.SaveToStream(MS);
          MS.Position := 0;
          frxReport.PreviewPages.LoadFromStream(MS);
          frxReport.ShowPreparedReport;
        finally
          MS.Free;
        end;
      end;
    end;
    
    Работает, но нет ли в этом подходе подводных камней ?
  • отредактировано 04:27
    написал:
    надо соотвествующие компоненты положить на форму с объектом TfrxReport.
    hint: Можно просто добавить соответсвующие модули в строку uses.

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

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