Блог Александра Божко
Архивы
Рубрики
Поделись с другими!
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Создание отчётов в приложениях никогда не относилось к категории моих любимых занятий. Тем не менее, так или иначе, этим приходится заниматься. В своем рабочем проекте, о котором я уже не раз рассказывал, я перевёл практически все отчеты с Rave на FastReport. Последний инструмент сейчас является безусловным лидером “отчётостроения” и если есть необходимость поддерживать проект в управляемом состоянии, то подобное преобразование просто необходимо выполнить. Естественно, при этом хотелось максимально эффективно использовать возможности FastReport и оптимизировать во всех отношениях старые отчеты. Одной из типичных проблем отчётах всегда была проблема отображения Memo полей. Они могут содержать достаточно объемный текст, а могут, напротив, иметь пустые значения. Если такие данные отображать в столбце рядом с обычными данными, то визуально это будет выглядеть малопривлекательно. Читабельность отчета снижается и данные воспринимаются значительно хуже. Проблема довольно типичная, поэтому я решил сделать небольшой пост на эту тему.

На уровне логики всё решается достаточно просто. Значения Memo полей можно опционально выводить под строкой, содержащей основные данные. Примерно так:

Решение простое и логичное. При этом обратите внимание на то, что в случае отсутствия данных в Memo поле, не остается пустого места между строками.

Как это реализовать с помощью FastReport?

ChildBand

Я сделал это следующим образом. Для мастер-бэнда, содержащего основные данные, я создал child-бэнд. Его высота (свойство height) – минимальна, хотя нулевое значение лучше не устанавливать. Свойства этого бэнда в моем случае установлены следующим образом:

chield_properties

На этом бэнде я разместил компонент TfrxMemoView, непосредственно отвечающий за отображение данных Memo поля

frxMemoInTree

его свойства я настроил так:

properties

Обратите внимание на значения отмеченных свойств. Не сложно догадаться, что при таком значении свойства StretchMode высота компонента будет подогнана в зависимости от отображаемых данных. Значение свойства Memo компонента я определил так

<b>Note:</b>         [qryTimeCard."Notes"]

Здесь проще всего было использовать html-код для отображения названия поля.

Как видите все довольно просто.

 


Поделись с другими!
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

3 комментария: Отображение Memo-полей в отчетах FastReport

  • И что получим если для строки memo-поле пустое? Получим для каждой строки “Note:”? За счет чего child будет невидим и непечатаем? Что мешает его просто выключать если данных нет? выставление 0.1 для высоты банды – очень на костыль смахивает. Что-то не пойму саму идею… может уже поздно и сам туплю.

    • Совершенно верно. Забыл дописать про обработчик события OnBeforePrint для dmNotes.

      procedure qryTimeCardNotesOnBeforePrint(Sender: TfrxComponent);
      begin
      if Engine.FinalPass then
      begin
      if = ” then
      dmNotes.Text:= ”;
      end;
      end;

      • Теперь понятно… Хотя следуя моим фломастерам проще если текста нет

        Child1.visible:= false;

        Интересно в каком варианте FR будет меньше в холостую код отрабатывать… просто не выводить чилдовый бэнд или высчитывать высоту и схлоповать банду в ноль. Мне всегда показалось первый вариант.

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

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Продукты DevArt
Купить онлайн:



Читай русскоязычные Delphi блоги
Каталог блогов Blogdir.ru
Яндекс.Метрика