Создание макросов. Автоматическое заполнение полей ЦенаПродажи и Сумма. Автоматический расчет поля ОбщаяСумма (суммирование полей).
Приобретение навыков по созданию макросов, для автоматического заполнения полей форм и автоматического расчета полей формы.
Макрос — это объект Access, используемый для автоматизации действий пользователя. Макровызовы выполняются в ответ на события в форме. Например, событию Нажатие клавиши кнопки можно «приписать» макрокоманду ОткрытьФорму,событию После обновления некоторого поля «приписать» макрокоманду ЗадатьЗначениедругому полю и т.д.
Access содержит более 50 макрокоманд. Перечень имен макрокоманд и описание макрокоманд можно получить из справочной системы Access, нажав клавишу F1.
Создание простого макроса предполагает выполнение нескольких действий:
1. Выберите закладку Макросыв главном окне базы данных Access и нажмите кнопку Создать.
2. После открытия окна Конструктора макросовнажмите кнопку Имена макросови кнопку Условия на Панели инструментов,для того чтобы появились соответствующие колонки окна. В этом окне и строятся макросы.
Здесь каждая строка с именем представляет собой отдельный макрос. В первой колонке записывают имя макроса, во второй — условие его выполнения (если необходимо), в третьей — макрокоманду, которую выбирают из списка, в последней, если требуется, — примечание. В нижней части окна задают значения аргументов макрокоманды, каждая макрокоманда имеет свой перечень аргументов.
На рисунке показан макрос с именем Ввод, который выполняет макрокоманду ЗадатьЗначение. Аргументы указывают, что полю [Сумма] присваивается значение [Цена]*[Количество]. Отметим, что имена полей заключаются в квадратные скобки.
Отметим также, что в одном окне Конструктора макросов можно записать несколько макросов (с разными именами), а затем сохранить их в закладке Макросы под общим именем, например, МоиМакросы. В этом случае обращение к макросу Ввод записывается так: МоиМакросы.Ввод.
Автоматическое заполнение полей ЦенаПродажи и Сумма
В таблице ЗаказаноТовара, с количеством и суммой следует хранить цену на момент продажи. Кроме того, поля ЦенаПродажи и Сумма должны заполняться автоматически.
Поле ЦенаПродажи (тип данных – денежный) необходимо добавить в таблицу ЗаказаноТовара, а не в таблицу Товары, так как оно характеризует конкретную строку заказа наряду с полями Количество и Сумма. В режиме Конструктора добавьте в таблицу ЗаказаноТовара поле ЦенаПродажи.
Следует добавить поле ЦенаПродажи и в соответствующий запрос: в запрос для подчиненной формы ЗаказаноТовара Под-форма введите поле ЦенаПродажи.
Необходимо создать два макроса и «приписать» их нужным полям, для автоматического заполнения полей ЦенаПродажи и Сумма. Первый макрос должен выполнять присваивание значения полей [ЦенаПродажи]=[Цена] при вводе товара, второй — выполнять присваивание [Сумма]=[ЦенаПродажи]*-[Количество] при любом обновлении полей ЦенаПродажи и Количество.
Сформируйте макросы, присвоив им для ясности имена ЦенаПродажи и Сумма.
Закройте и сохраните макросы с общим именем Заказы.
Необходимо обеспечить вызов созданных макросов в подчиненной форме ЗаказаноТовараПодформа с помощью событий: первый макрос должен быть «приписан» событию После обновления поля КодТовара; второй — событию После обновления полей Количество и ЦенаПродажи. Проделайте следующие действия:
1. Откройте форму ЗаказаноТовараПодформа в режиме Конструктора, выберите поле со списком КодТовара и откройте для него закладку Событияокна Свойства.
2. В свойство После обновления поля введите имя макроса Заказы.ЦенаПродажи (выберите из списка макросов).
3. Аналогично для полей Количество и Цена Продажи установите событие После обновления, но уже на макрос Заказы.Сумма.
4. Закройте форму ЗаказаноТовараПодформа и проверьте как все это работает. Откройте форму Заказы: при отборе новых товаров или замене товара цена продажи заполняется автоматически, а при вводе/изменении количества и цены продажи — сумма в строке пересчитывается.
Автоматический расчет поля ОбщаяСумма: суммирование полей
Нам осталось составить макрос, пересчитывающий поле ОбщаяСумма при изменении состава заказа, т.е. при наступлении в подформе ЗаказаноТовараПодформа следующих событий:
- обновления (изменения) суммы в одной из строк или добавления строки — событие После обновления подформы;
- удаления строки — событие После подтверждения Del подформы.
Сформируем макрос ОбщаяСумма.
Макрос ОбщаяСумма состоит из двух макрокоманд Задать-Значение. Первая макрокоманда непосредственно рассчитывает общую сумму с помощью функции DSum:
DSum("[Cyммa]";"[3aкaзaнoToвapa]";"[Koд3aкaза] = [Forms] ! [Заказы] ! [КодЗаказа]")
Как видно, вычисленное функцией значение присваивается полю ОбщаяСумма в форме Заказы. При этом используется полное имя поля — [Forms]![Заказы]![ОбщаяСумма] поскольку обращение к нему производится из подформы.
Функция DSum работает так, что если отсутствуют записи, удовлетворяющие условию в функции DSum, то она получает значение Null. Поэтому вторая макрокоманда задает значение [ОбщаяСумма]=0 при условии, что в предыдущей макрокоманде был рассчитан Null.
Самую большую вычислительную работу в этом макросе выполняет функция DSum. Она суммирует поля Сумма в таблице ЗаказаноТовара, отбирая записи по условию [КодЗаказа]:=[Forms]![Заказы]![КодЗаказа], т.е. отбирает только те записи, которые относятся к текущему заказу.
Приведем синтаксис (правило записи) функции DSum:
DSum ("Что суммировать"; "Где суммировать"; "Условие отбора суммируемых записей")
Теперь обеспечим вызов построенного макроса, т.е. припишем его событиям подформы ЗаказаноТовараПодформа.
1. Откройте форму ЗаказаноТовараПодформа в режиме Конструктора, выделите ее кнопкой и затем откройте ее свойства.
2. В закладке Событиянайдите свойства После обновления и После подтверждения Del и присвойте им имя созданного макроса Заказы.ОбщаяСумма и закройте форму.
3. Проверьте работу формы Заказы: при изменении строки заказа, добавлении или удалении строки общая сумма будет пересчитываться.
Дата добавления: 2016-04-14; просмотров: 2831;