Читайте также:
|
|
Отчет должен содержать:
1. Руководство пользователя Вашего приложения с описанием всех его функциональных возможностей.
2. Экранные формы работающего приложения.
3. Наиболее значимые фрагменты кода приложения с необходимыми комментариями.
6. ЛАБОРАТОРНАЯ РАБОТА №5
Тема работы: построение отчетов в базах данных.
Длительность работы: 4 академических часа.
Важнейшим требованием к любому приложению баз данных является возможность формирования разнообразных отчетов и представления сводной информации по имеющимся данным.
С этими целями используются различные генераторы отчетов. В частности, при написании приложений баз данных в Delphi можно использовать генератор отчетов QuickReport, входящий в дистрибутив Delphi. Его компоненты расположены на страничке QReport.
Замечание: если в палитре компонентов отсутствует страница QReport, то следует доустановить соответствующий пакет. Для этого в окне, вызываемом из меню Component | Install Packages…, необходимо нажать кнопку Add и в подкаталоге Bin каталога установки Delphi выбрать для установки пакет dclqrt*.bpl (* – номер версии Delphi).
Основным компонентом для QuickReport является TQuickRep, представляющий собой заготовку отчета. Обычно он помещается на отдельную форму, вызывается при подготовке отчета. На форме TQuickRep выглядит, как страница, размеченная сеткой (рис. 28).
Рис. 28. Форма для подготовки отчета
Помимо TQuickRep на форме можно разместить и другие компоненты для управления формируемым отчетом. Например, для отчета о наличии на форме (рис. 28) помещена радиогруппа для выбора вида отчета, а также компоненты выбора конкретного лица или предмета. Заготовка отчета должна быть видна только на этапе проектирования приложения.
Замечание: во время выполнения приложения размеры формы следует изменить программно таким образом, чтобы пользователю были видны только элементы управления.
В любой момент проектирования можно просмотреть вид создаваемого отчета (без запуска приложения). Для этого в контекстном меню TQuickRep следует выбрать пункт Preview.
6.1. ОСНОВНЫЕ СВОЙСТВА И МЕТОДЫ TQuickRep
TQuickRep определяет поведение и характеристики отчета в целом.
Его свойство DataSet указывает на набор данных, по которому создается отчет. Обычно для отчета используется один НД. Если же необходимо вывести информацию из нескольких связанных наборов данных, то можно использовать компонент TQuery для задания соответствующего SQL-запроса, или использовать наборы данных, которые находятся в отношении Master-Detail.
Свойство Page - задает параметры страницы;
PrinterSetting - настройки принтера;
Frame - рамки страницы.
В свойстве Options можно указать – следует ли печатать шапку на первой странице и подвал на последней.
В свойстве PrintIfEmpty - печатать ли отчет, если соответ-ствующий НД пуст.
Основным методом TQuickRep является метод Preview, который обеспечивает вывод окна предварительного просмотра отчета при выполнении программы (не следует путать с Preview в процессе проектирования отчета). В этом окне есть инструменты для установки параметров принтера и печати отчета или вывода его в файл. Обычно этим методом в программе инициируется генерация отчета. Например, если подготовка отчета должна происходить по нажатию некоторой кнопки, то в обработчике OnClick этой кнопки следует записать:
QuickRep1.Preview; // где QuickRep1 – имя компонента TQuickRep
Среди событий, связанных с TQuickRep, наибольший интерес представляют следующие:
BeforPrint - наступает при подготовке отчета до вывода окна предварительного просмотра;
AfterPrint - после печати;
OnStartPage - при генерации первой страницы;
OnEndPage - при генерации последней страницы.
Основные части отчета формируются с помощью компонентов TQRBand, которые помещаются на TQuickRep. Порядок их следования в рамках TQuickRep определяется назначением: шапка, заголовок, подвал и т.д.
На рис. 29 приведен пример отчета с обозначением его полос: 1 – шапка страницы; 2 – заголовок отчета; 3 – заголовок столбцов; 4 – шапка группы; 5 – детальная информация; 6 – подвал группы; 7 – подвал отчета; 8 – подвал страницы.
Форма с проектом данного отчета представлена на рис. 30.
6.2. КОМПОНЕНТ TQRBand
Назначение, расположение и поведение этого компонента определяется свойством BandType:
rbTitle - заголовок всего отчета: выводится на первой странице после ее шапки;
rbSummary - подвал всего отчета: выводится на последней странице после всего отчета, но до подвала последней страницы;
rbGroupHeader - шапка группы: используется при группировке информации в отчете и выводится в начале каждой группы;
rbGroupFooter - подвал группы: выводится в конце группы;
rbPageHeader – шапка страницы: выводится вверху каждой страницы;
rbPageFooter – подвал страницы: выводится внизу каждой страницы;
rbColumnHeader - заголовок столбцов: выводится на каждой странице после ее шапки;
rbDetail - основной элемент, в котором печатается детальная информация по каждой записи НД;
Рис. 29. Пример отчета
rbSubDetail - используется для вывода информации из дочернего НД в связке Master-Detail.
Замечание: для визуального разделения различных частей отчета удобно использовать свойство Frame, определяющее вид рамки вокруг TQRBand.
Рис. 30. Форма проектирования отчета
Для дополнительной обработки информации можно использовать события, связанные с TQRBand:
AfterPrint - наступает после вывода на печать соответствующей части отчета;
BeforePrint - наступает перед выводом на печать соответствующей части отчета. Это событие обычно используется для внесения последних изменений в формируемую часть отчета, для разрешения/запрещения печати отдельных полей, меток и т.д., а также преобразования их вида (например, для логических полей можно выводить не True и False, а галку в виде буквы ‘V’).
Для выполнения надписей (меток) на компонентах TQRBand используются компоненты TQRLabel (аналог TLabel). Для вывода значений отдельных полей записей НД используется компонент TQRDBText. Указание на поле содержится в его свойствах DataSet и DataField.
Для вывода вспомогательной и системной информации используется компонент TQRSysData. Вид выводимой информации определяется значением его свойства Data:
qrsDate - текущая дата;
qrsTime - текущее время;
qrsDateTime - текущая дата и время;
qrsPageNumber - номер страницы;
qrsDetailNo - номер текущей записи НД;
qrsDetailCount - число записей в НД.
В приведенном на рис. 29 примере отчета компонент TQRSysData использован для вывода информации о дате и времени формирования отчета в шапке страницы и номера страницы в ее подвале.
Для вывода в отчете величин, являющихся результатом вычисления неких выражений (например, для расчета суммы значений некоторого поля по всем записям) используется компонент TQRExpr. Расчетное выражение для него формируется с помощью редактора формул, который вызывается по нажатию кнопки в свойстве Expression. Например, в приведенном выше отчете этот компонент используется для расчета суммарной стоимости всего наличия для отдельных лиц и всего предприятия. В качестве Expression для него указано: SUM(NalichieT.Stoimost), где Stoimost – вычисляемое поле НД, представляющее собой произведение цены предмета на его количество.
В редакторе формул присутствует большое количество различных функций.
Часто в отчетах используется группировка выводимой информации. Например, в отчете о наличии материальных средств имеет смысл сделать группировку по отдельным подотчетным лицам, как это сделано в приведенном примере. Для этого используется компонент TQRGroup. В его свойстве Expression задается выражение, при смене значения которого начинается новая группа в отчете (для группировки по подотчетным лицам в качестве выражения был указан условный номер лица).
Замечание: при подготовке отчета с группировкой соответствующий НД обязательно должен быть отсортирован по индексу, обеспечивающему необходимый порядок следования групп. То есть, логический порядок записей НД должен быть именно таким, каким должен быть порядок появления записей в отчете.
Для отчета с группировкой в полосе компонента TQRGroup (на макете отчета он помечается как GroupHeader) помещается заголовок для группы записей (в примере отчета он состоит из TQRLabel «Подотчетное лицо» и TQRDBData, в котором выводится значение Lookup поля наименования лица).
Подвал группы на макете отчета задается компонентом TQRBand, имя которого указывается в свойстве FooterBand соответствующего компонента TQRGroup. После такого указания добавленный TQRBand будет помечен как GroupFooter.
Подвал группы обычно используется для подведения промежуточных итогов по группе записей. Например, роль этого итога может играть суммарная стоимость всех предметов у конкретного подотчетного лица. С этой целью в полосе GroupFooter можно разместить компонент TQRExpr с соответствующим выражением в свойстве Expression.
Для того чтобы значения выражения TQRExpr сбрасывалось в ноль в начале каждой новой группы (чтобы начать суммирование для следующей группы с нуля), его свойство ResetAfterPrint должно быть установлено в True.
В приведенном примере для двух TQRExpr (в подвале группы и в подвале всего отчета) использовано одно и то же выражение SUM(NalichieT.Stoimost). Но для TQRExpr, расположенного в подвале группы, свойство ResetAfterPrint установлено в True.
Группировка записей может быть многоуровневой, т.е. внутри одной группы могут определяться другие вложенные группы. Например, в отчете о движении материальных средств (отчет по проводкам) внешняя группировка может быть выполнена по передающим лицам, а внутренняя – по принимающим.
Основным элементом почти каждого отчета является компонент TQRBand типа rbDetail. В его полосе выводится детальная информация по каждой записи набора данных. Для этого используются компоненты TQRDBText со ссылкой на соответствующие поля. В примере использованы пять компонентов, ссылающихся на таблицу наличия: для Lookup полей наименования, единицы измерения и цены предмета, для поля их количества и для вычисляемого поля общей стоимости указанного количества предметов.
Замечание: в принципе компонент TQRBand типа rbDetail может отсутствовать в отчете. Например, в тех случаях, когда нет необходимости вывода детальной информации по каждой записи, а достаточно итоговых данных по отдельным группам. Так, например, в кратком отчете о движении материальных средств можно не выводить детальную информацию о каждой проводке, а достаточно дать информацию о перемещении средств между подотчетными лицами в суммарном выражении.
При создании отчетов по наборам данных, которые связаны в программе как Master-Detail, полоса TQRBand типа Detail используется для вывода информации из родительского набора данных, а для вывода информации из дочернего НД используется полоса компонента TQRSubDetail, в свойстве DataSet которого следует указать дочерний набор данных.
Замечание: обратите особое внимание, что для вывода детальной информации в отчетах, как правило, используют моноширинные шрифты (например, Courier). Использование таких шрифтов обеспечивает вертикальное выравнивание столбцов, что особенно важно для представления числовой информации. При этом символьные поля обычно выравниваются влево, а числовые – вправо.
Задание.
Предусмотрите в своем приложении не менее трех отчетов, из которых, как минимум, два должны иметь группировку записей (и хотя бы в одном из них группировка должна быть двухуровневой). В отчет по лабораторным работам включите печатные (не экранные) формы своих отчетов.
Дата добавления: 2015-07-07; просмотров: 147 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Требования к отчету по лабораторной работе №3. | | | Ветвь сети — это путь, соединяющий два смежных узла. |