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

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

Для событий Форматирование (On Format) верхнего колонтитула (листинг 13.1) и области данных отчета (листинг 13.2) необходимо определить процедуры, которые бы заполняли поля заголовков и значений и скрывали неиспользуемые поля.

Листинг 13.1. Процедура обработки события Форматирование верхнего колонтитула

Private Sub PageHeader()
Format(Cancel As Integer, FormatCount As Integer)
Dim intx As Integer
'Помещает заголовки столбцов в поля в верхнем колонтитуле.
Me("Head" + Format(0)) = rstReport(0).Name
For intX = 1 To intColumnCount - 1
Me("Head" + Format(intX)) =MonthRus(CInt(rstReport(intX).Name))
Next intX
'Вводит в ближайшее свободное поле заголовок "Итого".
Me("Head" + Format(intColumnCount)) = "Итого"
'Скрывает пустые поля в верхнем колонтитуле.
For intX = (intColumnCount +1) To conTotalColumns - 1
Me("Head" + Format(intX)).Visible = False
Next intX
End Sub

В этой процедуре используется функция MonthRus, которая по порядковому номеру месяца выдает его название. Мы здесь не приводим текста этой функции, надеясь, что вы сможете написать ее сами conTotalColumns – константа, которая описана на уровне модуля и значение которой определяет максимальное число столбцов в отчете. В данном примере conTotalColumns равна 14.

Листинг 13.2. Процедура обработки события Форматирование области данных 1

Private Sub Detaill_Format(Cancel As Integer, FormatCount As Integer)
'Вводит значения в поля и скрывает пустые поля.
Dim intX As Integer
'Проверяет, что не достигнут конец набора записей.
If Not rstReport.EOF Then 
'Помещает значения из набора записей в поля области данных
If Me.FormatCount = 1 Then
For intX = 0 To intColumnCount - 1
'Преобразует пустые значения в 0.
Me("Col" + Format(intX)) = xtabCnulls(rstReport(intX))
Next intX
'Скрывает неиспользуемые поля в области данных.
For intX = intColumnCount + 1 To conTotalColumns - 1
Me("Col" + Format(intX)).Visible = False Next intX
'Переходит к следующей записи в наборе.rstReport.Move
Next
End If
End If
End Sub

Свойство FormatCount отчета содержит значение, равное количеству столбцов для форматирования, поэтому в процедуре проверяется это свойство, и присвоение значений полям в области данных выполняется, только если это значение не 0. В процедуре используется также функция xtabCnulls, преобразующая пустое значение в 0.

Для события Печать (On Print) области данных отчета нужно создать процедуру, которая бы суммировала значения по строке отчета, выводила полученное значение в последнем столбце и, кроме того, добавляла эту сумму в массив итоговых значений по столбцам (листинг 13.3). Массив итоговых значений по столбцам IngRgColumnTotal и переменная IngReportTotal, определяющая общий итог, должны быть описаны на уровне модуля. Кроме того, они должны быть инициализированы, т. е. им нужно присвоить начальные значения 0. Это можно сделать в процедуре обработки события Загрузка (On Load) отчета.

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