implementation

{$R *.dfm}

procedure DoRepSQL;
// процедура выполнения запроса
begin
With fQueryRep do
begin
QuRep.Close;
QuRep.Prepare;
QuRep.SQL.Assign(MemoSQL.Lines);
QuRep.ExecSQL;
QuRep.Open;
end;
end;

procedure TfQueryRep.bDoQueryClick(Sender: TObject);
begin
// процесс выполнения отчета
DoRepSQL;
end;

procedure DestroyReportComponents;
// уничтожение динамических массивов
// для компонентов отчета
var n,i: Integer;
begin
n:= Length(L);
if n > 0 then
for i:= 0 to n-1 do
begin
L[i].Free;
T[i].Free;
end;
L:=Nil; T:= Nil;
end;

procedure CreateReportComponents;
// создание динамических компонентов отчета
var n, i: Integer;
begin
With fQueryRep do
if QuRep.Active then // если таблица по выполненному запросу открыта, то
begin
n:= QuRep.FieldCount; // число полей в полученном запросе QuRep
SetLength(L,n); // выделим память в массиве заголовков под столько же элементов
SetLength(T,n); // выделим память в массиве данных под столько же элементов
for i:= 0 to n-1 do // проход по каждому полю
begin
L[i]:= TQRLabel.Create(HeaderBand); // создаем элемент заголовка конкретного поля с номером i
L[i].Parent:= HeaderBand; // назначаем ему родителя составную часть заголовков HeaderBand
L[i].Left:= 12+i*140; // первый заголовок будет с отступом 12 пикселов, остальные через 140 от соседнего
L[i].Caption:= QuRep.Fields[i].FieldName; // надпись на заголовке будет совпадать с именем поля

T[i]:= TQRDBText.Create(DetailBand); // создаем элемент данных конкретного поля с номером i
T[i].Parent:= DetailBand; // его родителем будет составная часть данных DetailBand
T[i].Left:= L[i].Left; // отступы также, как для заголовков
T[i].DataSet:= QR.DataSet; // данные те же, что и для компонента отчета QR
T[i].DataField:= QuRep.Fields[i].FieldName; // данные по колонке брать из соответствующего поля таблицы
end;
end;
end;

procedure TfQueryRep.bCreateDynamicComponentsClick(Sender: TObject);
begin
CreateReportComponents;
end;

procedure TfQueryRep.bDoReportClick(Sender: TObject);
begin
QR.Preview;
end;

procedure TfQueryRep.bDestroyDynamicComponentsClick(Sender: TObject);
begin
DestroyReportComponents;
end;

procedure TfQueryRep.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DestroyReportComponents;
end;

procedure TfQueryRep.bDoDiynamicReportClick(Sender: TObject);
begin
DoRepSQL;
if QuRep.Active then
begin
DestroyReportComponents;
CreateReportComponents;
QR.Preview;
DestroyReportComponents;
end;
end;

procedure TfQueryRep.bOutToExcelClick(Sender: TObject);
begin
// если Excel открыт, то закрываем, иначе открываем его и выводим отчет
if ExApp <> Nil then ExcelClose(0) else
// вывод таблицы в Excel
OutReportToExcel('Пример отчета по запросу',
QuRep, // таблица для вывода в Excel
TitleFont.Font, // шрифт заголовка
HeaderFont.Font, // шрифт заголовков стобцов
DataFont.Font, // шрифт данных
Framed.Checked, // заключать данные в рамки
OutDataTime.Checked // выводить время создания отчета
);
end;

end.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: