Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проектирование учебной БД 2007.docx
Скачиваний:
5
Добавлен:
11.11.2019
Размер:
2.91 Mб
Скачать

Создание связанной формы «Оплата»

Еще одной формой, которая необходима для формы «Заказ» является форма «Оплата», которая в режиме конструктора имеет вид:

Форма создается для таблицы «Оплата» и имеет следующие особенности:

  • Создать форму с помощью мастера для всех полей таблицы с внешним видом - ленточный;

  • Скрыть поле «Номер заказа» и сузить его размер до минимального;

  • Автоматически сформировать «Номер заказа» перенеся его из формы «Заказы». Для этого в событии «До обновления» формы «Оплата» необходимо с помощью редактора создать процедуру обработки события следующего вида:

If Nz([Номер заказа] )= 0 Then

[Номер заказа] = Forms![Заказ]![Номер заказа]

End If

Эта процедура для каждой новой записи значению поля «Номер заказа» присваивает значение одноименного поля из формы «Заказы».

  • В примечание формы добавьте несвязанное поле с итоговой суммой по заказу, включив в свойство «Данные» формулу и изменив надпись как показано на рисунке.

  • Закройте созданную форму с сохранением изменений.

Продолжение создания формы «Заказ»

После создания формы «Оплата» можно продолжить разработку формы «Заказы». В дополнение к уже созданным элементам формы необходимо:

  • Вставить подчиненную форму «Спецификация»;

  • Добавить кнопку «Новый», которая позволит создать запись для нового заказа, присвоив ему очередной номер и задав дату заказа равную текущей дате.

  • Добавить кнопку, вызывающую форму «Оплата» с отображением записей только для данного заказа;

  • Создать поле с итоговыми суммами по заказу.

Указанные действия выполняются следующим образом.

Откройте ранее разработанную форму «Заказ» в режиме конструктора. Вставка подчиненной формы:

На вкладке панели элементов «Конструктор» щелкнуть в группе «Элементы управления» кнопку «Подчиненная форма/отчёт», а затем при нажатой левой клавише выделить место под подчиненную форму в форме «Заказ». После этого запускается мастер построения подчиненных форм. Первым окном, которое появится на экране, будет:

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

Последнее окно запрашивает имя подчиненной формы. Здесь нужно просто нажать кнопку «Готово». Далее следует отрегулировать размер прямоугольника под подчинённую форму, чтобы форма «Спецификация» разместилась целиком.

Создание кнопки «Новый»

Форма «Заказ» создана в режиме «В один столбец» и отображает сведения об одном заказе. В таких формах нет свободной строки для добавления новой записи, как это происходит в ленточных формах (формы «Справочник товаров», «Списки клиентов» и т.д.). Поэтому нужно создать средство для создания новой (пустой) записи о заказе. Тут же надо предусмотреть занесение в новый заказ номера заказа и даты заказа. Номер заказа будет формироваться по известному принципу: максимальный существующий номер плюс 1. В качестве даты заказа в большинстве случаев удобно использовать системную дату компьютера. Все эти действия реализуются программным кодом привязанным к нажатию кнопки. Для этого создадим кнопку с надписью «Новый».

При вставке в форму «Заказ» кнопки «Новый» (действия по созданию кнопки смотри ниже) в Access 2007 в событие «Нажатие кнопки» , как указывалось выше, добавляется внедрённый макрос. Можно, конечно, сделать указанные действия в виде макросов, но для этого вначале нужно было бы изучить специфические средства макросов. Поэтому программный код будем создавать в VBA.

Итак, сначала в форму необходимо вставить кнопку из вкладки «Конструктор», как это было описано выше, и выбрав категорию «Обработка записей» и действие «Добавить запись». В окне выбора формы кнопки необходимо включить переключатель «Текст» и ввести слово – Новый. Созданная кнопка позволяет добавлять новые записи в таблицу «Заказ». При создании кнопки СУБД автоматически добавляет в событие «Нажатие кнопки» внедрённый макрос обраб отки события следующего вида:

Преобразовать внедрённый макрос в программный код на VBA в Access 2007 невозможно, потому сформируем из внедрённого макроса изолированный. Для этого выделим два первых оператора макроса как показано на рисунке и скопируем в буфер (Ctrl-C). Оператор в третьей строке должен выдавать сообщение об ошибке, если будет невозможно создать новую запись о заказе. Но для наших целей он не нужен. Затем на вкладке «Создание» выбреем позицию «Макрос» как показано на рисунке:

В появившемся окне конструктора макроса вставим из буфера выделенные ранее строки и сохраним макрос под именем, например «НовыйЗаказ». Затем в свойствах кнопки «Новый» выберем событие «Нажатие кнопки» и для его обработки укажем вновь сформированный макрос как показано ниже.

Теперь событие обрабатывает не внедрённый, а изолированный макрос и его можно преобразовать в код VBA. Это делается так:

На вкладке «Работа с базами данных» нажать кнопку «Преобразовать макросы формы». В появившемся всплывающем окне

нажать кнопку «Преобразовать». О завершении преобразования сообщается транспорантом

Теперь событие обрабатывает программный код на VBA:

'------------------------------------------------------------

' Кнопка18_Click

'------------------------------------------------------------

Private Sub Кнопка18_Click()

On Error GoTo Кнопка18_Click_Err

DoCmd.GoToRecord , "", acNewRec

Кнопка18_Click_Exit:

Exit Sub

Кнопка18_Click_Err:

MsgBox Error$

Resume Кнопка18_Click_Exit

End Sub

Этот программный код имеет следующий смысл.

Операторы On Error ,MsgBox Error$ ,Resume являются операторами БЕЙСИКа и служат для организации обработки ошибок. Это стандартный набор операторов, создаваемый мастером построения кнопок. Оператор DoCmd.GoToRecord , , acNewRec осуществляет создание новой записи о заказе и переход к ней.

Однако в задачу кнопки входит также создание нового номера записи и занесение текущей даты в дату заказа. Поэтому в процедуру после оператора DoCmd.GoToRecord , , acNewRec необходимо добавить следующие операторы:

[Номер заказа] = Nz(DMax ( "[Номер заказа]" , "[Заказ]")) +1

[Дата заказа] = Date()

DoCmd.GoToControl "ПолеСоСписком11"

Этим фрагментом программы в поле «Номер заказа» заносится максимальный код товара увеличенный на единицу; в поле «Дата заказа» заносится системная дата и последним оператором управление передается объекту «ПолеСоСписком11». Это поле со списком, которым мы заменили «Код клиента» ранее.

Заметим, что создание нового номера заказа аналогично созданию новых кода товара и кода клиента. Однако в соответствующих формах сначала создавалось несвязанное поле, где вычислялся новый код, а затем при возникновении события «До обновления» рассчитанный код помещался в соответствующее поле. Здесь же мы обошлись без создания поля, сразу рассчитав новый номер заказа и присвоив его полю «Номер заказа». Этот вариант гораздо проще. Вся процедура обработки события «Нажатие кнопки» вместе с добавленным фрагментом будет выглядеть так.

Private Sub Кнопка18_Click()

On Error GoTo Err_Кнопка18_Click

DoCmd.GoToRecord , , acNewRec

If Nz([Номер заказа]) = 0 Then

[Номер заказа] = Nz(DMax ( "[Номер заказа]" , "[Заказ]")) +1

[Дата заказа] = Date()

End If

DoCmd.GoToControl "ПолеСоСписком11"

Кнопка18_Click_Exit:

Exit Sub

Кнопка18_Click_Err:

MsgBox Error$

Resume Кнопка18_Click_Exit

End Sub

Создание кнопки оплата.

Следующим объектом, который нужно создать является кнопка «Оплата». Кнопка создается обычным путем. В появившейся серии окон нужно выбрать позиции, как показано на рисунках.

О кончание построения кнопки выполняется обычным путем. В результате появляется кнопка с внедрённым макросом, при нажатии которой открывается форма «Оплата». При этом в форме отображаются только записи об оплате для текущего заказа.

Создание поля с итоговой суммой.

И последним объектом, который необходимо создать в форме «Заказы», является поле с итоговой суммой по заказу. В подчиненной форме «Спецификация» такое поле было построено как скрытое (имя поля «Поле15» ). Для того, чтобы показать значение этого поля в форме «Заказы», необходимо создать несвязное поле и в его свойстве «Данные» создать с помощью построителя выражений ссылку на соответствующее поле в форме «Спецификация» следующего вида:

Выражение [Спецификация].Form![Поле15] попадет в свойство «Данные» построенного поля, если при выборе подсвеченных позиций построителя выражений нажать кнопку «Вставить», а затем «ОК».

После сохранения форма «Заказы» готова к работе. Ее конечный вид должен быть примерно таким.

В результате всей предыдущей работы были созданы ряд форм для ввода данных в базу. Однако выбор и открытие этих форм из вкладки «Формы» не удобен для конечного пользователя. Необходимо создать организующую форму с удобным интерфейсом, которая позволила бы работать с набором форм, вызывая их с помощью кнопок. Для создания таких форм в ACCESS предусмотрен механизм создания кнопочных форм.