Cross отчеты и их проблемы

отредактировано 06:31 Раздел: FastReport 2.xx VCL
Можно ли в Fast сделать следующее
Есть Cross отчет и у него много КОЛОНОК, но мало строк
(2..5). Он(отчет), формирует новую страницу после этих строк, хотя можно было бы не создавать новую страницу, а продолжить печатать ниже.

Комментарии

  • MichaelMichael планета Земля
    отредактировано 06:31
    Дык, может быть это и не Cross-report вовсе, а тот, который обычными средствами может быть создан? ;)
  • отредактировано 06:31
    Fast это, Fast!
    Опишу поподробней.
    Проблема в следующем:
    есть таблица, у нее N-колонок(заранее неизвестно сколько) и всего от 2 до 5 записей. Так вот, фаст начинает после 2-5 запесией создавать новую страницу, а хотелось бы, чтобы он продолжал печатать на этой же странице и только когда не хватало бы места на записи, создал бы новую страницу. Нужно в целях экономии бумаги и читабельности отчета.
  • MichaelMichael планета Земля
    отредактировано 06:31
    Обманом можно всё. Этот код (спасибо Алексею Дынникову) позволяет расположить на одной странице несколько после, собственно, построения отчёта.

    procedure MergePages(Dst,Src: TfrPage);
    begin
    while Src.Objects.Count > 0 do
    begin
    Dst.Objects.Add(Src.Objects[0]);
    Src.Objects.Delete(0);
    end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    R2.LoadPreparedReport('aaa.frp');
    R1.EMFPages.AddFrom(R2);
    R2.LoadPreparedReport('file1.frp');
    R1.EMFPages.MergePages(R2.EMFPages,0,0);
    R1.ShowPreparedReport;
    end;
  • отредактировано 06:31
    Я не знаю за что мой предыдущий ответ сняли, но этот код <B>ДЕЙСТВИТЕЛЬНО НЕ РАБОЧИЙ</B>. По-этому не надо вводить пользователей(читателей) этого форума в заблуждение


    procedure TForm1.Button1Click(Sender: TObject);
    begin
    R2.LoadPreparedReport('aaa.frp');
    R1.EMFPages.AddFrom(R2);
    R2.LoadPreparedReport('file1.frp');
    <B>// Нет у класса TfrEMFPages метода MergePages
    Если имелось ввиду предыдущая процедура, то у неесовершенно другие параметры это раз, а во-вторых туда передаются объекты типа TfrPage,
    а они не могут быть приведены к TfrEMFPages.
    </B>
    R1.EMFPages.MergePages(R2.EMFPages,0,0);

    R1.ShowPreparedReport;
    end;

    Спасибо Michael за ответ конечно... Но проблема то открыта
  • отредактировано 06:31
    Ну раз я народ в заблуждение ввел, то и отвечать мне ;)

    Все просто на самом деле. Мы MergePages запихнули непосредственно внутрь TfrEMFPages, код присланный ранее - mix от старого (с независимой процедурой) и нового (с перенесенной в TfrEMFPages). Правильно делать надо так:

    procedure TfrEMFPages.MergePages(SrcEMFPages: TfrEMFPages; DstPageIdx, SrcPageIdx: Integer);
    procedure DoMerge(Dst,Src: TfrPage);
    begin
    while Src.Objects.Count > 0 do
    begin
    Dst.Objects.Add(Src.Objects[0]);
    Src.Objects.Delete(0);
    end;
    end;
    begin
    ObjectsToPage(DstPageIdx);
    SrcEMFPages.ObjectsToPage(SrcPageIdx);
    DoMerge(PfrPageInfo(FPages[DstPageIdx]).Page,PfrPageInfo(SrcEMFPages.FPages[SrcPageIdx]).Page);
    PageToObjects(DstPageIdx);
    end;

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

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