Сумма в заголовках
starcomputer
Украина, Донецк
Как получить сумму в заголовках вложенных групп ?
Есть несколько групп, каждая из которых является подгруппой другой:
Группа А:
Подгруппа А.А:
Подгруппа А.А.А:
Подгруппа Б.А:
Подгруппа Б.А.А:
и т.д.
Так вот что получается: если использовать массивы для каждой группы, то получается, что для самой верхней группы в иерархии все считается правильно, а для вложенных групп - полный бред! Хотя футеры считаются верно.
Плиз, кто сталкивался подскажите, что делать !!!!!
Есть несколько групп, каждая из которых является подгруппой другой:
Группа А:
Подгруппа А.А:
Подгруппа А.А.А:
Подгруппа Б.А:
Подгруппа Б.А.А:
и т.д.
Так вот что получается: если использовать массивы для каждой группы, то получается, что для самой верхней группы в иерархии все считается правильно, а для вложенных групп - полный бред! Хотя футеры считаются верно.
Плиз, кто сталкивался подскажите, что делать !!!!!
Комментарии
Если футеры для вложенных групп считаются правильно, дак значит ты так написал запись этих суммы в массив !!!
Я тебе уже всё разжевал как это пишется - теперь ещё и переварить это всё за тебя ? )
Рассказываю:
Соответсвенно на GroupHeader кладём текст с
begin
GroupID:=0;
end;
GroupHeader.OnBeforePrint: // ДЛЯ КАЖДОГО GroupHeader
begin
Inc(GroupID);
Visible:=FinalPass;
if not Visible then
GroupSum[GroupID]:=0; //обнуляем сумму на первом проходе
end;
GroupFooter.OnBeforePrint: // ДЛЯ КАЖДОГО GroupFooter
begin
if not FinalPass then
GroupSum[GroupID]:=SUM([Вес]); //записываем сумму на первом проходе
Visible:=False;
end;
Попробовал, 0 - во всех заголовках. Но все равно спасибо за разжевывание !
Эх, молодость, молодость - даже готовый код в отчёт встроить нормально не могут )
Пример брал из демки.
Так вот, в самой верхней группе в заголовке все считается нормально, в остальных группах тоже считает, но неправильно !!!
Буду чрезвычайно рад, если укажут где ошибка. Ведь странно, скрипт для всех групп одинаков а работает по разному.
Как реализовать аналогичную идею в кросс-таб отчёте на основе кросс-бендов? Там нужно использовать двумерный массив, который Fast Report НЕ ПОДДЕРЖИВАЕТ!!!
ИДЕИ?
Я могу тебе сказать почему у тебя лажа ...
Потому что PostID у тебя НЕУНИКАЛЬНЫЙ в разрезе подгрупп !!!
Например:
Группа 1 (Potr=1)
-Подгруппа 1 (Post=1)
--Вес=1
--Вес=2
Группа 2 (Potr=2)
-Подгруппа 1 (Post=1)
--Вес=5
--Вес=6
Ну и ессно в PostSum[1] ты получишь сумму ПО ВСЕМ потребителям = 1+2+5+6
Я ведь тебе писал, что тебе нужно заводить УНИКАЛЬНЫЙ НОМЕР ГРУППЫ (уввеличивать его на КАЖДОМ GroupHeader-e) и писать в массив тоже с этим индексом ...
На четвёртый раз объяснять сил уже не будет )
Это так?
По поводу двухмерных массивов - раскладывай двухмерный индекс в одномерный. Индекс по Х умножаешь на какую-нибудь константу, которая всегда больше елементов по X ...
Ну не знаешь кол-во элементов тоже не проблема )
Индекс в массиве может быть строковый ...
Собираешь индекс как Str(IndexX)+';'+Str(IndexY) ...
Хм...
Я это как-то упустил из виду...
Благодарю за подсказку! Возможно, это решение моих проблем!
Не получил
В каждой группе Potr есть один Post который повторяется во всех группах Potr.
По идее (насчет неуникальных индексов ты прав !!!) я должен получить везде у этого Post одну и ту-же сумму (ну я бы это сразу увидел и рыл бы ) но сумма этого Post в каждой из групп Potr разная !!!
Увы НЕТ !
Ну вот, попробовал твой вариант, теперь наткнулся на другие грабли
Если применить такую конструкцию к первой группе (самой верхней) то все OK
А если я добавляю то-же в подгруппу (первую вниз) то правилбно считается уже в ней, а в верхней группе выдает НОЛЬ.
Если добавляю скрипты в Header - Footer еще более низкой подгруппы то все повторяется, т.е. в ней все считает, в верхних по отношению к ней - опять 0.000
Ну подскажи еще раз, что уже тут не так, будь человеком
С уважением, Сергей.
Читаем ВНИМАТЕЛЬНО !!!
Кол-во GroupHeader-ов и GroupFooter-ов ДОЛЖНО СОВПАДАТЬ !!!
Значит ли это, что я должен прописать скрипты в тех Header - Footer в которых я ничего не подсчитываю.
Если нет, то тогда я вообще ничего не пойму.
Сейчас скрипты прописаны в основной группе и в первой к низу о нее.
Естественно получается 2 Header'а и 2 Footer'а.
Вот только что переключился и проверил.
Я ведь как сделал:
Прописал скрипты в Header - Footer основной группы (самой верхней) - заработало .
Прописал те-же скрипты в группу ниже (прсто скопировал - вставил) - начало все правильно считаться по ней, а в основной стало - 0.000
Inc(GroupID) нужно делать в GroupFooter-е на первом проходе, а не Header-е на втором !!!
Определить в какую сразу не могу, у меня при таких скриптах почему-то пропали нафиг все футеры .
Кстати в первом варианте я провел эксперимент:
Вместо обнуления суммы на первом проходе записывал: В результате получаю сумму:
- первой группы - 1.00
- второй группы - 2.00
.................................
.................................
- последней группы - все ОК !
(группы нумерованы в иерархическом порядке)
Так что я думаю дело не в индексах а в проходах !
(может кому пригодиться )
Это ответ присланный VANO за что ему огромное спасибо !
Но работает нормально, только в случае ОДНОЙ группы !
Если же есть вложенные подгруппы, то нужно GroupID и соответственно GroupSum[] создавать для КАЖДОЙ группы, естественно с разными именами, ну хотя бы GroupID_1 и т.д.
И соответственно в скриптах Header - Footer группы прописывать ЕЕ переменные.
Тогда все работает правильно
Не знаю, с чем это связано, наверно порядок первого и финального прохода FR 2.51 по группам разный.
Если форум читают разработчики, может что-нибудь подскажут ???
Большое спасибо всем, принявшим участие в обсуждении !!!
С уважением,