Иллюстрированный самоучитель по Microsoft Access 2002

Создание перекрестного отчета с изменяющимся числом столбцов

Рассмотрим возможности обработки событий в отчете на примере отчета "Выработка сотрудников". Этот отчет строится на базе перекрестного запроса и показывает выработку сотрудников отдела продаж за год по месяцам. Максимальное число столбцов в отчете – 14. Первый столбец содержит фамилии сотрудников, следующие двенадцать столбцов – выработку для каждого месяца и последний столбец – итоговый. (Как выглядит этот отчет, мы показывали в разд. "Перекрестные отчеты" гл. 10.)

В качестве источника данных для такого запроса используется перекрестный запрос "Выработка сотрудников", представленный на рис. 13.35.

Иллюстрированный самоучитель по Microsoft Access 2002 › Программирование в Access 2002 › Создание перекрестного отчета с изменяющимся числом столбцов
Рис. 13.35. Перекрестный запрос "Выработка сотрудников"

Поле "Отпускная цена" является вычисляемым, и для его вычисления используется формула:

CCur(CLng([Заказано].[Цена] * [Количество] * (1 - [Скидка]) * 100) / 100)

Создание такого отчета требует написания довольно большого числа процедур обработки событий.

В запросе в качестве критерия выборки заказов указан год – 1998. Нужно вывести приглашение пользователю, чтобы он, в свою очередь, мог ввести желаемый год. Это можно сделать при открытии отчета. Сначала нужно создать базовый набор записей для отчета и посчитать, сколько получилось столбцов в этом наборе. Следующая процедура обрабатывает событие Открытие (On Open) отчета:

Private Sub Report_0pen(Cancel As Integer)
On Error Resume Next
'Создает базовый набор записей для отчета.
Dim intX As Integer
Dim qdf As QueryDef
Dim frm As Form
Dim StrSql As String
'Связывает переменную с текущей базой данных.
Set dbsReport = CurrentDb 
'Открывает запрос (объект QueryDef).
Set qdf = dbsReport.QueryDefs("Выработка сотрудников")
'Запрашивает год.
Год = InputBox("Отчет за год:", "Год", 1998)
StrSql = Left(qdf.SQL, InStr(qdf.SQL, "where") - 1) & " WHERE(((Year([ДатаИсполнения]))= " & Год & "))" & Right(qdf.SQL, Len(qdf.SQL) - InStr(qdf.SQL, "GROUP BY") + 1)
qdf.SQL = StrSql 
'Открывает набор записей
Set rstReport = qdf.OpenRecordset()
'Определяет количество столбцов в перекрестном запросе.
intColumnCount = rstReport.Fields.Count
End Sub

Здесь переменная intColumnCount должна быть определена на уровне модуля формы, т. к. она используется и другими процедурами данной формы.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.