Готовые средства vs ручная реализация

отредактировано 15:49 Раздел: FastReport 2.xx VCL
Использовал Fast Reort v. 2.47

Есть отчет следующего вида:

груповая запись #1 (group header)

ключевое поле -> 1 запись #1 (master data) куча полей в кждой записи..
2 запись #2 (master data)
3 запись #3 (master data)
сумма(по групповым записям #1) (group footer)

груповая запись #2
1 запись #1 (master data)
2 запись #2 (master data)
3 запись #3 (master data)
сумма(по групповым записям #2)

* * * *

груповая запись #n
1 запись #1 (master data)
2 запись #2 (master data)
3 запись #3 (master data)
сумма(по групповым записям #n)

сумма(по всем груповым записям от 1 по #n) (summary)


Я создал его за пару минут накидав нужных бэндов.... но это еще не все...
требовалось дополнить этот отчет некторыми расчетами и расположить их в summary (см. ниже)

груповая запись #1 (group header)
1 запись #1 (master data) куча полей в каждой записи
2 запись #2 (master data)
3 запись #3 (master data)
сумма(по групповым записям #1) (group footer)

груповая запись #2
1 запись #1 (master data)
2 запись #2 (master data)
3 запись #3 (master data)
сумма(по групповым записям #2)

* * * *

груповая запись #n
1 запись #1 (master data) куча полей в каждой записи
2 запись #2 (master data)
3 запись #3 (master data)
сумма(по групповым записям #n)

summary:
1 сумма (запись #1, по всем группам)
2 сумма (запись #2, по всем группам)
3 сумма (запись #3, по всем группам)

1 среднее (запись #1, по всем группам)
2 среднее (запись #2, по всем группам)
3 среднее (запись #3, по всем группам)

сумма(по всем груповым записям от 1 по #n) (summary)


В общем то и здесь я выкрутился, ввел переменные, зависмые от номера записи... те. например
запись_1_поле_x, запись_2_поле_x, запись_3_поле_x

и в MEMO отвечающем за вывод х блоке begin - end написал скрипт групирующий по нужным признакам:


begin
if [OraQuery."ключевое поле"] = '1' then
запись_1_поле_x :=
запись_1_поле_x + [OraQuery."x"];

if [OraQuery."ключевое поле"] = '2' then
запись_2_поле_x :=
запись_2_поле_x + [OraQuery."x"];

if [OraQuery."ключевое поле"] = '3' then
запись_3_поле_x :=
запись_3_поле_x + [OraQuery."x"];

end

Соответсвенно в нужном месте в новых мемах вывожу эти перменные...
для средних еще делю на кол-во записей...

Основная проблема состоит в том, что полей в каждой такой записи от 50 до 100... и вводить на каждую таккую запись по 3 перменные это означает увеличить общее число от 150 до 300...... Уж очень не хочется делать такое кол-во обработчиков и внизу лепить в три ряда мемы с этими перменными...

А теперь вопрос..... Может все можно сделать намного проще... ????


Маленький пример

объект 1
час 1 Парам 1 Парам 2 Парам n
1 4 2 10
2 7 3 22
3 2 4 31
13 9 63

час 2 Парам 1 Парам 2 Парам n
1 4 0 10
2 0 3 22
3 2 4 0
6 7 32

час 3 Парам 1 Парам 2 Парам n
1 1 3 4
2 2 3 5
3 3 3 10
6 9 19

Итого по 1 9 5 24
2 9 9 54
3 7 11 41
25 25 119

средние
1 3
2 3 и тп и тд...
3 2,33


колво строк за кждый час всегда 3.... а вот часов может быть 24 ;-)))

С наилучшими пожеланиями, Вячеслав.

Комментарии

  • отредактировано 15:49
    Попробуй использовать массивы:
    begin
    запись_поле_x[OraQuery."ключевое поле"] :=
    запись_поле_x[OraQuery."ключевое поле"] +[OraQuery."x"];
    end;
  • отредактировано 15:49
    Массивы лишь уменшать кол-во строк кода в блоках begin - end в каждом обработчике всех memo объектов... Но кол-во memo от этого не уменьшается... Все равно в каждом из них необходимо написать свой обработчик, а затем подсчет вывести в новом мемо..... короче рутина....

    Я думал, может есть способ подсчитаь автоматом сумарные сгруппированые по 1, 2,3 и средние и вывести их в каком то бэнде.... те обойтись без ручных программных вставок...

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.