Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
3-10101
WDenis
2003-07-11 15:31
2003.08.04
Паковка таблицы через ADO


1-10166
Прохожий
2003-07-22 10:33
2003.08.04
Исключение неправельных адресов E-Mail


14-10436
Zn
2003-07-17 18:20
2003.08.04
Почему приложения Microsoft загружаются быстрее?


3-10146
Вит
2003-07-11 16:40
2003.08.04
Здравствуйте, мастера. Вопрос по хранимой процедуре


14-10435
EvgeniyR
2003-07-17 11:54
2003.08.04
Отправка SMS-сообщений





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский