Перекрестный запрос "Выработка сотрудников"
Поле "Отпускная цена" является вычисляемым, и для его вычисления используется формула
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 должна быть определена на уровне модуля формы, т. к. она используется и другими процедурами данной формы.
Для событий
Форматирование
(On Format) верхнего колонтитула (листинг 13.1) и области данных отчета (листинг 13.2) необходимо определить процедуры, которые бы заполняли поля заголовков и значений и скрывали неиспользуемые поля.