Скрыть бенд если сумма по группе =0
Приветсвую.
Подскажите как можно решить данную задачу:
Есть набор данных. Есть групировка. GroupHeader и GroupFooter. Причем к футеру прицеплен ChildBand.
Это нужно потому, что GroupFooter считается сумма по одной формуле, а в Чилде по другой формуле.
В Чилде (под футером) нужно просуммировать данные по одному из полей, и если они равны нулю, то скрыть весь Чилд-бэнд.
Суммирую я конечно с помощью SUM. При этом я для получения суммы обращаюсь к мемо полю напрямую через свойство Value в событии AfterData. Т.е. идея в том, что в поле накапливается сумма, и когда она появляется в Мемо (на событии AfterData) я считываю ее, и если она равна нулю, то скрываю весь бэнд.
Почему я воспользовался Value ? А потому что когда я пытался в обработчике BeforePrint и AfterData memo поля то в результате получался NULL, вот такой код:
var
Va: Variant
begin
Va := <SUM(<frxDBReport."FieldA">, MasterData1)>;
ShowMessage (VarToStr (Va));
возвращает пустую строку.
Тогда я пошел по другому пути (таки через Value). Написал такой код в обработчике AfterData мемо поля:
ShowMessage (TfrxMemoView(Self).Value); Чтобы увидеть что там вообще
if TfrxMemoView(Self).Value > 0
then begin
Child4.Visible := True; -- Скрываем чилда
end
else Child4.Visible := False;
тут воообще меня поразил результат !!!!!!!!
А именно - на экран ОДИН раз вывелся 0, и все. И после подготовки отчета оказалось что все бэнды скрыты - даже те, у которых TfrxMemoView(Self).Value не нулевой !!!!!!
Т.е. такое чувство что скрипт отработался только один раз, увидел что сумма в первой группе получилась 0, скрыл бэнд и... и все.... больше не отрабатывался, а ведь я так понимаю он должен отрабатыватся каждый раз когда дял новой группы появляется сумма в данном мемо поле.
В общем я в тупике (((((
Помогите решить данную задачу... ХЕЕЕЕЕЛП.
Подскажите как можно решить данную задачу:
Есть набор данных. Есть групировка. GroupHeader и GroupFooter. Причем к футеру прицеплен ChildBand.
Это нужно потому, что GroupFooter считается сумма по одной формуле, а в Чилде по другой формуле.
В Чилде (под футером) нужно просуммировать данные по одному из полей, и если они равны нулю, то скрыть весь Чилд-бэнд.
Суммирую я конечно с помощью SUM. При этом я для получения суммы обращаюсь к мемо полю напрямую через свойство Value в событии AfterData. Т.е. идея в том, что в поле накапливается сумма, и когда она появляется в Мемо (на событии AfterData) я считываю ее, и если она равна нулю, то скрываю весь бэнд.
Почему я воспользовался Value ? А потому что когда я пытался в обработчике BeforePrint и AfterData memo поля то в результате получался NULL, вот такой код:
var
Va: Variant
begin
Va := <SUM(<frxDBReport."FieldA">, MasterData1)>;
ShowMessage (VarToStr (Va));
возвращает пустую строку.
Тогда я пошел по другому пути (таки через Value). Написал такой код в обработчике AfterData мемо поля:
ShowMessage (TfrxMemoView(Self).Value); Чтобы увидеть что там вообще
if TfrxMemoView(Self).Value > 0
then begin
Child4.Visible := True; -- Скрываем чилда
end
else Child4.Visible := False;
тут воообще меня поразил результат !!!!!!!!
А именно - на экран ОДИН раз вывелся 0, и все. И после подготовки отчета оказалось что все бэнды скрыты - даже те, у которых TfrxMemoView(Self).Value не нулевой !!!!!!
Т.е. такое чувство что скрипт отработался только один раз, увидел что сумма в первой группе получилась 0, скрыл бэнд и... и все.... больше не отрабатывался, а ведь я так понимаю он должен отрабатыватся каждый раз когда дял новой группы появляется сумма в данном мемо поле.
В общем я в тупике (((((
Помогите решить данную задачу... ХЕЕЕЕЕЛП.
Комментарии
ShowMessage ('Say Hello');
if (TfrxMemoView(Self).Value > 0) and (Engine.FinalPass)
then Child4.Visible := True
else Child4.Visible := False;
и пробовал с (not Engine.FinalPass)
Результат был один - мообщение появлялось только один раз
Я даже попробовал переставить местами
then Child4.Visible := True
else Child4.Visible := False;
т.е. я поменял местами True и False, чтобы хотя бы в первой группировке Чилд напечатался.... НО он не появился.... Я не понимаю что происходит ((((((((
Хелп...
В общем такое дело выяснил (я просто не знал, и не подумал сразу). Если у бэнда стоит Visible := False, то AfterData для мемки не вызывается...
Собственно решил проблему просто, я в обработчике BeforePrint чилду сделал Visible := TRue и AfterData сработал и скрипт там все корректно расчитал...
В общем проблема решилась - я сам виноват, не подумал...
Я просто думал что AfterData всегда отрабатывается и думал что код if then else прекрасно отработается. Но до ифа дело то даже и не доходило просто.