Создание запроса и построение подчиненной формы. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Создание запроса и построение подчиненной формы.



Эта форма может быть построена только на основе запроса, так как в ней должно быть вычисляемое поле (выражение) для расчета отпускной цены товара.

Бланк запроса в режиме конструктора показан на рисунке 14. Для автоматического заполнения поля «ОтпускнаяЦена» строим выражение с учетом того, что цена реализации больше закупочной на 35%:

ОтпускнаяЦена:Ccur([Склад]![Закупочная цена]*1,35*[Количество товара, купленного в данном заказе]),

где Ccur – тип данных (денежный).

Рис. 14 – Запрос для построения подчиненной формы

По созданному запросу стоим подчиненную форму. Строим мастером табличную автоформу, затем корректируем ее (см.рис.10).

В свойство поля "Количество товара в заказе" на вкладке "Данные" в строку "Условие на значение" с помощью построителя вводим выражение: ([Кол-во товара в заказе]<[Остаток]) Or ([Кол-во товара в заказе] = [Оста-ток]).

В строке "Сообщение об ошибке" размещаем текст: "Нельзя продать больше, чем есть на складе!" (см.рисунок).

 

Удаляем поле «код заказа». Форма подчиненная, а в составе главной уже есть «код заказа». Для поля «код товара» заменяем элемент «поле» на «поле со списком». Для него создаем запрос «Список товара...» (рис.15). Так как нельзя продать товары, которых на складе нет, задаем условие отбора для поля Остаток: больше 0. Это поле для просмотра на экран не выводим. На основе созданного запроса для ввода названий товара строим элемент управления «Поле со списком» в подчиненной форме так же, как делали это для поля «Код поставщика» в форме «Склад».

В области примечаний подчиненной формы (эта область табличной формы в составе главной формы не отражается!) создаем свободный элемент управления "Поле№.АА" для суммы заказа, в нем (свойства этого поля, вкладка Данные) задаем построителем выражений вычисляемое значение: =Sum([ОтпускнаяЦена]).

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

Рис.15.Бланк запроса "Список товара для подчиненной формы".

 

 

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

 

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

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

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

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

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

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

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

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

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

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

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

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

 

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

 

 

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

 

 

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

 

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

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

...

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

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

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

...

End Sub

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

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

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

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

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

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

 



Поделиться:


Последнее изменение этой страницы: 2016-08-12; просмотров: 239; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 34.227.191.136 (0.021 с.)