Опубликован: 07.05.2010 | Уровень: специалист | Доступ: платный
Лекция 11:

Отчеты. Quick Report

< Лекция 10 || Лекция 11: 12 || Лекция 12 >

Собственно, отчет уже готов:

Отчет

Рис. 11.3. Отчет

Вернитесь в главное окно проекта и сгенерируйте обработку команды меню "Отчеты - Кадры". В созданной процедуре напишите такую строку (вы ведь добавили к главному окну командой File - Use Unit наш отчет?):

{Отчет Кадры}
procedure TfMain.N5Click(Sender: TObject);
begin
  fRepKadr.QuickRep1.PreviewModal;
end;

После того, как вы сохраните проект, скомпилируете его и выполните команду меню, появится подобное окно с отчетом:

Окно отчета

Рис. 11.4. Окно отчета

Как видите, окно уже содержит весь необходимый инструментарий в панели инструментов - позволяет настроить вид отчета, листать его страницы, сделать установку принтера и распечатать отчет, а также сохранить отчет в специальный файл с расширением *.qrp с возможностью последующей его загрузки. К сожалению, интерфейс этого окна доступен только на английском языке.

Наш отчет был бы красивей, если бы полученная таблица была очерчена рамкой. Исправим этот недостаток. На вкладке QReport имеется компонент QRShape, который позволяет рисовать простейшие линии и фигуры. Он имеет свойство Shape, в котором можно задать нужную фигуру. Возможные значения этого свойства:

  • qrsCircle (Круг)
  • qrsHorLine (Горизонтальная линия)
  • qrsRectangle (Прямоугольник)
  • qrsRightAndLeft (Прямоугольник с очерченными левым и правым краями)
  • qrsTopAndBottom (Прямоугольник с очерченными верхним и нижним краями)
  • qrsVertLine (Вертикальная линия)

Этот компонент можно использовать по-разному. Например, можно установить по одной горизонтальной линии сверху и снизу полосы Detail, а затем вертикальными линиями отделить каждый столбце страницы. Я сделал проще: каждый столбец заключил в прямоугольник (шесть компонентов QRShape ), а чтобы QRShape не перекрывал текст, щелкнул по ним правой кнопкой и выбрал команду Control -> Send to Back (поместить на задний план):

Компоненты QRShape играют роль границ таблицы

Рис. 11.5. Компоненты QRShape играют роль границ таблицы

В результате таблица отчета приняла вид:

Таблица отчета с границами

Рис. 11.6. Таблица отчета с границами

Результат может не сразу получиться таким - придется поэкспериментировать с расположением и размерами прямоугольников QRShape.

Отчет из связанных таблиц

Часто бывает, когда недостаточно получить отчет по данным только из одной таблицы. И здесь можно поступить двумя способами:

  1. Воспользоваться набором данных ADOQuery и с помощью SQL -запроса получить нужные данные из двух таблиц.
  2. Воспользоваться компонентом QRSubDetail, который специально предназначен для получения данных из связанной таблицы. Этим компонентом мы и воспользуемся.

Итак, QRSubDetail - это полоса, которая импортирует в отчет данные из подчиненной таблицы.

Создайте в проекте новую форму, назовите ее fRepTelephons, а модуль сохраните как RepTelephons. Сразу же к этому окну командой File -> Use Unit подключите модуль с наборами данных DM, а к главному модулю подключите только что созданный RepTelephons.

Установите на новую форму основу отчета QuickRep. Проверьте, чтобы он не был смещен по отношению к листу (свойства Left и Top равны 0).

В свойстве DataSet компонента-основы выберите fDM.TLichData, то есть, таблицу с личными данными.

Теперь создайте на основе полосы Page Header, Title, Column Header и Detail.

На верхнюю полосу Page Header установите по краям два компонента QRSysData, в свойстве Data у первого выберите qrsDateTime, а у второго qrsPageNumber. Кроме того, переведите в True параметр DrawBottom у свойства Frame полосы Page Header, чтобы отделить линией верхний колонтитул.

Далее, на полосу Title установите один компонент QRLabel, на котором напишите заголовок "Отчет по телефонам сотрудников". Измените шрифт, начертание и размер, как в прошлом примере, и отцентрируйте заголовок по полосе.

Ниже идет полоса Column Header с заголовками таблицы. Как и в прошлом примере, требуется из компонентов QRLabel сформировать заголовки столбцов, но в этот раз ограничимся только тремя заголовками: "Фамилия", "Имя" и "Отчество". К слову сказать, чтобы не делать работу дважды, вы можете открыть форму fRepKadr из прошлого примера, выделить нужные компоненты и командой всплывающего меню Edit -> Copy скопировать их. Затем перейти в новую форму, выделить нужную полосу, и командой Edit -> Paste вставить эти компоненты.

Далее у нас идет полоса Detail, на которой нам нужно разместить три компонента QRDBText, которые привязать к соответствующим полям (не забудьте про свойства DataSet и DataField этих компонентов). Еще в свойстве Frame полосы Detail желательно перевести параметр DrawTop в True, чтобы каждая запись отчета отделялась линией.

Пока что все, что мы делали, было практически таким же, как в прошлом отчете. Теперь добавим в отчет связанные данные из другой таблицы. Установите компонент QRSubDetail - эта полоса должна быть самой нижней. Сначала нужно выбрать главный по отношению к этому компонент: в свойстве Master выберите QuickRep1. Кроме того, полоса QRSubDetail должна знать, откуда листать данные, поэтому в свойстве DataSet полосы выберите fDM.TTelephones.

Далее установим на полосу один компонент QRLabel, напишем на нем "Телефон:".

Слева от него установите два компонента QRDBText, в свойстве Dataset которых выберите fDM.TTelephones, а в свойстве DataField выберите соответственно, поля "Телефон" и "Примечание". Теперь мышью немного перетащите нижний край полосы, чтобы сделать ее поуже.

В результате у вас должна получиться форма, подобная этой:

Отчет по телефонам

Рис. 11.7. Отчет по телефонам

Наш отчет готов. Создайте процедуру вызова этого окна в команде главного меню Отчеты -> По телефонам, и пропишите там вызов

fRepTelephons.QuickRep1.PreviewModal;

Сохраните проект, скомпилируйте и запустите его. В результате выбора этой команды мы получим подробный отчет по телефонам сотрудников:

Окно отчета по телефонам

Рис. 11.8. Окно отчета по телефонам

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

Экспорт отчета в другие форматы

Отчет можно не только распечатать. Его также можно сохранить в специальном формате *.qrp, а затем загрузить в окно предварительного просмотра. Для этого соответственно служат кнопки " Save Report " и " Load Report " на панели инструментов окна предварительного просмотра:

Кнопки "Save Report" и "Load Report"

Рис. 11.9. Кнопки "Save Report" и "Load Report"

Однако бывают случаи, когда отчет желательно сохранить в каком-нибудь общем формате, например, в текстовом, или html ( web -страница). Тогда отчет можно было бы просмотреть в стандартном Блокноте или web -броузере, переслать сотруднику, у которого ваша программа не установлена. На вкладке QReport имеются компоненты, которые позволяют это сделать.

QRTextFilter - позволяет сохранить отчет в виде текстового файла.

QRCSVFilter - позволяет сохранить отчет в специальном формате CSV (Comma Separated).

QRHTMLFilter - позволяет сохранить отчет в формате web -страницы.

Это не визуальные компоненты, на отчете они не отобразятся. Достаточно установить один из них (или все вместе) на основу отчета QuickRep, и при сохранении отчета пользователю станут доступны соответствующие форматы:

Выбор формата сохранения отчета

Рис. 11.10. Выбор формата сохранения отчета

Причем если у вас в проекте имеется несколько окон с отчетами, компоненты добавляются только в один из них, в остальных отчетах эти форматы также станут доступны.

< Лекция 10 || Лекция 11: 12 || Лекция 12 >
Евгений Медведев
Евгений Медведев

В лекции №2 вставляю модуль данных. При попытке заменить name на  fDM выдает ошибку: "The project already contains a form or module named fDM!". Что делать? 

Анна Зеленина
Анна Зеленина

При вводе типов успешно сохраняется только 1я строчка. При попытке ввести второй тип вылезает сообщение об ошибке "project mymenu.exe raised exception class EOleException with message 'Microsoft Драйвер ODBC Paradox В операции должен использоваться обновляемый запрос'. 

Назерке Сейтсаданова
Назерке Сейтсаданова
Казахстан, Усть-Каменагорск, ВКГУ им. С.Аманжолова
Наталья Статченко
Наталья Статченко
Россия, Благовещенск