Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.04;
Скачать: CL | DM;

Вниз

кто-нибудь делал отчёты, не с БД а со своих данных, с программы   Найти похожие ветки 

 
cjiohobaji ©   (2003-07-21 05:05) [0]

Кто-нибудь когда-нибудь, делал отчёты с програмных данных, ??
Я пытаюсь найти оптимальный вариант составления отчёта по скорости и если получиться по гибкости, в голову ничего путного не приходит кроме как динамически создавать label"ы на QuickReport"е, но это же кошмар, у меня отчёт состоит из 20 разных страниц,
И еще вопрос можно ли в QuickReport"е Band размещать горизонтально? и чтоб данные располагались горизонтально?
Буду очень благодарен кто даст идею.


 
Babay ©   (2003-07-21 05:16) [1]

А какие проблемы с динамикой?
Я всегда так делаю и никаких проблем.

Однако обленинило Вас программирование в Д. Пару сторок нацарапь уже в лом.

А насчет расположения горизонтально так данные в QR и так горизонтально (Справо налево и вниз) распологаются. Может ты имел ввиду вертикально (Сверху вниз направо)? так в лоб сделать нельзя, но динамика этот вопрос решает.
Удачи. :=))#

P.S. IMHO QReport прекрасное средство для отчетов. Что бы про него не говорили. Как тут выразился на форуме один человек надо просто уметь его готовить...


 
cjiohobaji ©   (2003-07-21 06:08) [2]

Удалено модератором
Примечание: Личная переписка


 
Babay ©   (2003-07-21 06:38) [3]

Вот пример(вырезка основных моментов) одного из моих отчетов. Данные лежат в StringGrid моей формы. На форме отчета Есть QRBand1 заголовка и QRBand2 типа rbDetail по высоте равный высоте строки отчета. Вот код

var
frmReportTable: TfrmReportTable;
Count:Integer;

implementation


procedure TfrmReportTable.QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
Var I:Integer;
l,l1:TQrLabel;
s,s1:TQrShape;
left:Integer;
begin

.................

count:=0;

Left:=0;
for i:=1 to frmMain.stg.colcount-1 do begin
if frmMain.stg.ColWidths[i]>-1 then begin // скрытые столбики в отчет не идут

// это рамки ячеек заголовка
s:=TQrShape.Create(self);
s.Left:=Left;
s.Width:=frmMain.stg.ColWidths[i];// ширина клетки равна ширине столбика грида
s.Height:=20;s.Top:=40;
s.Pen.Width:=5;
s.Parent:=QRBand1;
// это рамки ячеек данных
s1:=TQrShape.Create(self);
s1.Parent:=QRBand2;
s1.Left:=Left;
s1.Width:=frmMain.stg.ColWidths[i];
s1.Height:=20;
// это лабельки заголовка таблицы
l:=TQrLabel.Create(self);
l.Parent:=QRBand1; l.AutoSize:=False;
l.Left:=Left+2;l.Width:=frmMain.stg.ColWidths[i]-3;
l.Top:=40+2;l.Alignment:=taCenter;
l.Caption:=frmMain.stg.Cells[i,0];
l.Transparent:=True;
l.Font.style:=l.Font.style+[fsBold];
// это лабельки для данных
l1:=TQrLabel.Create(self);
l1.Parent:=QRBand2; l1.AutoSize:=False;
l1.Left:=Left+2;l1.Width:=frmMain.stg.ColWidths[i]-3;
l1.Top:=2;
l1.Name:="L"+Inttostr(i); l1.Transparent:=True;

left:=Left+frmMain.stg.ColWidths[i];
end;
end;
end;

procedure TfrmReportTable.QuickRep1NeedData(Sender: TObject;
var MoreData: Boolean);
Var i:Integer;
l:TQRLabel;
begin
// Это расклада данных
for i:=1 to frmMain.stg.colcount-1 do begin
if frmMain.stg.ColWidths[i]>-1 then begin
L:=TQrLabel(FindComponent("l"+Inttostr(i)));
l.Caption:=frmMain.stg.Cells[i,count];
end;
end;
Inc(Count);
MoreData:=Count<frmMain.stg.RowCount;
end;

Работает довольно быстро. Хотя я не претендую на то что нету более хороших вариантов. Это так, как пример например. :=))#


 
cjiohobaji ©   (2003-07-21 07:40) [4]

Не могу понять что происходит в строчке:
L:=TQrLabel(FindComponent("l"+Inttostr(i)));

с точки зрения ООП?
что такое L(он вроде бы нигде не описан), (Проблема в том что я пишу на Builder"e т. е. мне надо понять логику.), и вроде бы потом мы его не используем нигде.

Был бы признателен если бы вы пояснили смысл, т. е. все время жизни одного Label"а ?
мы его создаём, даём имя, дальше непонятно
Заранее благодарен


 
Babay ©   (2003-07-21 07:53) [5]

L описано вот здесь смотри
Var
......
l:TQRLabel;// просто маленькая буква

в строке
L:=TQrLabel(FindComponent("l"+Inttostr(i)));

мы ищем лабель уже созданную ранее в процедуре QuickRep1BeforePrint там мы ей давали имя l1.Name:="L"+Inttostr(i);
а затем ее заполняем.

см хелп по FindComponent
L:=TQrLabel(... приведение типа к TQrLabel и присваивание указателя

а дальше смотри help по событию onNeedData для QR.
Еще посмотри примеры по QR поставляемые с билдером (надеюсь что они есть в поставке у Д точно есть) тама классный пример по этому делу есть. Я собственно с ним разобрался и все стало ясно как божий день. Удачи. Ежели че пиши... Помогу в силу своих знаний. (Но я пишу на Д так что необессудь...)


 
Babay ©   (2003-07-21 07:58) [6]

Удалено модератором
Примечание: Личная переписка


 
cjiohobaji ©   (2003-07-21 10:21) [7]

Большон спасибо


 
Константин Ёпрст   (2003-07-21 15:47) [8]

// это рамки ячеек заголовка
...
// это рамки ячеек данных
...
Выглядит просто ужасно :(

В том же FreeReport/FastReport всё это делается куда как нативнее... Хотя бы те же рамки не надо рисовать - они-часть любого объекта (хочешь - ставь, не хочешь - отключай).
Для формирования отчётов из программных данных есть tfruserdataset, для отчётов с неизвестным наперёд числом столбцов - CrossTab.
Вобщем-то всё это и в QR можно приготовить - но, извините, тратить бОльшю часть времени в разработке проекта на вот такое приготовление?
в фасте это проще, быстрее, а по скорости формирования и печати вообще равных нет. Сейчас QR как страшный сон вспоминаю :)


 
Просто Ёпрст   (2003-07-21 17:16) [9]

2 Константин Ёпрст & иже с ним

А можно в ванной спать - и не будет страшных снов.
А ещё можно приделать к велосипеду лыжи и кататься зимой.



Страницы: 1 вся ветка

Текущий архив: 2003.08.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
1-10170
Smok_er
2003-07-22 23:18
2003.08.04
Вызов Close в обработчике OnActivate


1-10239
xRay
2003-07-20 01:56
2003.08.04
TListView


3-10120
Vorobyev Sergey
2003-07-14 11:38
2003.08.04
Где в системных таблицах IB информация о текущих подключениях?


14-10439
nick-from
2003-07-14 17:38
2003.08.04
вчем отличия телефонов?


3-10095
LAMER Pro
2003-07-09 09:05
2003.08.04
Как часть транзакции сделать безоткатной?