Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Что делает QRCompositeReport->Prepare() ?


Автор: ksili 30.3.2006, 06:14
Я формирую два отчёта в своей функции, а затем в конце этой функции добавляю их в составной отчёт.
Код

int PrepareReport(void)
{
..........
             // формируем составной отчёт
             Form1->QRCompositeReport1->Reports->Clear();
             Form1->QRCompositeReport1->Reports->Add(FRep->QuickRep1);
             Form1->QRCompositeReport1->Reports->Add(FRep2->QuickRep1);
             Form1->QRCompositeReport1->Prepare();
}
//---------------------------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
 PrepareReport();
 FRep->QRCompositeReport1->Preview();
}

Отчёт почему-то пустой, даже вне зависимости от того есть или нет строчка
Код

Form1->QRCompositeReport1->Prepare();


Что вообще делает метод Prepare() составного отчёта? Запускает такие же методы для каждого отчёта?
Или может у меня неправильная последовательность действий?

Автор: DIMA.NET 31.3.2006, 14:43
1)А почему в одном месте:
Цитата

Form1->QRCompositeReport1->...


а тут:
Цитата

FRep->QRCompositeReport1->Preview();

?
2) Наверное можно попробовать так:
Код

Form1->QRCompositeReport1->Reports->Clear();
FRep->QuickRep1->Prepare();
Form1->QRCompositeReport1->Reports->Add(FRep->QuickRep1);
FRep2->QuickRep1->Prepare();
Form1->QRCompositeReport1->Reports->Add(FRep2->QuickRep1);

Автор: ksili 3.4.2006, 05:16
1)
Цитата

А почему в одном месте:

Цитата

Form1->QRCompositeReport1->...


а тут:

Цитата

FRep->QRCompositeReport1->Preview();


Это я конечно в посте опечатался, на самом деле
Код

void __fastcall TForm1::Button3Click(TObject *Sender)
{
 PrepareReport();
 Form1->QRCompositeReport1->Preview();
}


2) Насчёт второго могу сказать, что на самом деле метод Prepare() для каждого отчёта применять невозможно. Если все действия по подготовке отчёта разместить в обработчике OnPrepare отчёт получается пустой. Это косяк QReporta. Этот вопрос уже поднимался на форуме. Поэтому отчёты формируются в своей функции.
А вместе они формируются (в одной функции) потому, что так намного удобнее.

Автор: ksili 4.4.2006, 09:41
Уже кое-что получилось. Оказывается добавлять отчёты в составной отчёт надо в обработчике OnAddReports.
Код

int PrepareReport(void)
{
 PrepareFirstPage();
 PrepareSecondPage();
 Form1->QRCompositeReport1->OnAddReports;
 Form1->QRCompositeReport1->Preview()
}

void __fastcall TForm1::QRCRAddReports(TObject *Sender)
{
 Form1->QRCR->Reports->Add(FRep->QuickRep1);
 Form1->QRCR->Reports->Add(FRep2->QuickRep1);
}

Однако отчёты накладываются друг на друга. Пробовал второй лист добавлять Инсертом - не помогло. Если перед Preview() поместить Prepare(), то отчёт опять пустой.

Как сделать, чтобы два отчёта не накладывались друг на друга? smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)