Тема: «VBA,программирование в отчетах»
Практическая работа №24. Тема: «VBA, программирование в отчетах»
Для работы создайте отчёт по таблице «Заказано» с помощью Автоотчет: ленточный.
Нумерация записей.
В некоторых случаях отчеты нагляднее, если записи каждой страницы пронумерованы.
Для нумерации записей каждой страницы используйте счетчик.
Создайте в области данных текстовое поле с именем полеЗапись (для этого вызовите свойства поля и на вкладке Другие выберите свойство Имя). Для того чтобы значение в этом поле с каждой записью увеличивалось на 1, назначьте событию области данных Печать, следующую процедуру (для этого вызовите свойства области данных, перейдите на вкладку События в строке Печать выберите ….и Программа или Процедура обработки событий и ….):
Private Sub ОбластьДанных_Print(Cancel As Integer, PrintCount As Integer)
If PrintCount = 1 Then ПолеЗапись = ПолеЗапись + 1
End Sub
На каждой странице значения в поле Счетчик должны начинаться со значения 1. Для этого назначьте событию Печать области верхнего колонтитула следующую процедуру:
Private Sub ВерхнийКолонтитул_Print(Cancel As Integer, PrintCount As Integer)
ПолеЗапись = 0
End Sub
PS. Если необходимо указывать в области примечания количество записей на странице, перенесите текстовое поле полеЗапись в область нижнего колонтитула.
Печать суммы на каждой странице отчета.
В многостраничных счетах на каждой странице следует печатать промежуточную сумму.
Для вычисления промежуточной суммы воспользуйтесь событием Печать
Поместите свободное поле с именем поле Сумма в область нижнего колонтитула отчета. Здесь будет отображаться промежуточная сумма. Остальное выполняет две процедуры событий.
Первая процедура связана с событием печать верхнего колонтитула
(эту процедуру добавьте в предыдущую, для перехода в программу выберите Вид, Программа):
Private Sub ВерхнийКолонтитул_Print(Cancel As Integer, PrintCount As Integer)
Me!ПолеСумма = 0
End Sub
Вторая процедура связана с событием Печать области данных:
Private Sub ОбластьДанных_Print(Cancel As Integer, PrintCount As Integer)
If PrintCount = 1 Then
Me!ПолеСумма = Me!ПолеСумма + Me![цена]
End Sub
Для каждой записи промежуточная сумма будет увеличиваться на величину поля Цена. Однако перед этим значение свойства PrintCount проверяется на равенство 1. Это является обязательным, поскольку Access неоднократно обращается к событию Print при печати счета, занимающего несколько страниц. Свойство PrintCount указывает, сколько раз происходило обращение к этому событию для текущей области. Для того чтобы значение поля не прибавлялось несколько раз, вычисление выполняется только при первом событии.
Выделение важных данных начертанием.
Важнейшие данные отчета должны быть выделены полужирным стилем.
Создайте для события Форматирование области данных процедуру, в которой свойство FontBold некоторого управляющего элемента имеет значение True.
Свойство FontBold задает использование полужирного шрифта в следующих ситуациях:
· при просмотре или выводе на печать элементов управления в форме или в отчете;
· при выводе отчета на печать с помощью метода Print.
Свойство FontBold может иметь следующие значения.
-
-
Значение
|
Описание
|
True (–1)
|
Текст выводится полужирным шрифтом.
|
False (0)
|
(Значение по умолчанию) Текст выводится без атрибута полужирного шрифта.
|
Эта процедура может выглядеть следующим образом:
Private Sub ОбластьДанных_Format(Cancel As Integer, FormatCount As Integer)
If Me![цена] < 30000 Then
Me![цена].FontBold = True
Else
Me![цена].FontBold = False
End If
End Sub
В этом случае значения, меньше 30000 выделяются жирным шрифтом
Практическая работа №25. Тема: «Создание модулей форм и модулей отчетов».
Выполнение работы:
Работа со структурой документа.
Объекты Database (база данных), TableDef (определение таблицы), Fields (поля таблицы).
База данных в целом представлена объектом типа Database. Объекта "таблица" не существует, а доступ к таблицам осуществляется посредством объектов TableDef. Объекты типа Field, объединенные в семейство Field соответствующего объекта TableDef, представляют поля таблицы. С помощью этих объектов можно создать новые таблицы, поля в базу данных.
Сначала необходимо объявить переменные: базу данных, таблицу и поля таблицы. Для этого используется следующее:
Dim db as Database
Dim td as TableDef
Dim fld as Field
Затем следует открыть базу данных, если для нужна другая база данных :
Set db=opendatabase("имя файла базы данных") если нужна текущая база данных то используется
Set db = CurrentDb ()
Т.к. база данных теперь открыта и содержится в переменной db, можно обратиться к семейству определений таблиц и присвоить требуемое значение переменной td:
Set td=db.TableDefs("имя таблицы")
Затем, при помощи метода CreateField объекта TableDef можно добавить поле с заданными именем заданного размера:
Set flf=td.createfield(имя поля, тип данных, размер)
Поле создано и содержится в переменной fld, но в состав таблицы оно ещё не включено. Метод Append позволяет включить поле в таблицу:
Td.fields.append.fld
Остается закрыть базу данных и освободить память, выделенную под переменную db:
Db.close
Set db=nothing
Если требуется создать новую таблицу в базе данных, то действовать следует аналогичным образом. Только вместо открытия таблицы обращением к семейству TableDefs следует использовать метод CreateTable того же семейства, и пока на таблицу указывает объектная переменная, создать в ней необходимые поля и включить таблицу в состав семейства при помощи метода Append.
Задание1.
Добавим в базу данных "Борей" таблицу "Счета" для ведения лицевых счетов клиентов. Каждая запись в таблице должна состоять из двух полей: поля "лицевой счет" (длинное целое), поля "остаток" (денежный) и поля "примечание" (текстовый, размер 30).
'Объявим необходимые переменные
Dim db as Database
Dim td as TableDef
'Открыть базу данных
Set db=opendatabase("c:\2as_\борей.mdb")
'Создать новую таблицу
Set td=db.CreateTableDef("ЛицевыеСчета")
'Создать в новой таблице два поля
With td
.Fields.Append.CreateField("ЛицевойСчет", dblong)
.Fields.Append.CreateField("остаток", dbcurrency)
.Fields.Append.CreateField("примечание", dbtext, 30)
End With
'включить новую таблицу в базу данных
Td.TableDefs.Append td
'закрыть базу данных и освободить память
Db.close
Set db=nothing
Задание2.
Добавим в таблицу "товары" базу данных "Заказы товаров" поле дата_выпуска типа дата/время.
Dim db as Database
Dim td as TableDef
Dim fld as Field
Set db = CurrentDb()
'выбрать таблицу "товары"
Set td=db.TableDefs("Товары")
'Создать в таблице поле
set fld=td. CreateField("дата_выпуска",dbD ate)
'включить новое поле в таблицу базы данных
Td.Fields.Append fld
'закрыть базу данных и освободить память
Db.close
Set db=nothing
Программирование в отчетах.
Для работы создайте отчёт по таблице «Заказано» в базе данных "Борей» с помощью Автоотчет: ленточный.
Нумерация записей.
В некоторых случаях отчеты нагляднее, если записи каждой страницы пронумерованы.
Для нумерации записей каждой страницы используйте счетчик.
Создайте в области данных текстовое поле с именем полеЗапись (для этого вызовите свойства поля и на вкладке Другие выберите свойство Имя). Для того чтобы значение в этом поле с каждой записью увеличивалось на 1, назначьте событию области данных Печать, следующую процедуру (для этого вызовите свойства области данных, перейдите на вкладку События в строке Печать выберите ….и Программа или Процедура обработки событий и ….):
Private Sub ОбластьДанных_Print(Cancel As Integer, PrintCount As Integer)
If PrintCount = 1 Then ПолеЗапись = ПолеЗапись + 1
End Sub
На каждой странице значения в поле Счетчик должны начинаться со значения 1. Для этого назначьте событию Печать области верхнего колонтитула следующую процедуру:
Private Sub ВерхнийКолонтитул_Print(Cancel As Integer, PrintCount As Integer)
ПолеЗапись = 0
End Sub
PS. Если необходимо указывать в области примечания количество записей на странице, перенесите текстовое поле полеЗапись в область нижнего колонтитула.
Печать суммы на каждой странице отчета.
В многостраничных счетах на каждой странице следует печатать промежуточную сумму.
Для вычисления промежуточной суммы воспользуйтесь событием Печать
Поместите свободное поле с именем поле Сумма в область нижнего колонтитула отчета. Здесь будет отображаться промежуточная сумма. Остальное выполняет две процедуры событий.
Первая процедура связана с событием печать верхнего колонтитула
(эту процедуру добавьте в предыдущую, для перехода в программу выберите Вид, Программа):
Private Sub ВерхнийКолонтитул_Print(Cancel As Integer, PrintCount As Integer)
Me!ПолеСумма = 0
End Sub
Вторая процедура связана с событием Печать области данных:
Private Sub ОбластьДанных_Print(Cancel As Integer, PrintCount As Integer)
If PrintCount = 1 Then
Me!ПолеСумма = Me!ПолеСумма + Me![цена]
End Sub
Для каждой записи промежуточная сумма будет увеличиваться на величину поля Цена. Однако перед этим значение свойства PrintCount проверяется на равенство 1. Это является обязательным, поскольку Access неоднократно обращается к событию Print при печати счета, занимающего несколько страниц. Свойство PrintCount указывает, сколько раз происходило обращение к этому событию для текущей области. Для того чтобы значение поля не прибавлялось несколько раз, вычисление выполняется только при первом событии.
Выделение важных данных начертанием.
Важнейшие данные отчета должны быть выделены полужирным стилем.
Создайте для события Форматирование области данных процедуру, в которой свойство FontBold некоторого управляющего элемента имеет значение True.
Свойство FontBold задает использование полужирного шрифта в следующих ситуациях:
· при просмотре или выводе на печать элементов управления в форме или в отчете;
· при выводе отчета на печать с помощью метода Print.
Свойство FontBold может иметь следующие значения.
Значение
|
Описание
|
True (–1)
|
Текст выводится полужирным шрифтом.
|
False (0)
|
(Значение по умолчанию) Текст выводится без атрибута полужирного шрифта.
|
Эта процедура может выглядеть следующим образом:
Private Sub ОбластьДанных_Format(Cancel As Integer, FormatCount As Integer)
If Me![цена] < 10000 Then
Me![цена].FontBold = True
Else
Me![цена].FontBold = False
End If
End Sub
В этом случае значения, меньше 10000 выделяются жирным шрифтом
|