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

6.4. Построение сложной формы "Прием заказов".

В главную форму добавимподчиненную путемперетаскиванияеезначкаиз списка объектов базы данных ипроверим их связь по полю "Код заказа"(вкладка "Данные" окна "Свойства"подчиненной формы).

Добавляем в главную формув областьпримечанийдва новых поля:

- поле "Сумма заказа", куда переносим данные из "Поле№АА." подчиненной формы в виде выражения:=(ТовЗаказПодчФорм.Form!Поле№..АА). Это выражение строится в строкеДанныена вкладке "Данные" окна "Свойства" поля "Сумма заказа";

- поле "Сумма заказа с НДС", для которого вводим формулу:=["Сумма заказа"]*1,18в строкеДанныена вкладке "Данные" окна "Свойства" этого поля.

Позже добавим на главную форму еще две кнопки – для принятия и отмены заказа.

Для работы кнопки «Принять заказ» создаем Конструктором запрос на обновление поля "Остаток" в таблице Склад (рис.16). Вид запроса "Обновление" выбираем в ленте "Конструктор".

В строке "Обновление" поля "Остаток..." с помощьюПостроителяпишем выражение, в котором от остатка на складе отнимаем количество товара, проданное в данном заказе:

[Склад]![ОстатокТовара]-[Заказ-товар]![Количество товара, купленного в данном заказе].

Так как остатки должны обновляться только у тех товаров, которые куплены в оформляемом заказе, тоусловием отборастроим выражение:[Forms]![Заказы]![Код заказа].

Рис. 16 - Запрос для обновления поля "Остаток"

Созданный запрос должен работать при нажатиикнопки «Принять заказ».

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

Рис. 17 - Окно параметра запроса

Описанная процедура обработки события нажатия кнопки "Принять Заказ" записывается в модуле VBA. Эту запись можно открыть из окна свойств этой кнопки на вкладке "События" (строка "Нажатие кнопки"), щелкнув по символу "..." (рис.18).

Рис.18. Окно свойств кнопки.

Добавим в текст программы (процедуры) строку: DoCmd.GoToRecord. Эта команда переводит главную форму на новую запись (новый заказ). Кроме того, добавим команду для передачи фокуса полю ввода имени клиента (ПолеСоСписком№ЕЕЕ) в новом заказе (№ЕЕЕ – номер поля!).

Private Sub КнПринятьЗаказ_Click()

...

DoCmd.OpenQuery stDocName, acNormal, acEdit 'команда открытия запроса на обновление

DoCmd.GoToRecord 'команда перехода к новой записи

ПолеСоСписком№ЕЕЕ.SetFocus 'команда передачи фокуса полю ввода клиента

...

End Sub

Когда при записи очередного заказа поле выбора клиента получит фокус, кнопку "Принять Заказ" делаем недоступной. Этому событию (GotFocus()), назначим процедуру (команду): КнПринятьЗаказ.Enabled=False. Это необходимо, чтобы не вводить незаполненный заказ.

Доступной кнопка станет тогда, когда в подчиненной форме будет заполнено поле хотя бы одного названия товара (событие "Потеря фокуса (LostFocus)" для этого поля), процедура:

Private Sub ПолеСоСписком12_LostFocus()

Form_ГлФормПриемЗаказов.КнПринятьЗаказ.Enabled = True

End Sub

Здесь ссылка на главную форму необходима, потому что поле ввода названия товара (событие которого обрабатывается) находится в подчиненной форме, а кнопка – на главной.

Наносим в поле примечаний главной формы кнопку "Отменить_Заказ", которая закрывает главную форму приема заказа. Методика конструирования кнопки такая же, как и кнопки "Принять заказ", только в режиме Мастера надо выбирать категорию "Работа с формой", действие – "Закрыть форму".

Главная форма приема заказов должна открываться для добавления новой записи. Поэтому в процедуру ее открытия Form_Open (вкладка "События" свойств формы, строка "Открытие", щелчок по символу ..., строка Программы) добавим строку:

DoCmd.GoToRecord , "", acNewRec.

Кроме того, при открытии формы приема заказов надо иметь недоступной кнопку "Принять Заказ", для чего добавляем еще одну строку в процедуру открытия главной формы: КнПринятьЗаказ.Enabled = False. Полностью процедура открытия главной формы выглядит так:

Private Sub Form_Open(Cancel As Integer)

DoCmd.GoToRecord , "", acNewRec

КнПринятьЗаказ.Enabled = False

End Sub

В заключение построения сложной формы приема заказа определяем порядок перехода в полях формы, а также необходимость пропуска отдельных полей. Для этого в свойстве каждого поля на вкладке Другие задаем Индекс перехода по Tab и Переход по Tab: первое свойство определяет очередность получения фокуса полем, а второе свойство – получает фокус поле или нет (значение Да или Нет). Надо иметь в виду, что нумерация позиций табуляции начинается с 0, причем для каждой области сложной формы отдельно (главная, подчиненная, область примечаний).

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

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

Для кнопок главной формы свойство Переход по Tab устанавливаем в значение Нет.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]