
If IsNull(ДатаПоступл) Then
ДатаПоступл = Date
End If
End Sub
Перейдем к определению розничной цены. Здесь потребуется не только кнопка, но и поле, в которое будет вводиться значение наценки, используемое при расчете розничной цены. Поэтому разместим на форме поле под названием Наценка, и при включенной на панели элементов кнопке Мастера поместим на форму кнопку Вычислить розничную цену. В качестве действия, выполняемого при нажатии кнопки, можно выбрать сохранение записи, т.е. при нажатии данной кнопки будет сохраняться текущая запись. Строка сохранения записи, записанная мастером выглядит так:
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, ,acMenuVer70
Здесь указывается, какую команду меню следует выполнить. Аналогичным образом можно программно выполнять любые команды меню Access.
Выполним расчет розничной цены в соответствии с торговой наценкой, которая может варьироваться. Для торговой наценки используется свободное поле, т.е. поле, которое не связано ни с одним полем источника данных. В это поле будем вводить наценку, а при нажатии кнопки Вычислить розничную цену будет определяться и записываться в соответствующее поле розничная цена единицы товара, определяемого текущей записью на форме. Код событийной процедуры содержит один оператор присваивания:
ЦенаРозничн = ЦенаПоставщик * (1 + Наценка/100).
Удобно вводить наценку в процентах, поэтому она делится на 100.
Теперь, если написать вышеприведенный оператор перед оператором сохранения, то после изменения розничной цены запись будет автоматически сохраняться.
Чтобы исключить ввод в поле Наценка нечислового значения, выберем для свойства Формат поля этого элемента управления значение Фиксированный.
Добавим в событийную процедуру для кнопки Вычислить розничную цену проверку условия Наценка>0, чтобы нельзя было назначить розничную цену меньше оптовой. При нарушении этого условия будет появляться сообщение об ошибке, которое выводит процедура MsgBox. В результате все тело процедуры примет вид:
If Наценка > 0 Then
ЦенаРозничн = ЦенаПоставщик * (1 + Наценка/100)
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Else
MsgBox ("Наценка должна быть больше нуля!")
End If
Как правило, есть некоторое значение наценки, которое применяется для большинства товаров. Поэтому будет естественным, если это значение будет автоматически вводиться в поле Наценка на форме. Для этого мы воспользуемся событием загрузки формы. Событие Загрузка (Load) возникает при открытии формы и выводе на экран ее записей.
Такая процедура при открытии формы Прием товаров выглядит следующим образом:
Private Sub Form_Load()
Наценка = 20
End Sub
В результате работы этой процедуры в поле Наценка при загрузке формы будет введено значение 20. Если потребуется использовать какое-либо другое значение наценки, то его можно изменить вручную в процедуре.
Использование вычисляемого поля на форме рассмотрим на примере расчета предполагаемой прибыли, которая представляет собой просуммированную для всех товаров разность между розничной и оптовой ценой. Встроенная статистическая функция Sum вычисляет итоговое значение для всех записей источника данных. Поэтому, если мы разместим в области заголовка или примечания формы вычисляемое поле с формулой
=Sum([ЦенаРозничн] - [ЦенаПоставщик])*[Количество],
то получим требуемый результат. Для этого поместим в область заголовка свободное поле и введем вышеприведенную формулу в свойство Данные, воспользовавшись Построителем выражений. Заметим, что знак равенства "=" является обязательным атрибутом вычисляемого поля. Чтобы результат выводился в денежных единицах, на карточке Макет нужно выбрать формат Денежный для этого поля.
Задание 4. Создание формы Поставщики
В контейнере БД Приложение перейти на карточку Формы.
Щелкнуть кнопку Создать.
В диалоговом окне Новая форма выделить Автоформа: в столбец и выбрать из списка таблицу Поставщики. Щелкнуть OK.
Задание 5. Модификация формы Прием товаров
В контейнере БД Приложение перейти на карточку Формы.
Выделить форму Прием товаров.
В контекстном меню выполнить команду Сохранить как… .
В диалоговом окне Сохранение щелкнуть OK.
Переименовать форму Копия "Прием товаров" в Подчиненная форма Товары.
Открыть Подчиненную форму Товары.
Перейти в режим Конструктор.
Удалить из формы все поля и кнопки за исключением полей и надписей Поставщик, Категория, СтранаИзготов, Наименование, Количество, ЦенаПоставщик.
Создание Подчиненной формы Товары
Подчиненные формы предоставляют большую гибкость при отображении и вводе данных из нескольких таблиц. Можно даже редактировать все поля, не задумываясь о целостности данных. Кроме того, подчиненная форма позволяет вводить в форму данные со связями типа один-ко-многим. Подчиненная форма - это форма внутри формы. Она дает возможность использовать данные из нескольких таблиц в одной форме. С ее помощью можно одновременно отображать данные из одной таблицы, записанные в одном формате, и данные из другой таблицы, записанные в совершенно другом формате. Например, в главной форме можно отображать одну запись о клиенте, а в подчиненной форме - несколько записей о приобретенных им товарах и их стоимости. При создании подчиненной формы происходит ее связывание с главной формой. В подчиненной форме будут отображены только те записи, которые связаны с главной формой. Основное преимущество подчиненных форм состоит в том, что они отображают связи один-ко-многим. Главная форма представляет часть связи один, а подчиненная - многим.
Для создания подчиненных форм чаще всего используется Мастер форм. Без использования Мастера придется отдельно создавать как главную, так и подчиненную форму, а затем внедрять подчиненную форму в главную и связывать их. Самым удобным способом создания подчиненных форм без использования Мастера является метод перетаскивания формы из окна БД, потому что в этом случае Access пытается установить связь между формами.
Первым шагом при создании и внедрении подчиненных форм является создание формы, которая будет использоваться как подчиненная, что и было сделано в задании 5. При создании подчиненной формы необходимо также задать значение Таблица для свойства формы Режим по умолчанию.
Готовую подчиненную форму можно вставить в главную. Самый простой способ сделать это – отобразить главную форму и перетащить в нее подчиненную, при этом автоматически будет создан элемент управления подчиненной формы, и они, возможно, будут связаны. Для вставки подчиненной формы в главную форму нужно выполнить следующие действия:
Отобразить главную форму в режиме конструктора так, чтобы было видно и окно БД.
Отобразить объекты карточки Формы в окне БД.
Выделить подчиненную форму и перетащить ее в главную.
Задать такой размер подчиненной формы, чтобы она помещалась на экране ниже главной.
Удалить надпись подчиненной формы.
Вызвать окно свойств подчиненной формы для проверки правильности связи.
Если строки свойств Подчиненные поля и Основные поля пусты, то это значит, что главная форма не связана с подчиненной.
При перетаскивании формы из окна БД в другую форму для создания подчиненной формы Access пытается автоматически установить связь между формами. То же самое происходит и при перетаскивании какой-либо формы или отчета в другой отчет.
Access устанавливает связь, если соблюдаются следующие условия:
Главная и подчиненная форма создана на основе таблиц, связь между которыми указана в окне Схема данных.
В главной и подчиненной формах содержатся поля с одинаковыми типами и именами, а одно из полей главной формы является ключевым полем базовой таблицы.
Если Access обнаружит связь или одинаковые поля, в строках свойств формы будут показаны имена полей, определяющих связь. Следует убедиться в правильности автоматического связывания. Если в главной таблице используются результаты выполнения запроса (или одно из перечисленных условий не выполняется), Access не будет выполнять автоматическое связывание.
Строки свойств Подчиненные поля и Основные поля должны содержать одинаковое количество полей и представлять данные одинакового типа. Даже если названия полей различаются, можно установить связь для этих полей, если в них содержатся однотипные данные. Поэтому для создания связи нужно для свойств Подчиненные поля и Основные поля ввести одинаковое имя поля. Если связь не установлена, то при отображении формы в подчиненной форме будут показаны все записи из соответствующей таблицы. Если связь установлена, то в подчиненной форме будут представлены только отобранные записи, соответствующие записи главной формы.
Задание 6. Работа с формой Прием товара
Открыть форму Поставщики в режиме Конструктор.
Создать кнопку с помощью панели элементов в области данных формы.
В контекстном меню кнопки выполнить команду Свойства.
В диалоговом окне Кнопка ввести: в поле Имя – _ПриемТовар, в поле Подпись – Прием товара, в поле Нажатие кнопки – установить курсор и щелкнуть кнопку
.
В диалоговом окне Построитель выбрать строку Макросы и щелкнуть OK.
В диалоговом окне Сохранение в поле Имя макроса ввести ПриемТовар и щелкнуть OK.
В диалоговом окне ПриемТовар: макрос в поле Макрокоманда выбрать из списка Открыть форму.
В области Аргументы макрокоманды выбрать из списка: в поле Имя формы – Прием товаров, в поле Режим данных – Добавление.
На панели инструментов щелкнуть кнопку Сохранить.
Закрыть диалоговое окно Кнопка: _ПриемТовар.
Перейти на форме Поставщики в Режим формы.
Щелкнуть кнопку Прием товара.
Ввести 2 реальных товара от разных поставщиков (для справки использовать таблицу Товары).
Создание сводной таблицы
Создание сводной таблицы начинается с вызова диалогового окна Новая форма нажатием кнопки Создать на карточке контейнера Форма. После выбора опции Сводная таблица будет запущен мастер сводной таблицы.
В первом диалоговом окне мастера необходимо выбрать таблицу или запрос, используемые для создания сводной таблицы. Можно выбрать несколько таблиц, но они должны быть связаны на уровне БД. В следующем диалоговом окне, отображаемом при нажатии клавиши Далее, требуется задать поля сводной таблицы. Задание полей сводной таблицы ничем не отличается от такой же процедуры в Excel. Вычисляемые поля располагаются в поле Данные макета сводной таблицы.
Удобнее всего создавать сводную таблицу на основе специально созданного запроса. В качестве примера построим сводную таблицу с именем СвТабл Покупатели–Заказы. Создадим запрос, включающий таблицы Покупатели, Заказы, Товары. Поля запроса – Фамилия, Город, Наименование, ЦенаРозничн, Количество. Вычисляемое поле – СтоимЗаказа. Имя запроса – Для СвТабл Покупатели-Заказы.
Переходим на карточку Форма и вызываем диалоговое окно Новая форма. Выбираем созданный запрос и запускаем мастер сводной таблицы. В первом диалоговом окне мастера переносим все доступные поля запроса в область полей сводной таблицы и нажимаем кнопку Готово.
На появившейся форме сводной таблицы перетаскиваем поле Город в область полей фильтра, поле Фамилия – в область полей строк, поле Наименование – в область полей столбцов, поля ЦенаРозничн, Количество и СтоимЗаказа – в область полей итогов. Для эксперимента и с целью уменьшения размеров сводной таблицы можно удалить поля ЦенаРозничн и Количество путем поочередного перетаскивания их за пределы сводной таблицы. Имя сводной таблицы СвТабл Покупатели-Заказы.