Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа7.doc
Скачиваний:
5
Добавлен:
06.11.2018
Размер:
461.82 Кб
Скачать
    1. Включение выражений в отчет

Для этого используем компонент QRExpr. Выражения формируются с помощью специального редактора, который вызывается в поле свойств Expression по кнопке с многоточиями. Выражение редактируется в поле Enter Expression данного редактора и может состоять из имен полей, переменных, числовых значений, функций преобразования, арифметических и логических операций, операторов сравнения.

Рассмотрим пример составления выражения на основе данных таблицы shop.db:

  • Tovar- наименование товара,

  • Price – стоимость товара в долларах.

Требуется вывести стоимость товара в рублях по курсу 30 рублей за 1 доллар. Для этого проделаем те же операции по формированию отчета, что и в примере №1, только для поля Price добавим еще компоненту QRExpr. В свойстве Expression перейдем в редактор выражений и внесем формулу преобразования числового выражения в строковое STR(Table1.Price*30) и добавим строку 'руб.'. Получится следующее выражение:

STR(Table1.Price*30)+'руб.'

Таким образом, стоимость товара будет и в долларах и в рублях.

    1. Отображение системной информации

Для этого в заголовке или в подвале страницы отчета размещается компонента QRSysData. Вид информации определяется значением свойства Data, например:

  • qrsColumnNo – номер текущей колонки отчета

  • qrsDate – текущая дата

  • qrsDataTime – текущая дата и время

  • qrsTime – текущее время

  • qrsDetailCount – количество записей в наборе данных Table

  • qrsDetailNo – номер текущей записи в наборе данных

  • qrsPageNumber – номер текущей страницы отчета

  • qrsPageCount – общее количество страниц отчета

  • qrsReportTitle – заголовок отчета

Для приведенных выше примеров самостоятельно задайте вывод системной информации.

    1. Группировка данных в отчете

Для этого используется компонент QRGroup. Для задания условия группировки изменяют свойство Expression, задав имя поля набора данных, на основе которого будет осуществляться группирование записей. Для каждой группы выводится ее заголовок QRGroup (со ссылкой на компонент подвала группы в свойстве FooterBand) и подвал группы QRBand (со значение rbGroupFooter свойства BandType). Группировка будет осуществляться только на основе текущего индекса.

Создадим отчет на Form1 для таблицы firma.db, отражающий группировку записей по отделам с подсчетом общей зарплаты сотрудников отдела:

  • Tab_Nom – табельный номер

  • Name – Имя сотрудника

  • Otdel – отдел

  • Position – должность

  • Salary – оклад

  1. Поместим компоненту Table1 и свойствам IndexFieldNames или IndexName установим соответствующие значения, которые определяют индексирование по полю Otdel.

  2. Помещаем компонент QuickRep1 и его свойству DataSet задаем значение Table1.

  3. Устанавливаем в отчет следующие компоненты:

  • QRBand1 - полоса заголовка отчета со значением rbTitle для свойства BandType.

  • QRBand2 - полоса заголовков колонок отчета со значением rbColumnHeader для свойства BandType.

  • QRGroup1 – полоса группы

  • QRBand3 - полоса детальной информации со значением rbDetail для свойства BandType

  • QRBand4 - полоса подвала группы со значением rbGroupFooter для свойства BandType

  • QRBand5 - полоса подвала отчета со значением rbSummary для свойства BandType

  • QRBand6 - полоса подвала страницы со значением rbPageFooter для свойства BandType

  1. На QRBand1 размещаем компонент QRLabel для заголовка отчета.

  2. На QRBand2 размещаем компоненты QRLabel для заголовков столбцов отчета.

  3. Для QRGroup1 изменяем свойство FooterBand на значение QRBand4, а свойству Expression присваиваем значение Table1.Otdel.

  4. В полосе детальной информации QRBand3 размещаем компоненты QRDBText, которые ссылаются на соответствующие поля Tab_Nom, Name, Position, Salary.

  5. В подвал группы QRBand4 добавляем компонент QRExpr и его свойство Expression меняем на выражение SUM(Table1.Salary).

  6. В подвал отчета QRBand5 добавляем компонент QRExpr и его свойство Expression меняем на выражение COUNT.

  7. На полосе подвала страницы QRBand6 размещаем две компоненты QRSysData. Для одного из них изменить свойство Data на qrsDate, а для другого – qrsPageNumber.

  8. Предварительный просмотр отчета покажет список сотрудников и их зарплаты, для каждого отдела – общую сумму по зарплате, в конце каждой страницы выведет текущую дату и номер страницы, в конце отчета – общее количество сотрудников.

Рассмотрим другой пример на основе SQL-запросов для нескольких баз данных, содержащих информацию об абонентах телефонной сети:

abonents.db:

ID- код абонента,

Abonent- фамилия абонента,

ID_Street- номер улицы,

House- номер дома,

Room- номер квартиры

streets.db:

ID-номер улицы,

Street-название улицы

oplata.db:

ID – код регистрации,

ID_Abonent - код абонента,

Data- дата оплаты,

Pay-абонентская плата,

Opl- оплачено.

Получим отчет о платежах абонентов сети, которые проживают по каждой улице. При этом, во-первых, сгруппируем абонентов по каждой улице и, во-вторых, сгруппируем платежи по каждому из абонентов. В каждой группе будем выводить итоговую сумму платежей.

  1. Для этого поместим компоненту Query1 и внесем в свойство SQL следующий текст запроса:

SELECT S.Street, A.Abonent, A.ID, P.Data, P.Pay, p.Opl

FROM oplata.db P RIGHT JOIN abonents.db A ON A.ID=P.ID_Abonent LEFT JOIN streets.db S ON S.ID=A.ID_Street ORDER BY S.Street, A.Abonent, P.Data

  1. Поместим на форму компоненту QuickRep1 и установим свойство DataSet в Query1, а в свойстве Bands установим флаги HasDetail, HasSummary, HasTitle. После этого на поверхности отчета появятся компоненты QRBand с соответствующими свойствами BandType. Оформим заголовок отчета с помощью компоненты QRMemo и для итогов введем необходимые надписи с помощью компонент QRLabel.

  1. Для создания группы элементов поместим в отчет компонент QRGroup1 и зададим свойству Master имя отчета QuickRep1, в котором нужно произвести группировку данных (на форме появится область Group Header). В свойстве Expression укажем ключевое поле для группировки - название улицы Query1.Street. Для вывода названий улиц используем компоненты QRLabel и QRDBText. Для завершения группы используем компонент QRBand со свойством BandTyperbGroupFooter и FooterBandQRGroup1.

  2. С помощью компоненты QRExpr введем формулу для подсчета суммы платежей по группе, например: SUM(Query1.Pay).

Для задания формата вывода при печати используем свойство Mask: ###, ###0.00 ’р.’

Если свойство ResetAfterPrint установлено в False, то подсчет будет идти с нарастающим итогом. Для правильного подсчета суммы по группе его нужно установить в True.

Точно так же организуем подсчет общей суммы платежей по всему документу.

  1. Далее внутри группы с улицами образуем группу с абонентами сети, формируем итоги группы и заголовки.

  2. Заполним содержимое раздела Detail, используя компоненты QRDBText c данными из Query1: Data, Pay, Opl. Используя компоненту QRChildBand для разделения групп компонентов, установим свойство HasChild для компонент QRBand1, QRBand2 на значение True.

  1. В заключение работы можно с помощью свойства Frame создать рамки для тех групп компонентов, которые требуется выделить.

  2. При предварительном просмотре получится следующий вид: