Проблема с Header и Footer
Собственно имеется отчет, у которого сводные данные по группам выводятся не после детальных данных, а перед ними:
Всего группа 1:
первый результат в группе 1
второй результат в группе 1
третий результат в группе 1
Всего группа 2:
первый результат в группе 2
второй результат в группе 2
Примерно так.
- Создал MasterData
- Создал GroupHeader, назначил выражение для объединения. Допустим идентификатор группы.
- Далее сделал GroupFooter, в него добавил текстовое поле с содержимым:
Предпросмотр отчета показыает, что все отлично, итог считается правильно по группам.
Осталось понять как можно его записать в GroupHeader.
Как вариант попробовал так:
В итоге данные из футера перемещаются в хедер следующей группы, а не текущей!
Кто-нибудь умеет аггрегированные данные вставлять в хедер?
Всего группа 1:
первый результат в группе 1
второй результат в группе 1
третий результат в группе 1
Всего группа 2:
первый результат в группе 2
второй результат в группе 2
Примерно так.
- Создал MasterData
- Создал GroupHeader, назначил выражение для объединения. Допустим идентификатор группы.
- Далее сделал GroupFooter, в него добавил текстовое поле с содержимым:
[SUM(<AQOQuery1."QTY">,MasterData1)]
Предпросмотр отчета показыает, что все отлично, итог считается правильно по группам.
Осталось понять как можно его записать в GroupHeader.
Как вариант попробовал так:
procedure IllnessFooterMemoOnAfterData(Sender: TfrxComponent);
begin
IlnessHeaderMemo.Text := IllnessFooterMemo.Text;
end;
В итоге данные из футера перемещаются в хедер следующей группы, а не текущей!
Кто-нибудь умеет аггрегированные данные вставлять в хедер?
Комментарии
Попробовал использовать второй способ и ... ничего не получилось. Ошибка во время выполнения оператора в теле if:
Были oбнapyжeны cлeдyющиe oшибки:
He мoгy пpeoбpaзoвaть вapиaнт типa (String) в тип (Currency)
Попробую идентификатор преолбразовать в строку: Ошибка:
Были oбнapyжeны cлeдyющиe oшибки:
He мoгy пpeoбpaзoвaть вapиaнт типa (Null) в тип (OleStr)
Heизвecтнaя пepeмeннaя или пoлe БД: 1
По сути
Get(IntToStr(<Razdel2_AQ."IG_ID">)) дает Null
а
IntToStr(<Razdel2_AQ."IG_ID">) - '1',
то есть преобразованное число.
Пусть это неправильный идентификатор, попробуй добавить префикс: Ошибка:
Были oбнapyжeны cлeдyющиe oшибки:
He мoгy пpeoбpaзoвaть вapиaнт типa (Null) в тип (OleStr)
Heизвecтнaя пepeмeннaя или пoлe БД: var1
При этом если смотреть сразу значение переменной после присваивания, то все на месте!: Последний оператор нужен чтобы проверить в режиме отладки. Get возвращает '2222', так почему в другом вызове он ее не возвращает?
Господа, ткните меня носом в ошибку!
я попробовал в последней строке вычислить не для текущего значения IG_ID значение переменной, а для следующего (просто запомнил второе значение). В итоге там находится '2222', как мы и присваивали жестко. И для третьего и т.д., а для первого значения там Null. Это баг? Версия 3.17.
И какие кроме Engine переменные еще определены? И где об этом найти информацию? А то гадать как-то не очень продуктивно получается...
Спасибо.
Начал новый отчет, и получил следующее:
SQL:
Создал все по руководству, назначил события:
И ... все заработало. Сейчас попробую выяснить почему такая ошибка появляется в реальном отчете.
Но остался вопрос, почему не работало, когда был идентификатор элемента? Ведь если переменная создана и там было значение '2222', то в Null оно не должно "просто так выставляться". По крайней мере в GroupHeader4OnBeforePrint выдавал мне Null (функция Get). Идентификаторы то одни и теже, а порядок правильный (GroupFooter1OnBeforePrint а затем GroupHeader4OnBeforePrint). В общем, тут вопрос остается открытый.