Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
системы управления базами данных.doc
Скачиваний:
2
Добавлен:
16.04.2019
Размер:
1.97 Mб
Скачать

2.8. Конструирование отчетов

Неотъемлемой функцией любых программных систем, так или иначе связанных с обработкой данных, является представление обетов по хранимой информации. Под отчетом традиционно понимается специальным образом структурированное представление хранимых данных, выводимое (как правило) на бумажный носитель. Перечислим принципиальные отличия отчетов от экранных форм, обусловившие выделение их в отдельный программный объект СУБД Access: - во-первых, отчеты являются исключительно средством вывода информации; - во-вторых, организация данных в отчетах предполагает возможность их сложного, многоуровневого структурирования; - в-третьих, структура информации, выводимой в отчете, должна быть согласована со структурой носителя.

Например, разбиение отчета на страницы предполагает организацию вывода регулярных элементов в начале и конце каждого листа (колонтитулов), дублирование шапок таблиц и т.д. Также на внешний вид отчета значительное влияние оказывают параметры конкретного печатающего устройства, которое будет использовано для его вывода. В то же время, к числу важных достоинств Access относится то, что идеология работы как с экранными формами, так и с отчетами максимально универсализирована. В частности, интерфейс режима конструирования макета отчета аналогичен режиму конструктора для экранных форм. Рассмотрим способы решения задач разработки отчетов, которые могут возникать в рамках описываем9Й нами программной системы управления торгами ценными бумагами. Простейшие отчеты, которые, скорее всего, будут необходимы пользователям системы, - это распечатанные списки бумаг и агентов. Для их создания можно воспользоваться надстройками Автоотчет в столбец или Автотчет ленточный. На рис. 24 показан макет отчета по агентам, созданный в режиме Автоотчет ленточный.

Рис.24. Отчет по агентам в режиме конструктора

Из рис. 24 видно, что в процессе конструирования в макет отчета могут быть добавлены те же самые управляющие элементы, что и при конструировании макета экранной формы. В то же время следует отметить, что структура отчета как объекта базы данных имеет свою специфику. Во-первых, она определяется уровнями группировки данных, выводимых в отчет, а во-вторых, содержит секции, соответствующие регулярным элементам, помещаемым в начале и конце каждого листа - верхнему и нижнему колонтитулам. Для задания уровней группировки данных используется функция меню Вид > Сортировка и группировка или же одноименная пиктограмма на панели инструментов Конструктор отчетов. При работе с отчетами активно используются (это видно из рис. 24) встроенные переменные [Page] и [Pages], возвращающие номер текущей страницы отчета и общее, количество страниц в нем, а также функция NowQ, определяющая текущую дату и время по системному календарю. Остановимся теперь на более сложном примере. Поставим задачу построить отчет, выводящий сведения о спросе и предложении по ценным бумагам с учетом их типа, то есть записи должны быть структурированы по следующим уровням:

- все бумаги; - тип бумаги; - агент; - предложения агента по данной бумаге. Также по каждому из уровней желательно предусмотреть вывод промежуточных итогов (или же соответствующих средних значений). Информация для данного отчета (назовем его РаспределЗаявок) должна браться из различных таблиц, поэтому в качестве источника данных для него целесообразно использовать специально построенный запрос. Для наглядности приведем SQL-выражение, соответствующее данному запросу:

SELECT

IIf([ТипБум]= "1", "Акции", "Облигации") AS Тип, Заявки.КодБум, Бумаги.НаимБум, Бумаги.Номинал, Агенты.НаимАг, IIf ([0бъем3аявки]<0,-1*[0бъем3аявки],0) AS ОбъемПродажи, IIf ([ОбъемЗаявки]<0,[ЦенаЗаявки],0) AS ЦенаПродажи, IIf ([0бъем3аявки]>0,[0бъем3аявки],0) AS ОбъемПокупки, IIf ([ОбъемЗаявки]>0, [ЦенаЗаявки],0) AS ЦенаПокупки, FROM Бумаги INNER JOIN (Агенты INNER JOIN Заявки ON Агенты.КодАг = Заявки.КодАг) ON КодБум = Заявки.КодБум ORDER BY IIf ([ТипБум]="1", "Акции", "Облигации"), Бумаги.НаимБум;

На основе построенного запроса можно перейти к разработке отчета. На начальном этапе представляется рациональным воспользоваться услугами мастера отчетов. Он в режиме диалога с пользователем позволяет создать походящую "заготовку", избавляя нас от многих рутинных операций, например таких, как добавление полей и подписей к ним. Далее полученный макет вручную "доводится" до желаемого вида в режиме Конструктор

Рис.25. Задание уровней группировки и сортировки

Важным этапом при создании многоуровневого отчета является задание уровней группировки выводимых данных. Это делается в окне, показанном на рис. 25, которое вызывается из меню Вид > Сортировка и группировка. Для каждого из заданных уровней группировки данных могут быть определены раздел типа Заголовок, выводимый в начале каждой группы, и раздел типа Примечание, формируемый, когда группа заканчивается. Задачи получения средих и итоговых значений по группам данных решаются с помощью встроенных функций Sum() и Avg(). Например/для получения среднего значения цены продажи бумаги в соответствующем элементе управления свойство Данные содержится строка =Avg([ОбъемПродажи]), а для определения итогового спроса используется формула =Sum([ОбъемПродажи]* [ЦенаПродажи]). Распределение заявок