Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛабРаб3.doc
Скачиваний:
4
Добавлен:
21.09.2019
Размер:
89.09 Кб
Скачать

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([ЦенаРозничн] - [ЦенаПоставщик])*[Количество],

то получим требуемый результат. Для этого поместим в область заголовка свободное поле и введем вышеприведенную формулу в свойство Данные, воспользовавшись Построителем выражений. Заметим, что знак равенства "=" является обязательным атрибутом вычисляемого поля. Чтобы результат выводился в денежных единицах, на карточке Макет нужно выбрать формат Денежный для этого поля.

Создание Подчиненной формы Товары

Подчиненные формы предоставляют большую гибкость при отображении и вводе данных из нескольких таблиц. Можно даже редактировать все поля, не задумываясь о целостности данных. Кроме того, подчиненная форма позволяет вводить в форму данные со связями типа один-ко-многим. Подчиненная форма - это форма внутри формы. Она дает возможность использовать данные из нескольких таблиц в одной форме. С ее помощью можно одновременно отображать данные из одной таблицы, записанные в одном формате, и данные из другой таблицы, записанные в совершенно другом формате. Например, в главной форме можно отображать одну запись о клиенте, а в подчиненной форме - несколько записей о приобретенных им товарах и их стоимости. При создании подчиненной формы происходит ее связывание с главной формой. В подчиненной форме будут отображены только те записи, которые связаны с главной формой. Основное преимущество подчиненных форм состоит в том, что они отображают связи один-ко-многим. Главная форма представляет часть связи один, а подчиненная - многим.

Для создания подчиненных форм чаще всего используется Мастер форм. Без использования Мастера придется отдельно создавать как главную, так и подчиненную форму, а затем внедрять подчиненную форму в главную и связывать их. Самым удобным способом создания подчиненных форм без использования Мастера является метод перетаскивания формы из окна БД, потому что в этом случае Access пытается установить связь между формами.

Первым шагом при создании и внедрении подчиненных форм является создание формы, которая будет использоваться как подчиненная, что и было сделано в задании 5. При создании подчиненной формы необходимо также задать значение Таблица для свойства формы Режим по умолчанию.

Готовую подчиненную форму можно вставить в главную. Самый простой способ сделать это – отобразить главную форму и перетащить в нее подчиненную, при этом автоматически будет создан элемент управления подчиненной формы, и они, возможно, будут связаны. Для вставки подчиненной формы в главную форму нужно выполнить следующие действия:

  1. Отобразить главную форму в режиме конструктора так, чтобы было видно и окно БД.

  2. Отобразить объекты карточки Формы в окне БД.

  3. Выделить подчиненную форму и перетащить ее в главную.

  4. Задать такой размер подчиненной формы, чтобы она помещалась на экране ниже главной.

  5. Удалить надпись подчиненной формы.

  6. Вызвать окно свойств подчиненной формы для проверки правильности связи.

Если строки свойств Подчиненные поля и Основные поля пусты, то это значит, что главная форма не связана с подчиненной.

При перетаскивании формы из окна БД в другую форму для создания подчиненной формы Access пытается автоматически установить связь между формами. То же самое происходит и при перетаскивании какой-либо формы или отчета в другой отчет.

Access устанавливает связь, если соблюдаются следующие условия:

  1. Главная и подчиненная форма создана на основе таблиц, связь между которыми указана в окне Схема данных.

  2. В главной и подчиненной формах содержатся поля с одинаковыми типами и именами, а одно из полей главной формы является ключевым полем базовой таблицы.

Если Access обнаружит связь или одинаковые поля, в строках свойств формы будут показаны имена полей, определяющих связь. Следует убедиться в правильности автоматического связывания. Если в главной таблице используются результаты выполнения запроса (или одно из перечисленных условий не выполняется), Access не будет выполнять автоматическое связывание.

Строки свойств Подчиненные поля и Основные поля должны содержать одинаковое количество полей и представлять данные одинакового типа. Даже если названия полей различаются, можно установить связь для этих полей, если в них содержатся однотипные данные. Поэтому для создания связи нужно для свойств Подчиненные поля и Основные поля ввести одинаковое имя поля. Если связь не установлена, то при отображении формы в подчиненной форме будут показаны все записи из соответствующей таблицы. Если связь установлена, то в подчиненной форме будут представлены только отобранные записи, соответствующие записи главной формы.