Скрыть Memo в подвале отчета
В подвале отчета выводится информация в виде этикетки (две колонки Memo):
Поле1: ЗначениеПоля1
Поле2: ЗначениеПоля2
Поле3: ЗначениеПоля3
Поле4: ЗначениеПоля4
Поле5: ЗначениеПоля5
Если значение какого-либо поля равно 0, то это поле и заголовок поля слева надо скрыть. При этом нужно, чтобы нижележащие поля поднялись вверх.
Например, ЗначениеПоля2=0 и ЗначениеПоля4=0, тогда отчет должен выглядеть так:
Поле1: ЗначениеПоля1
Поле3: ЗначениеПоля3
Поле5: ЗначениеПоля5
В скрипте в событии ReportSummary1OnBeforePrint я прописал код для сокрытия Мемо (свойство HideZeros скрывает только Мемо со значением, а надо скрыть еще и заголовок слева поля):
if <Таблица1."ЗначениеПоля2">=0 then begin
Memo3.Visible:=false;
Memo4.Visible:=false;
end;
if <Таблица1."ЗначениеПоля4">=0 then begin
Memo7.Visible:=false;
Memo8.Visible:=false;
end;
Поля скрываются, но остаются пустые строки:
Поле1: ЗначениеПоля1
Поле3: ЗначениеПоля3
Поле5: ЗначениеПоля5
Пробовал банд сделать растягиваемым и цеплять Child на каждое поле, но все равно промежутки. Child и вообще band работают только на "растягивание" вниз? Т.е. увеличиваться по высоте могут, а уменьшаться нет?
Вопрос: как можно сделать без пустых строк без лишнего кода?
Поле1: ЗначениеПоля1
Поле2: ЗначениеПоля2
Поле3: ЗначениеПоля3
Поле4: ЗначениеПоля4
Поле5: ЗначениеПоля5
Если значение какого-либо поля равно 0, то это поле и заголовок поля слева надо скрыть. При этом нужно, чтобы нижележащие поля поднялись вверх.
Например, ЗначениеПоля2=0 и ЗначениеПоля4=0, тогда отчет должен выглядеть так:
Поле1: ЗначениеПоля1
Поле3: ЗначениеПоля3
Поле5: ЗначениеПоля5
В скрипте в событии ReportSummary1OnBeforePrint я прописал код для сокрытия Мемо (свойство HideZeros скрывает только Мемо со значением, а надо скрыть еще и заголовок слева поля):
if <Таблица1."ЗначениеПоля2">=0 then begin
Memo3.Visible:=false;
Memo4.Visible:=false;
end;
if <Таблица1."ЗначениеПоля4">=0 then begin
Memo7.Visible:=false;
Memo8.Visible:=false;
end;
Поля скрываются, но остаются пустые строки:
Поле1: ЗначениеПоля1
Поле3: ЗначениеПоля3
Поле5: ЗначениеПоля5
Пробовал банд сделать растягиваемым и цеплять Child на каждое поле, но все равно промежутки. Child и вообще band работают только на "растягивание" вниз? Т.е. увеличиваться по высоте могут, а уменьшаться нет?
Вопрос: как можно сделать без пустых строк без лишнего кода?
Комментарии
if <Таблица1."ЗначениеПоля2">=0 then
Child2.Visible:=false;
if <Таблица1."ЗначениеПоля4">=0 then
Child4.Visible:=false;
Проще то уже никак не сделать? Без Child, а то у меня шаблоны отчетов редактируются юзерами и устанешь их обучать так делать.
Child2.Visible := <Таблица1."ЗначениеПоля2"> <> 0;
Приходится в дизайнере делать высоту страницу больше, чтобы разместить все detalband на одной странице, а потом возвращать нормальную высоту страницы.
Если можно выводить данные в одном мемо, то можно написать свою функцию
Кстати, и в документации не встречал такого параметра, хотя может невнимательно читал.
Посмотрел этот пример, он без надписей полей, простое идет перечисление значений полей. С надписями код немного усложнится, хотя это и непринципиально конечно. В целом код функции может пригодится в случае, если невозможно воткнуть childband, например если слева объект какой-нибудь, хотя тут поможет суботчет. Так что возьмем идею на заметку, спасибо.
На будущее раработчикам fastreport стоило бы предусмотреть скрывать неспользуемые строки и как-то улучшить работу смещения мемо без использования child и скриптов.