![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Очет [D7, Win2k]
Toshanius © (2004-08-18 18:24:00)Нужно сделать не очень сложный отчет, в котором данные берутся не из таблицы, а скажем из массива. Не подскажите, что и как лучше всего использовать. Заранее благодарен.
jack128 (2004-08-19 21:48:00) [1]
> Что дальше?
э-э-э.. Я обычно делаю так:
1) Открываю демку, для просмотра возможностей компонента
2)Просматриваю список Published свойств/событий, часто уже по названию помятно, зачем нужно каждое конкретное свойство.
3)Жму F1(если хелп к компоненту уже инсталирорван в IDE) или запускаю хелп вручную и читаю...
4) По неясным из хелпа моментам провожу эксперементы или ищу оналошичную ситуацию в демке.
5) Решаю с помощью компонента мою задачу.
> Имелось ввиду, что в таблице все данные наглядней. (Упорядочивает
> всмысле визуально, все красиво и четко.)
вот хоть убей не пойму, как слив данных в датасет способствует красивости отчета.. Может, конечно, в семерке в Qrep добавили, что то особенное для dataset - отчетов, но в пятерке разницы АБСОЛЮТНО никакой.
Toshanius (2004-08-19 21:22:00) [2]>Не обижайся, но это уж как ТЫ написал, так оно и выглядит.
А на что обижаться? Истину глаголишь!
>На алголисте полтора дсятка видов сортировки - на любой вкус.
С сортировками у меня все впорядке, я просто не аккуратно высказался.
Имелось ввиду, что в таблице все данные наглядней. (Упорядочивает всмысле визуально, все красиво и четко.) Это впоследствии очень нужно пользователю приложения.
>для начала скачать RxLib. Но для D7, а то и для D6(точно не >помню) официальной версии не было. Можно посмотреть в сторону >JVCL - RX вошла в эту библиотеку..
У меня уже установлен RxLib для D7.
Что дальше?
KSergey (2004-08-19 21:13:00) [3]> [10] TUser © (18.08.04 22:16)
> Жаль, что QXP нельзя так юзать
Кто сказал?
Буквально так - нет.
Но формировать что хочешь (в рамках позволенного данной прогой) - сколько угодно.
jack128 (2004-08-19 21:04:00) [4]
> Как - то все коряво...
Не обижайся, но это уж как ТЫ написал, так оно и выглядит.
> Ни что так не упорядочивает данные как таблица
На алголисте полтора дсятка видов сортировки - на любой вкус.
> Если можно поподробнее, как это сделать?
для начала скачать RxLib. Но для D7, а то и для D6(точно не помню) официальной версии не было. Можно посмотреть в сторону JVCL - RX вошла в эту библиотеку..
Toshanius (2004-08-19 20:42:00) [5]Использовал событие OnNeedData. Загнал все данные в отчет. Все работает нормально, вот только нет в жизни счатья. Как - то все коряво...
Ни что так не упорядочивает данные как таблица. Какой возможен вариант, чтобы данные были в табличном виде.
>clickmaker © (18.08.04 19:10) [1]
>А вообще-то, чтоб не париться, можно данные из массива слить во >временный датасет в памяти (RxMemoryData из rxlib подойдет) и >юзать стандартные отчеты, коих туева хуча.
Если можно поподробнее, как это сделать?
QuasiLamo (2004-08-19 06:30:00) [6]блин, поторопился
><цикл по количеству данных(строк)>
> begin
> st.Add('<tr>');
> for nIdx := 0 to adataset.FieldCount - 1 do
> begin
> if (nidx = 0) and
>(adataset.Fields[nIdx].FieldName = 'Дата') then
> begin
> st.Add('<td width=500 valign=top
> style=''width:95.75pt;border:solid windowtext
>1.0pt;''>');
>
>st.Add(datetostr(adataset.Fields[nIdx].AsDateTime));
> st.Add('</td>');
> end else begin
> st.Add('<td width=500 valign=top
> style=''width:95.75pt;border:solid windowtext
>1.0pt;''>');
> st.Add(adataset.Fields[nIdx].AsString);
> st.Add('</td>');
> end;
> end;
> st.Add('</tr>');
> end;
> <конец цикла>
<цикл по количеству данных(строк)>
begin
st.Add('<tr>');
for nIdx := 0 to <количество столбцов> do
begin
st.Add('<td width=500 valign=top style=''width:95.75pt;border:solid windowtext 1.0pt;''>');
st.Add(<данные>);
st.Add('</td>');
end;
st.Add('</tr>');
end;
<конец цикла>
><цикл по количеству данных(строк)>
> begin
> st.Add('<tr>');
> for nIdx := 0 to adataset.FieldCount - 1 do
> begin
> if (nidx = 0) and
>(adataset.Fields[nIdx].FieldName = 'Дата') then
> begin
> st.Add('<td width=500 valign=top
> style=''width:95.75pt;border:solid windowtext
>1.0pt;''>');
>
>st.Add(datetostr(adataset.Fields[nIdx].AsDateTime));
> st.Add('</td>');
> end else begin
> st.Add('<td width=500 valign=top
> style=''width:95.75pt;border:solid windowtext
>1.0pt;''>');
> st.Add(adataset.Fields[nIdx].AsString);
> st.Add('</td>');
> end;
> end;
> st.Add('</tr>');
> end;
> <конец цикла>
QuasiLamo (2004-08-19 06:27:00) [7]
>for nIdx := 0 to <количество столбцов> do
> begin
> st.Add('<td width=500 valign=top
> style=''width:95.75pt;border:solid windowtext
>1.0pt;''>');
> st.Add('' + <шапка таблицы>+ '');
> st.Add('</td>');
> end;
блин теги жирности сожрало. Должно быть так
st.Add('<_b_>' + <шапка таблицы>+ '</_b_>');
(без подчеркиваний)
QuasiLamo (2004-08-19 06:24:00) [8]я сделал так. заранее заготовил html страницу , в которой вместо заголока и таблицы были выражения типа ###title### и ###table###
st := TStringList.Create;
struct := TStringList.Create;
//формирование html-страницы
struct.LoadFromFile('reportstruct.htm'); // грузим скелет страницы с подстановочными символами
//формирование html-кода таблицы
//шапка
st.Add('<table border=1 cellspacing=0 cellpadding=0 style=''border-collapse:collapse;border:none''>');
st.Add('<tr>');
for nIdx := 0 to <количество столбцов> do
begin
st.Add('<td width=500 valign=top style=''width:95.75pt;border:solid windowtext 1.0pt;''>');
st.Add(' ' + <шапка таблицы>+ '');
st.Add('</td>');
end;
st.Add('</tr>');
//конец шапки
//данные
<цикл по количеству данных(строк)>
begin
st.Add('<tr>');
for nIdx := 0 to adataset.FieldCount - 1 do
begin
if (nidx = 0) and (adataset.Fields[nIdx].FieldName = 'Дата') then
begin
st.Add('<td width=500 valign=top style=''width:95.75pt;border:solid windowtext 1.0pt;''>');
st.Add(datetostr(adataset.Fields[nIdx].AsDateTime));
st.Add('</td>');
end else begin
st.Add('<td width=500 valign=top style=''width:95.75pt;border:solid windowtext 1.0pt;''>');
st.Add(adataset.Fields[nIdx].AsString);
st.Add('</td>');
end;
end;
st.Add('</tr>');
end;
<конец цикла>
st.Add('</table>');
//конец данные
//заменяем подстановочные выражения на нужные строки
//заголовок
struct.Text := StringReplace(struct.Text, '###atitle###', atitle, [rfIgnoreCase, rfReplaceAll]);
//сформированная таблица
struct.Text := StringReplace(struct.Text, '###atable###', st.Text, [rfIgnoreCase, rfReplaceAll]);
//сохраняем
struct.SaveToFile('temp.html');
// для печати
// winexec('rundll32.exe C:\WINDOWS\System32\mshtml.dll,PrintHTML "C:\sklad\temp.html"',sw_normal);
//для предварительного просмотра c возможностью печати
winexec('"C:\Program Files\Internet Explorer\IEXPLORE.EXE" C:\sklad\temp.html', sw_normal);
//высвобождаем память
struct.Free;
st.Free;
end;
Zacho (2004-08-18 22:41:00) [9]YurikGL © (18.08.04 22:32) [12]
Ну для этого действительно стоит испльзовать что-то более другое, чем генераторы отчетов. Что - не знаю :) не было у меня таких задач. Навскидку могу предложить какой-нибудьCAD :)
YurikGL (2004-08-18 22:32:00) [10]
> Zacho © (18.08.04 22:24) [11]
В моем случае речь шла о ГОСТированной технической документации с рамками и т.п.
Zacho (2004-08-18 22:24:00) [11]TUser © (18.08.04 22:16) [10]
А нафига для отчетов юзать верстальные программы ???
Генераторы отчетов - самое то, специально для этого и делались. А системы верстки - делались малость для другого. Зачем отчет, например, о торговых наценках магазина за месяц делать в PМ ? Чтобы "круто" выглядел ? Чтобы в газете напечатать ? :-)
TUser (2004-08-18 22:16:00) [12]
> для формирования серьезных документов, а не чернового списка
> записей нужно пользовать Ворд/Ексель
Жаль, что QXP/PM нельзя так юзать
Anatoly Podgoretsky (2004-08-18 22:16:00) [13]Для большинства генераторов отчетов, базы это дополнительное средство, хотя с виду кажется наоборот.
Zacho (2004-08-18 22:13:00) [14]YurikGL © (18.08.04 22:01) [7]
Согласен, что "универсальнее и мощнее" (кстати, могу ещё напомнить о Formula One), но мне пока что вполне хватало FastReport (в том числе для более-менее сложных отчетов типа "cross-report", "master-detail-subdetail-subsubdetail" и т.п.). Просто, быстро, удобно и красиво :)
Кстати, FR тоже можно и без БД использовать.
YurikGL (2004-08-18 22:01:00) [15]Пробовал в свое время пользовать RAVE дык даже не смог нормально границы таблицы сделать. А о том, что мне колонтитул нужен был вообще молчу. Из этого сделал вывод, что, как правило, для формирования серьезных документов, а не чернового списка записей нужно пользовать Ворд/Ексель. Оно гораздо универсальнее и мощьнее.
clickmaker (2004-08-18 20:14:00) [16]
> [5] Anatoly Podgoretsky © (18.08.04 20:05)
> clickmaker © (18.08.04 19:46) [4]
> Зачем :-)
habit is a second nature, как говорят англичане :)
Anatoly Podgoretsky (2004-08-18 20:05:00) [17]clickmaker © (18.08.04 19:46) [4]
Зачем :-)
clickmaker (2004-08-18 19:46:00) [18]
> [2] jack128 © (18.08.04 19:20)
А, сорри, прохлопал OnNeedData.
Ну да, вариант, но можно и в датасет слить, так вроде наглядней
clickmaker (2004-08-18 19:43:00) [19]
> [2] jack128 © (18.08.04 19:20)
> 2 clickmaster
> Для того что использовать стандартные генераторы отчетов,
> можно и не сливать данные во временный датасет ;-)
Да? Енто как? Я имел в виду отчеты типа QuickReport
jack128 (2004-08-18 19:20:00) [20]2 clickmaster
Для того что использовать стандартные генераторы отчетов, можно и не сливать данные во временный датасет ;-)
2 Toshanius
Для Quick Report см событие OnNeedData..Если решишь использовать Rave, на www.podgoretsky.com вроде была дока на русском..