
Создание макросов
Макрос - объект Access, позволяющий автоматически выполнять определенные действия или совокупность действий. Выполнение прикладной задачи можно представить как результат последовательного выполнения ряда действий, каждое из которых может быть записано командой на языке Visual Basic, или VBA.
Например, с помощью макроса можно имитировать выбор команды меню или перемещение мыши. Макросы выполняют особые заданные пользователем задачи, открытие формы или запуск отчета.
В макросах в Access используются специальные команды, называемые макрокомандами.
Макрос создается в окне макросов (рис. 31). В столбце Макрокоманда задаются имена макрокоманд, которые можно выбрать из раскрывающегося списка макрокоманд в той последовательности, в которой они должны выполняться. В столбец Примечание можно вводить необходимые пояснения, которые описывают соответствующую макрокоманду.
При выборе команды Вид - Имена макросов или Вид - Условия появляются два дополнительных столбца: Имя макроса и Условие.
Для задания условий, при которых должен выполняться макрос, можно пользоваться Построителем выражений. В нижней части окна находится область Аргументы макрокоманды. В данной области можно задавать необходимые аргументы (свойства) для соответствующих макрокоманд.
Многие макрокоманды требуют введения дополнительной информации, например, над каким объектом следует произвести указанное действие. Запускается макрос после ввода его
Рис.31
характеристик во вкладке События окна свойств форм или отчета.
Понятие «событие» в Access - это некоторое действие пользователя, например открытие формы или отчета, изменение данных записи, выбор кнопки, закрытие формы или отчета, перемещение данных между таблицами и т. д.
В Access для распознавания того или иного события используются свойства форм и отчетов, поскольку каждому событию соответствует определенное свойство. В качестве параметра свойства какого-то события можно назначить макрос, который будет автоматически запускаться при возникновении данного события.
Макросы можно разбить на четыре основные группы:
• макросы форм;
• макросы отчетов;
• макросы импорта/экспорта;
• макросы горячих клавиш.
Макросы форм могут выполняться в ответ на два типа событий: событий формы, происходящих на уровне формы, например открытие формы, удаление или обновление записей, и событий элементов управления, которые происходят на уровне отдельных элементов управления, например полей, переключателей, командных кнопок и т. д.
Макросы отчетов могут быть связаны с двумя типами событий: событиями отчетов и событиями разделов. Первые выполняются на уровне всего отчета, а вторые - на уровне отдельных разделов (областей) отчета.
Задание 1
Создайте макрос, позволяющий открывать форму Регистрация клиентов с новой записи.
Примечание. Такое открытие формы необходимо прежде всего для того, чтобы при регистрации клиентов не было возможности испортить предыдущие записи. Для справочного просмотра записей этой таблицы можно создавать запросы, которые формировались бы на основании задания какого-либо параметра: фамилии, номера комнаты, дня заезда и т. д.
Порядок работы
1. Щелкните мышью вкладку Макросы.
2. Щелкните мышью кнопку Создать. Откроется окно Макрос.
3. Откройте список макрокоманд и выберите макрокоманду На запись.
4. Перейдите в область Аргументы макрокоманды.
5. В строке Тип объекта введите Форма.
6. В строке Имя объекта выберите из раскрывающегося списка имя формы Регистрация клиентов.
7. В строке Запись выберите из раскрывающегося списка Новая.
8. Сохраните макрос, введя его имя, например Новая_рег_кл.
9. Теперь необходимо вставить запуск макроса в форму Регистрация клиентов. Для этого откройте форму в режиме Конструктора.
10. Откройте Свойства формы.
11. В пункте свойств Текущая запись установите вызов макроса Новая_рег_кл.
Задание 2
Самостоятельно создайте макрос, позволяющий открывать форму Регистрация дополнительных услуг с новой записи.
Примечание. Для того чтобы программа имела законченный вид и позволяла связать воедино все частные задачи, которые ставились при постановке задачи, необходимо создать единую форму, позволяющую с помощью кнопок запускать частные задачи.
Задание 3
Самостоятельно создать форму Главная, предназначенную для запуска частных задач, вида рис. 32.
Для запуска такой формы Главная при входе в Access, а также при выходе из программы (выход из Access) используются макросы.
Задание 4
Создать макрос для запуска формы Главная при входе в Access.
Порядок работы
1. Щелкните мышью вкладку Макросы.
2. Щелкните мышью кнопку Создать. Откроется окно Макрос.
3. Откройте список макрокоманд и выберите макрокоманду Открыть форму.
4. Перейдите в область Аргументы макрокоманды.
5. В строке Имя формы введите Главная.
6. В строке Режим введите Форма.
7. В строке Режим окна введите Обычное.
8. Сохраните макрос, введя его имя обязательно AutoExec.
Задание 5
Создать макрос для выхода из программы.
Порядок работы
Щелкните мышью вкладку Макросы.
Щелкните мышью кнопку Создать. Откроется окно Макрос.
Откройте список макрокоманд и выберите макрокоманду Выход.
Сохраните макрос, введя его имя, например Выход.
ПРАКТИЧЕСКАЯ РАБОТА № 6
Создание программы «Учет продуктов на складе»
Постановка задачи
Создать программу, позволяющую вести учет поступления продуктов на склад ресторана с выдачей итогового отчета по приходу, расходу и остаткам продуктов.
Порядок работы
1. Создайте базу данных с именем файла Склад_имя_имя_.mdb.
2. Создайте, используя Конструктор, таблицы:
• Наименование продуктов - для ввода номенклатуры продуктов;
• Приход - для регистрации поступающих на склад продуктов;
• Расход - для регистрации расхода продуктов. Структура таблиц приведена на рис. 33-35.
3. Создайте связи между таблицами, как показано на рис. 36.
4. Создайте форму Приход, используя Конструктор форм. Вид формы приведен на рис. 37. Поле Стоимость вычисляется по формуле:
Стоимость = Количество * Цена
(для создания формулы используйте Построитель выражений).
5. Так как данные в вычисляемых полях формы не записываются в таблицу непосредственно, необходимо создать запрос Стоимость по приходу на обновление поля Стоимость в таблице Приход. Вид запроса приведен на рис. 38.
В запросе в поле Обновление введите формулу:
[Приход]![Количество] * [Приход]![Цена]
Сохраните запрос под именем Стоимость по приходу.
Рис.33
6. Для запуска запроса Стоимость по приходу создайте кнопку Обновление в форме Приход.
7. Создайте макрос Вых_прих для закрытия формы Приход.
8. Создайте кнопку Выход для запуска макроса Вых_прих.
9. Для того чтобы форма Приход открывалась на новой записи, создайте макрос Нов_прих подобно тому, как это делалось в практической работе № 5 (задание 1), подключив его для запуска в пункте Текущая запись свойств формы Приход.
Окончательный вид формы Приход приведен на рис. 39.
Особенностью программы является то, что для правильного проведения расхода надо иметь информацию об остатках продуктов на складе. Поэтому сначала определим остаток продуктов на складе, а затем оформим расход. Для вычисления остатка надо сгруппировать информацию о продуктах на складе по номенклатуре, отдельно для таблиц Приход и Расход.
10. Создайте запрос Приход, позволяющий проводить группировку по номенклатуре продуктов. Вид запроса приведен на рис. 40.
11. Создайте запрос Расход, позволяющий проводить группировку по номенклатуре продуктов. Вид запроса приведен на рис. 41.
12. Создайте запрос Остаток. Для этого в Конструктор запроса добавьте таблицу Наименование, а также запросы Приход и Расход. Создайте связи между полем Наименование из таблицы Наименование и полями Наименование из запросов Приход и Расход. Определите Параметры объединения, для чего щелкните мышью на линии связи, выделите ее, а затем, нажав правую клавишу мыши, откройте контекстное меню и войдите в пункт Параметры объединения. Выберите в качестве параметра объединения пункт 2.
В качестве расчетной формулы для вычисления остатка по количеству используйте формулу:
Ост_кол: IIf(Приход Запрос]![Sum-Количество]>0;
[Приход Запрос]![Sum-Количество];0)-
IIfРасход Запрос]![Sum-Количество]>0;
[Расход Запрос]! [Sum-Количество] ;0),
где Sum_Количество - поле, содержащее данные о количестве продуктов, сформированное в результате запросов на группировку по номенклатуре.
В качестве расчетной формулы для вычисления остатка по стоимости используйте формулу:
Ост_ст: IIf([Приход Запрос]![Sum-Стоимость]>0;
[Приход Запрос]! [Sum-Стоимость] ;0)-
IIfРасход Запpoc]![Sum-Cтоимocть]>0;
[Расход Запрос]! [Sum-Стоимость] ;0)
Цена: IIf([Ост_кол]>0;[Ост_ст]/[Ост_кол];0),
где Sum_Стоимость - поле, содержащее данные о стоимости продуктов, сформированное в результате запросов на группировку по стоимости.
Примечание. Для построения этого выражения используйте функцию IIF, которая находится в папке Функции - Встроенные функции.
Вид запроса приведен на рис. 42.
13. Создайте форму для регистрации расхода таким образом, чтобы в ней с помощью поля со списком выбиралось наименование продукта, по которому проводится расход, высвечивалась информация о наличии этого продукта на складе и открывались поля для оформления расхода. Для этого:
• создайте форму Остаток на основе запроса Остаток;
• войдите в конструктор формы и, удалив поле Наименование, создайте его в разделе Заголовок формы в виде поля со списком. При создании поля со списком в качестве способа получения значения укажите Поиск записи в форме на основе значения, которое содержит поле со списком;
• создайте подчиненную форму Расход, используя, например, Мастер создания форм. В качестве источника данных выберите запрос Остаток, а в качестве источника данных для подчиненной формы - таблицу Расход, включив туда все поля. Выберите вид представления данных Подчиненная форма. Созданная подчиненная форма будет иметь название Расход подчиненная форма.
Для того чтобы Расход подчиненная форма открывалась на новой записи, а в качестве наименования продукта и цены подставлялись, соответственно, наименование продукта из поля со списком и цена из поля Цена, создайте макрос Рас_новая_зп (рис. 43), который отрабатывает последовательное выполнение следующих команд: ОткрытьФорму, НаЗапись, Задать-Значение.
Рис.43
При написании команды НаЗапись в аргументе макрокоманды Запись укажите Новая.
При написании команды ЗадатьЗначение в первом случае в аргументе макрокоманды Элемент указать:
[Forms]![Расход подчиненная форма]![Наименование],
а в аргументе макрокоманды Выражение:
[Forms]![Остаток]![ПолеСоСписком6],
во втором случае, в аргументе макрокоманды Элемент указать:
[Forms]![Расход подчиненная форма]![Цена],
а в аргументе макрокоманды Выражение:
[Forms]! [Остаток]! [Цена].
Для того чтобы можно было оформить расход после получения справки об остатках, выполните следующее:
• откройте форму Остаток в режиме конструктора;
• сделайте активным Примечание формы и войдите в пункт меню Свойства;
• войдите в пункт меню События, и в поле Нажатие кнопки подключите макрос Рас_новая_зап.
Теперь при нажатии левой кнопки мыши в области примечания формы Остаток будет открываться Расход подчиненная форма (рис. 44).
Рис.44
14. Поле Стоимость в форме Расход подчиненная форма
сделайте вычисляемым, так как это делалось в пункте 4, и создайте запрос на обновление Стоимость по расходу (рис. 45). В поле Обновление введите формулу: