Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Очет [D7, Win2k]


Страницы:   1 2

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 вроде была дока на русском..


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо