Алгоритм определения наличия товаров при разработке базы данных в MS Access

№60-2,

Педагогические науки

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

Похожие материалы

В Федеральном государственном образовательном стандарте высшего образования по направлениям экономического профиля прописано, что выпускник, освоивший образовательную программу, должен владеть основными методами, способами и средствами получения, хранения, переработки информации, иметь навыки работы с компьютером как средством управления информацией. В связи с этим, в базовую часть Блока 1 образовательной программы обязательно включается дисциплина «Информатика». Нередко для наработки практических навыков студенты по данной дисциплине выполняют курсовую работу.

В качестве темы курсовой работы по дисциплине «Информатика» студентам можно предложить создание базы данных, осуществляющей учет экономической и хозяйственной деятельности некой вымышленной фирмы [1]. Студентам предоставляется право выбора направления работы фирмы, на их усмотрение оставляется организация учета и детали внутренних взаимоотношений в фирме.

Разработку структуры базы данных, конструирование разнообразных запросов и элементов интерфейса удобно выполнять в MS Access.

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

При продаже товара неизбежно заполняются какие-то документы (кассовые чеки, накладные, расходные ордера и т.п.). В электронном виде в СУБД Access заполнение такого рода документов реализуются в виде заполнения форм, посредством которых данные о продажах заносятся в таблицы. Удобно, если обеспечен автоматический расчет остатков товара, и пресекаются попытки продать больше, чем осталось.

В одном из вариантов - «закупка – продажа», в таблице «Закупки» (рис. 1) хранятся данные о закупках. В случае «производство – продажа» речь идет уже не о товарах, а о продукции предприятия; вместо таблицы «Закупки» в базу данных следует включить таблицу «Производство продукции».

Образец схемы данных в варианте «закупка  продажа»
Рисунок 1. Образец схемы данных в варианте «закупка – продажа»

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

Создадим запрос «Закуплено» на основе таблицы «Закупки» (рис. 2). Включаем в запрос поля «Товар» и «Количество». Возможно в базе есть еще какие-то характеристики, которые имеет смысл включить в запрос. Проводим группировку по полям таблицы «Товар» (если ее не существует, группируем по номеру закупки), суммируем количество и переименовываем его в поле «Закуплено».

Запрос «Закуплено» в режиме конструктора
Рисунок 2. Запрос «Закуплено» в режиме конструктора

Аналогично создаем запрос «Продано» (рис. 3) на основе таблицы «Продажи». Проводим группировку по товару (или по номеру закупки), суммируем количество проданного. Следует обратить внимание, чтобы количество товаров в обоих запросах измерялось в одних и тех же единицах.

Запрос «Продано» в режиме конструктора
Рисунок 3. Запрос «Продано» в режиме конструктора

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

Запрос «Остатки» в режиме конструктора
Рисунок 4. Запрос «Остатки» в режиме конструктора

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

С помощью мастера создаем форму, предназначенную для заполнения таблицы «Продажи». Превращаем поле «Товар» («Номер закупки») в поле со списком. Значения для списка берем из таблицы «Товары» («Закупки»).

Около поля «Дата продажи» надо поставить кнопку, которая будет заносить в поле текущую дату. Для этого пишем процедуру обработки события «нажатие кнопки»:

Forms![Продажи]![Дата продажи]=Date

Чтобы осуществить проверку на наличие товара, который собираемся продать, следует написать процедуру обработки события «После обновления» поля «Количество» формы «Продажи».

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

DoCmd.OpenForm "Остатки", , , "[Товар]=" & " ' " & Forms![Продажи]![Товар] & " ' "

Просто сравнить продаваемое в данный момент количество с остатками, к сожалению, нельзя. Дело в том, что в форме «Продажи» возможно не только создание новых записей, но и исправление старых. Например, поступило на склад 20 штук какого-то товара, есть запись о продаже 15 штук, запрос «Остатки» считает, что осталось 5. Если в записи о продаже исправить 15 на 20, то компьютер «решит», что Вы эти 20 пытаетесь взять из оставшихся пяти и выдаст ошибку. Поэтому необходимо обновить данные таблицы (Me.Refresh), и только потом открывать форму «Остатки». Тогда запрос, выполняемый при открытии формы «Остатки», будет проводить расчеты с учетом введенных изменений.

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

me![Количество] + Forms![Остатки]![Остаток]

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

DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70

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

Список литературы

  1. Егорова, Н. Е. Методика организации учета инфляции в учебной базе данных [Текст] / Н. Е. Егорова // NovaInfo.Ru (Электронный журнал.) – 2017 г. – № 60; URL: http://novainfo.ru/article/11378