Cross отчеты и их проблемы
Можно ли в Fast сделать следующее
Есть Cross отчет и у него много КОЛОНОК, но мало строк
(2..5). Он(отчет), формирует новую страницу после этих строк, хотя можно было бы не создавать новую страницу, а продолжить печатать ниже.
Есть Cross отчет и у него много КОЛОНОК, но мало строк
(2..5). Он(отчет), формирует новую страницу после этих строк, хотя можно было бы не создавать новую страницу, а продолжить печатать ниже.
Комментарии
Опишу поподробней.
Проблема в следующем:
есть таблица, у нее N-колонок(заранее неизвестно сколько) и всего от 2 до 5 записей. Так вот, фаст начинает после 2-5 запесией создавать новую страницу, а хотелось бы, чтобы он продолжал печатать на этой же странице и только когда не хватало бы места на записи, создал бы новую страницу. Нужно в целях экономии бумаги и читабельности отчета.
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;
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 за ответ конечно... Но проблема то открыта
Все просто на самом деле. Мы 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;