Формы для таблиц справочников
Для просмотра, ввода и редактирования данных справочных таблиц (Цвета, Курсы валют, Производители, Магазины созданы формы ленточного типа) (см. рис. 18,19,20,21). В примечании форм - кнопки перехода по записям, добавления и удаления записей, созданные с помощью мастера.
Рис.18. Форма «Производители»
Рис.19. Форма «Цвета»
Рис.20. Форма «Курс валют»
Рис.21. Форма «Магазины»
Форма Типы товаров – одиночная (карточка), то есть каждая запись на отдельной странице. Содержит две подчиненные формы - Группы товаров подчини и Размеры подчин. Связь между главной и подчиненными формами осуществляется по полям КодТипТов и Тип товара. То есть, листая в главной форме типы товаров, в подчиненных отображаются группы и размеры, относящиеся к текущему типу.
Каждая из форм (и главная, и подчиненные) содержат свои кнопки перехода по записям, добавления и удаления записей (см. рис. 22).
Ф
Рис.22. Форма «Типы товаров»
Форма Товарыленточного типа, также содержит внизу кнопки. Для отображения текстовых значений в числовых полях - внешних ключах (Тип товара, Группа товара, Производитель) используются поля со списком (см. рис. 23).
Рис.23. Форма «Товары»
Например, поле со списком Тип товара в источнике данных содержит запрос:
SELECT Типы_товаров.КодТипТовара, Типы_товаров.Тип_товара FROM Типы_товаров;
При этом заданы Число столбцов = 2, Ширина столбцов = 0см;2см, то есть ключевое поле-счетчик КодТипТовара скрыто (ширина 0см), а отображается текстовое значение типа товара.
Возле каждой записи форма содержит кнопку открытия формы ТоварыЦветаРазмеры с фильтром по текущему товару для просмотра ассортимента каждой единицы товара.
Кнопка содержит программный код на языке VBA на событие Нажатие кнопки:
Private Sub Кнопка17_Click()
DoCmd.OpenForm "ТоварыЦветаРазмеры", , , "[Товар] = " & Me.КодТовара
End Sub
Здесь используется команда DoCmd.OpenForm , открывающая форму с условием отбора: товар равен текущему значению КодТовара на текущей форме.
При выборе группы товара из списка учитывается выбранный тип товара (данные отфильтровываются).
Для этого на событие Получение фокуса поля со списком Группа товаров (см. рис. 24).:
Private Sub Группа_товара_GotFocus()
Me.Группа_товара.RowSource = "SELECT КодГруппы, Группа_товаров, Тип_товара FROM Группы_товаров WHERE Тип_товара = " & Me.Тип_товара
Me.Группа_товара.Requery
End Sub
Рис.24. Форма «Цвета и размеры товаров»
В первой строке кода меняется источник строк поля со списком Группа товаров с учетом выбранного Типа товара на форме.
Во второй строке кода обновляется это поле со списком.
На событие Потеря фокуса поля со списком Группа товаров источник строк принимает свой первоначальный вид (без условия отбора по типу товара):
Private Sub Группа_товара_LostFocus()
Me.Группа_товара.RowSource = "SELECT КодГруппы, Группа_товаров, Тип_товара FROM Группы_товаров"
Me.Группа_товара.Requery
End Sub
Форма ТоварыЦветаРазмеры также ленточного типа.
На следующем рисунке представлен пример нажатия кнопки Цвета, размеры на форме Товары (см. рис. 25):
Рис.25. Форма «Цвета и размеры товаров»
То есть можно просмотреть (а также добавить и отредактировать) цвета и размеры товара Женский шарф BUERBERY тонкий матерчатый с бахромой.
Формы для основных таблиц
Форма Поставки: источник формы - запроса Поставки запрос для отображения на форме расчетных значений цены (см. рис. 26).
Рис.26. Форма запроса «Поставки»
Форма Продажи в качестве источника содержит запрос Продажи Запрос для отображения рассчитанных значений (см. рис. 27):
Рис.27. Форма запроса «Продажи»
Для учета количества товара, который есть в наличии, на событие После обновления поля Кол-о создан следующий программный код:
Private Sub Кол_о_AfterUpdate()
Ost = DLookup("Остаток", "Текущие_остатки", "ТовЦветРазм = " & Me.ТовЦвРазм & " And Магазин = " & Me.Магазин)
If Nz(Ost, 0) = 0 Then MsgBox "Нет в наличии данного товара!"
If Кол_о > Ost Then MsgBox "Недостаточное количество есть в наличии! Текущий остаток - " & Ost
End Sub
В первой строке кода записывается в переменную Ost текущий остаток текущего товара в текущем магазине из запроса Текущие_остатки.
Во второй строке проверяется, если полученный остаток равен нулю, то выдается сообщение «Нет в наличии данного товара!»
В третьей строке проверяется, если текущее введенное количество товара меньше чем полученный остаток, то выдается сообщение "Недостаточное количество есть в наличии! Текущий остаток».