Текущий архив: 2004.09.05;
Скачать: CL | DM;
Вниз
Очет Найти похожие ветки
← →
Toshanius (2004-08-18 18:24) [0]Нужно сделать не очень сложный отчет, в котором данные берутся не из таблицы, а скажем из массива. Не подскажите, что и как лучше всего использовать. Заранее благодарен.
← →
clickmaker © (2004-08-18 19:10) [1]Excel или Word, TExcelApplication и TWordApplication соотвессно. Описываешь шаблон - и вперед и с песней.
А вообще-то, чтоб не париться, можно данные из массива слить во временный датасет в памяти (RxMemoryData из rxlib подойдет) и юзать стандартные отчеты, коих туева хуча
← →
jack128 © (2004-08-18 19:20) [2]2 clickmaster
Для того что использовать стандартные генераторы отчетов, можно и не сливать данные во временный датасет ;-)
2 Toshanius
Для Quick Report см событие OnNeedData..Если решишь использовать Rave, на www.podgoretsky.com вроде была дока на русском..
← →
clickmaker © (2004-08-18 19:43) [3]
> [2] jack128 © (18.08.04 19:20)
> 2 clickmaster
> Для того что использовать стандартные генераторы отчетов,
> можно и не сливать данные во временный датасет ;-)
Да? Енто как? Я имел в виду отчеты типа QuickReport
← →
clickmaker © (2004-08-18 19:46) [4]
> [2] jack128 © (18.08.04 19:20)
А, сорри, прохлопал OnNeedData.
Ну да, вариант, но можно и в датасет слить, так вроде наглядней
← →
Anatoly Podgoretsky © (2004-08-18 20:05) [5]clickmaker © (18.08.04 19:46) [4]
Зачем :-)
← →
clickmaker © (2004-08-18 20:14) [6]
> [5] Anatoly Podgoretsky © (18.08.04 20:05)
> clickmaker © (18.08.04 19:46) [4]
> Зачем :-)
habit is a second nature, как говорят англичане :)
← →
YurikGL © (2004-08-18 22:01) [7]Пробовал в свое время пользовать RAVE дык даже не смог нормально границы таблицы сделать. А о том, что мне колонтитул нужен был вообще молчу. Из этого сделал вывод, что, как правило, для формирования серьезных документов, а не чернового списка записей нужно пользовать Ворд/Ексель. Оно гораздо универсальнее и мощьнее.
← →
Zacho © (2004-08-18 22:13) [8]YurikGL © (18.08.04 22:01) [7]
Согласен, что "универсальнее и мощнее" (кстати, могу ещё напомнить о Formula One), но мне пока что вполне хватало FastReport (в том числе для более-менее сложных отчетов типа "cross-report", "master-detail-subdetail-subsubdetail" и т.п.). Просто, быстро, удобно и красиво :)
Кстати, FR тоже можно и без БД использовать.
← →
Anatoly Podgoretsky © (2004-08-18 22:16) [9]Для большинства генераторов отчетов, базы это дополнительное средство, хотя с виду кажется наоборот.
← →
TUser © (2004-08-18 22:16) [10]
> для формирования серьезных документов, а не чернового списка
> записей нужно пользовать Ворд/Ексель
Жаль, что QXP/PM нельзя так юзать
← →
Zacho © (2004-08-18 22:24) [11]TUser © (18.08.04 22:16) [10]
А нафига для отчетов юзать верстальные программы ???
Генераторы отчетов - самое то, специально для этого и делались. А системы верстки - делались малость для другого. Зачем отчет, например, о торговых наценках магазина за месяц делать в PМ ? Чтобы "круто" выглядел ? Чтобы в газете напечатать ? :-)
← →
YurikGL © (2004-08-18 22:32) [12]
> Zacho © (18.08.04 22:24) [11]
В моем случае речь шла о ГОСТированной технической документации с рамками и т.п.
← →
Zacho © (2004-08-18 22:41) [13]YurikGL © (18.08.04 22:32) [12]
Ну для этого действительно стоит испльзовать что-то более другое, чем генераторы отчетов. Что - не знаю :) не было у меня таких задач. Навскидку могу предложить какой-нибудьCAD :)
← →
QuasiLamo © (2004-08-19 06:24) [14]я сделал так. заранее заготовил 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;
← →
QuasiLamo © (2004-08-19 06:27) [15]
>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:30) [16]блин, поторопился
><цикл по количеству данных(строк)>
> 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;
> <конец цикла>
← →
Toshanius (2004-08-19 20:42) [17]Использовал событие OnNeedData. Загнал все данные в отчет. Все работает нормально, вот только нет в жизни счатья. Как - то все коряво...
Ни что так не упорядочивает данные как таблица. Какой возможен вариант, чтобы данные были в табличном виде.
>clickmaker © (18.08.04 19:10) [1]
>А вообще-то, чтоб не париться, можно данные из массива слить во >временный датасет в памяти (RxMemoryData из rxlib подойдет) и >юзать стандартные отчеты, коих туева хуча.
Если можно поподробнее, как это сделать?
← →
jack128 © (2004-08-19 21:04) [18]
> Как - то все коряво...
Не обижайся, но это уж как ТЫ написал, так оно и выглядит.
> Ни что так не упорядочивает данные как таблица
На алголисте полтора дсятка видов сортировки - на любой вкус.
> Если можно поподробнее, как это сделать?
для начала скачать RxLib. Но для D7, а то и для D6(точно не помню) официальной версии не было. Можно посмотреть в сторону JVCL - RX вошла в эту библиотеку..
← →
KSergey © (2004-08-19 21:13) [19]> [10] TUser © (18.08.04 22:16)
> Жаль, что QXP нельзя так юзать
Кто сказал?
Буквально так - нет.
Но формировать что хочешь (в рамках позволенного данной прогой) - сколько угодно.
← →
Toshanius (2004-08-19 21:22) [20]>Не обижайся, но это уж как ТЫ написал, так оно и выглядит.
А на что обижаться? Истину глаголишь!
>На алголисте полтора дсятка видов сортировки - на любой вкус.
С сортировками у меня все впорядке, я просто не аккуратно высказался.
Имелось ввиду, что в таблице все данные наглядней. (Упорядочивает всмысле визуально, все красиво и четко.) Это впоследствии очень нужно пользователю приложения.
>для начала скачать RxLib. Но для D7, а то и для D6(точно не >помню) официальной версии не было. Можно посмотреть в сторону >JVCL - RX вошла в эту библиотеку..
У меня уже установлен RxLib для D7.
Что дальше?
← →
jack128 © (2004-08-19 21:48) [21]
> Что дальше?
э-э-э.. Я обычно делаю так:
1) Открываю демку, для просмотра возможностей компонента
2)Просматриваю список Published свойств/событий, часто уже по названию помятно, зачем нужно каждое конкретное свойство.
3)Жму F1(если хелп к компоненту уже инсталирорван в IDE) или запускаю хелп вручную и читаю...
4) По неясным из хелпа моментам провожу эксперементы или ищу оналошичную ситуацию в демке.
5) Решаю с помощью компонента мою задачу.
> Имелось ввиду, что в таблице все данные наглядней. (Упорядочивает
> всмысле визуально, все красиво и четко.)
вот хоть убей не пойму, как слив данных в датасет способствует красивости отчета.. Может, конечно, в семерке в Qrep добавили, что то особенное для dataset - отчетов, но в пятерке разницы АБСОЛЮТНО никакой.
Страницы: 1 вся ветка
Текущий архив: 2004.09.05;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.023 c