Нам осталось составить макрос, пересчитывающий поле ОбщаяСумма при изменении состава заказа, т.е. при наступлении в подформе ЗаказаноТовараПодформа следующих событий:
·обновления (изменения) суммы в одной из строк или добавления строки — событие После обновления подформы;
·удаления строки — событие После подтверждения Del подформы.
Сформируем макрос ОбщаяСумма, а затем поясним его (рис. 3).
Рис.3. Сложный макрос ОбщаяСумма
Макрос ОбщаяСумма состоит из двух макрокоманд Задать-Значение. Первая макрокоманда непосредственно рассчитывает общую сумму с помощью функции DSum :
DSum("[Сумма]";"[ЗаказаноТовара]";"[КодЗаказа] = [Forms]![Заказы]![КодЗаказа] ")
Как видно, вычисленное функцией значение присваивается полю ОбщаяСумма в форме Заказы. При этом используется полное имя поля — [Forms]![Заказы]![ОбщаяСумма], поскольку обращение к нему производится из подформы.
Функция DSum работает так, что если отсутствуют записи, удовлетворяющие условию в функции DSum , то она получает значение Null. Поэтому вторая макрокоманда задает значение [ОбщаяСумма]=0 при условии, что в предыдущей макрокоманде был рассчитан Null (рис. 4).
Рис.4. Аргументы второй макрокоманды макроса ОбщаяСумма.
Самую большую вычислительную работу в этом макросе выполняет функция DSum . Более конкретно, она суммирует поля Сумма в таблице ЗаказаноТовара, отбирая записи по условию [КодЗаказа]=[Forms]![Заказы]![КодЗаказа], т.е. отбирает только те записи, которые относятся к текущему заказу.
Приведем синтаксис (правило записи) функции DSum :
DSum("Что суммировать"; "Где суммировать"; "Условие отбора суммируемых записей")
Условие отбора может отсутствовать, тогда суммируются все записи из указанной таблицы запроса.
Теперь обеспечим вызов построенного макроса, т.е. припишем его событиям подформы ЗаказаноТовараПодформа.
1. Откройте форму ЗаказаноТовараПодформа в режиме Конструктора, и выделите её кнопкой и затем откройте ее свойства
2. В закладке События найдите свойства После обновления и После подтверждения Del и присвойте им имя созданного макроса Заказы.ОбщаяСумма и закройте форму.
3. Проверьте работу формы Заказы: при изменении строки заказа, добавлении или удалении строки общая сумма будет пересчитываться
Таким образом, мы ввели самые необходимые усовершенствования для удобной работы с формой Заказы .
Задание
Заполнить таблицу Заказы информацией о 3 заказах, используя доработанную форму Заказы.
Практическая работа № 6
Усовершенствование формы Заказы
Для быстрого ввода новых клиентов и товаров, которых еще нет в базе данных, удобно иметь на форме кнопку Новый клиент. Это даст возможность вызывать соответствующую форму и вводить данные о новых клиентах, не выходя из формы Заказы (рис. 1).
Рис. 1. Усовершенствованный вид формы Заказы
Важно отметить, что, при закрытии формы Клиенты , списки клиентов в форме Заказы не будут обновляться, если она в этот момент открыта. Поэтому при каждом включении формы Заказы следует делать ее обновление: Свойству Включение формы Заказы надо присвоить макрос ее обновления. Одновременно этот же макрос должен закрывать форму Клиенты, если пользователь забыл ее закрыть и перешел в форму Заказы.
Выполните эти усовершенствования в следующей последовательности:
1. Вначале создайте макросы для этих трех кнопок (рис. 2).
Рис. 2. Макросы вызова для кнопок
Макрос использует макрокоманду Открыть-Форму, который открывает форму Клиенты.
Вставьте кнопку в раздел Примечания формы Заказы, введите название кнопок (закладка Макет окна Свойства, свойство Подпись). Далее припишите кнопке (закладка События окна Свойства, свойство Нажатие кнопки) созданный макрос Заказы.Клиенты.
Закройте форму и проверьте работу кнопки. Кнопка Новый Клиент должна вызывать форму Клиент.
Смысл задуманного при вводе нового клиента пока не достигнут: при открытой форме Заказы после закрытия формы Клиенты новый клиент сразу не попадает в список клиентов формы Заказы. Убедитесь в этом, проделав следующую последовательность действий: в форме Заказы нажмите кнопку НовыйКлиент, в открывшейся форме Клиенты введите новую фамилию и закройте форму, в форме Заказы откройте список Клиенты, чтоб найти эту фамилию — ее нет в списке.
Этот недостаток устраните присвоением свойству Включение формы Заказы макроса обновления поля со списком, в котором вводится код клиента. Сначала на форме Заказы в режиме конструктора откройте окно свойств для этого поля со списком. На вкладке Другие измените свойство Имя на КодКлиентаПС. На рис. 3 показано создание соответствующего макроса ОбновитьЗаказы. Он состоит из макрокоманды Обновление. Параметром этой макрокоманды является имя поля со списком.
Рис. 3. Макрос для события Включение формы Заказы
Проверьте совместную работу формы Заказы с формой Клиенты
Создайте макрос, который позволит открывать формы Заказы и Клиенты не на первой, а на новой, пустой записи.
Рис.4. Макросы перехода на новую запись.
На Рис.4. показаны параметры для макрокоманды НаЗапись макроса для формы Заказы. Аналогично задайте параметры макрокоманды для формы Клиенты (изменится Имя объекта на Клиенты). Сохраните оба макроса под общим именем Открытие. Присвойте свойству Открытие первый макрос для формы Заказы, второй для формы Клиенты.
Практическая работа № 7
Фильтрация данных
Удобно подготовить и сохранить для таблицы или формы целый ряд фильтров, которые могут быть загружены в окно фильтра и применены. Это возможно в режиме Расширенного фильтра.
Расширенный фильтр вызывается командой Записи/ Фильтр/ Расширенный фильтр или соответствующей кнопкой панели инструментов. Окно расширенного фильтра похоже на окно конструктора запросов. В строку Поле перетаскиваются мышью поля списка, по которым задаются условия отбора. В строке Сортировка может быть выбран тип сортировки для любого из выбранных полей
Для сохранения подготовленного фильтра выполните команду Файл/ Сохранить как запрос. Чтобы использовать сохраненный фильтр, можно вызвать его командой Файл/ Загрузить из запроса также в режиме Расширенного фильтра.
Дата: 2019-07-24, просмотров: 211.