Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/302: Рейтинг темы: голосов - 302, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 03.10.2016
Сообщений: 22

БД по Учету движения и наличия товара на складе

19.02.2018, 13:58. Показов 65025. Ответов 31

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

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

Работу базы представяю так:
  • Есть основная таблица "Склад" в которой записаны все товары имеющиеся в наличии в данный момент и их свойства.

  • При приходе товара, добавляется запись в таблицу "Приход товара". В этой таблице ведется учет всех именно внесений товара на склад. И это влияет на товар в таблице "Склад".
    К примеру: На складе есть < Винт - Винт 4х20 - 100 - шт>. И привезли еще 50. В таблицу "Приход" идет запись о поступлении < Винт - Винт 4х20 - 50 - шт - дата - снабженец>, и в таблице "Склад" прибавляется 50 к имеющимся 100 - итого становится 150. При добавлении нового товара (которого еще не было в т. "Склад", туда просто добавляется новая запись вида < Категория - Название - колво - мера>.

  • Примерно та же петрушка с отпуском. При запросе товара, в т. "Отпуск" записывается сама выдача, и из "Склад"'а вычитается определенное кол-во отущенного товара.

  • Оператор вообще не будет работать с таблицами, только с формами (вносить данные о приходе/отпуске товара) и запросами (по фильтру находить нужную инфу по названию товара/работнику/и т.п.). Таблица "Склад" и вовсе нужна лишь для запросов о наличии и количества того или иного товара.
    В идеале таблицы вообще скрыть, лишь меню с кнопками и формы. Простой интерфейс: пришел товар - кнопка "Приход", заполнение формы - добавить. Сколько гвоздей? Кнопка "Наличие товара" - выбор категории - выбор товара - выходит таблица(или не таблица, еще не разобрался). Но это уже дело другое.

  • Ну и будут созданы мелкие формы с добавлением сотрудника/категории.

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

Главный вопрос в составлении связей между таблицами. Ключевые поля вроде бы верно обозначил (хотя и там были проблемы), но как связать таблицы Приход - Склад - Отпуск вообще не пойму.

Уже столкнулся с проблемой с большим количеством ниспадающих списков. Категория, Мера, Сотрудник - поля со списком. При добавлении товара, поле "Название" тоже хочу сделать списком, но в который можно вписать новую позицию, если товара еще не было. Более-менее приноровился с мастером посдстановок, и вроде бы это все кажется возможным, но как это будет выглядеть в итоге не знаю, есть опасения, что все это будет работать через ж.

Так же с ключевым полем: в таблице "Мера" хотел убрать счетчик и сделать один ключевой столбец с названием мер. Но тогда их невозможно было нормально сортировать, даже если переписывать все заново, при открытии таблицы все сортировалось по алфавиту, что неудобно.

При попытке понять связь таблиц пару раз зашел в ступор: После мастера подстановки в "Приход"е для связи с т."Мера", нормально связывались 2 неключевых поля. Но при попытке сделать так в схеме - показали фиг. Как это работает?

Формы так же не обрадовали: вроде форма простая (Добавление категории),похоже на Delphi, но VB в макросах для меня темный лес, работает как-то странно и через раз.


Извиняюсь за многабукав и глупые вопросы, я в Access ламер и языка VB не знаю, но обучаемый и стремящийся
Заранее благодарю за любую помощь.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.02.2018, 13:58
Ответы с готовыми решениями:

База данных по учету движения материала на складе
Входные документы:Приходный ордер, Лимитная карта, Требование, Товарно-транспортная накладная. Выходные документы: Ведомость прихода на...

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

Проверка наличия на складе остатков товара
Документ отгрузка товаров: делаю проверку наличия на складе остатков товара, если нет товара документ не проводится, если есть провести....

31
0 / 0 / 0
Регистрация: 03.10.2016
Сообщений: 22
02.03.2018, 15:21  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Панург Посмотреть сообщение
посмотри, думаю будет полезно
Спасибо, сегодня ознакомлюсь.
Цитата Сообщение от qwertehok Посмотреть сообщение
в Номенклатуре есть КодТовара
эти коды товара прописываются в приходных или расходных накладных
список этих накладных хранится в Движениях
что тут не понятно?
Тоесть надо создать новое поле в т."Движение" (Код товара) и связывать (Название товара) из "Склад"а с ним? Но что это даст?
Что вообще понимается под накладной? Строка в "Движении", "Приход"е или "Отпуск"е?
0
6003 / 4578 / 1096
Регистрация: 29.08.2013
Сообщений: 28,269
Записей в блоге: 3
02.03.2018, 15:39
Цитата Сообщение от JacPoison Посмотреть сообщение
Тоесть надо создать новое поле в т."Движение" (Код товара) и связывать (Название товара) из "Склад"а с ним? Но что это даст?
Что вообще понимается под накладной? Строка в "Движении", "Приход"е или "Отпуск"е?
тут вообще ничего не понял
в Номеклатуре код это код
в Накладной кодов много, поэтому появляется idНакладной
в Движении мы учитываем не коды, а накладные, поэтому есть поле idНакладной и сюда же ТипДвижения (приход\расход)

допустим
Из таблицы Движения мы берем приходы за дату, выбираем накладные, по накладной получаем коды товаров, суммируем - и вот у нас весь приход за ххх день


Цитата Сообщение от JacPoison Посмотреть сообщение
Что вообще понимается под накладной?
Накладная это документ на перемещение кодов
0
2 / 2 / 0
Регистрация: 19.02.2018
Сообщений: 7
03.03.2018, 07:52
Привет, JacPoison

Таблица "Склад" тебе не нужна. Таблица Приход минус Таблица Отпуск и будет, суть, Таблицей Склад. Реализуй его в виде Запроса Склад.





Давай сначала. У нас ничего нет. В две колонки распишем операцию - действие с БД

1Операция: Пришел товар (Винт - Винт 4х20 - 100 - шт)
1БД: Появилась сущность Товар (название, кол-во, дата поступления, цена, снабженец и пр). Создадим таблицу с этими полями.
Итого: Новая таблица Товар (КодТовара, название, параметры)

2Операция: Пришел товар (Шайба 20х100 (есть такое? )- 20 шт )
2БД : Все в рамках нашей таблицы - ничего не меняем.

3Операция: Пришел товар (Винт - Винт 4х20 - 200 - шт)
3БД: Опа, у нас повторения большей части записи (1БД), стало быть надо менять базу. Выносим разные части обеих записей в отдельную Таблицу Поступление (дата, кол-во, снабженец и пр.). Для связи между ними вводим КодТовара (первичный ключ для Товар и индекс в Поступление) и КодПоступления (Это и есть номер ВходнойНакладной) для таблицы Поступления.
Итого: Новая таблица Поступление (КодПоступления, КодТовара, дата, кол-во, ценаПокупки, ЦенаПродажи (+20%, например. )снабженец).

4Операция: Мы продали Товар с пункта 1 - Винт 4х20 - 30 штук.
4БД. Ну вот, новая операция опять "не помещается" в наши готовые таблицы, необходима Таблица Отпуск. (Вот тут вопрос, qwertehok (Привет), тут 3 варианта:
а) Создать новую с привязкой к КодуТовара (из Товаров). (проблемы синхронизации с таблицей Поступление)
б) Создать новую с привязкой к КодуПоступления (из Поступлений) ( Я выбрал эту)
в) Добавить в Поступление новое поле с кодом Операции ( Проблемы с определением, с какой партии поступления мы продали товар... А если цену продажи, после пары продаж, решили изменить? )

Итого: Новая таблица Отпуск (КодОтпуска, КодПоступления, Дата, количество, ЦенаПродажи, Продавец)

Запрос
Select Товар.КодТовара, Товар.Название, Поступление.Кол-во - Отпуск.Количество
From Товар, Поступление, Отпуск
Where (Товар.КодТовара = Поступление.КодТовара) and (Поступление.КодПоступления = Отпуск.КодПоступления)

, даст тебе остаток (то, что ты называешь таблицей Склад).

Ну и дальше уже "наращивание мяса":
1. Добавь таблицу Категория Товара (Таблица Категории - КодКатегории, Название ), соответственно в Таблицу Товар добавь новое поле - КодКатегории. Сделай связь между ними;
2. Добавь таблицу Поставщики (КодПоставщика, Название, Адрес), в Поступления, соответственно, КодПоставщика. Связь между ними;
3. Добавь Сотрудники (КодСотрудника, ФИО, рост, вес... ), в Отпуск - КодСотрудника. Связь между ними.
4. Добавь таблицу Поставщики (КодПоставщика, Название, Адрес), в Поступления - КодПоставщика. Связь.
...

Так я вижу это все.

С уважением,
dangee
1
6003 / 4578 / 1096
Регистрация: 29.08.2013
Сообщений: 28,269
Записей в блоге: 3
03.03.2018, 08:37
Цитата Сообщение от dangee Посмотреть сообщение
необходима Таблица Отпуск. (Вот тут вопрос, qwertehok (Привет)
привет
не говорят Отпуск
Говорят Приход-Расход

Цитата Сообщение от dangee Посмотреть сообщение
Проблемы с определением, с какой партии поступления мы продали товар
а кто говорил про партионный учет?
думаешь вводом новой таблицы ты от этой проблемы ушел? для решения этой проблемы мы сначала должны эти партии ввести, а потом в расходе уже учитывать

Цитата Сообщение от dangee Посмотреть сообщение
А если цену продажи, после пары продаж, решили изменить
менять цену задним числом?
а в чем проблемы? перепечатать расходные документы и все

темы партий, НДС, изменения цен ТС не касался, и я тоже) так как стоит о них только узнать и уже не остановишься)
0
2 / 2 / 0
Регистрация: 19.02.2018
Сообщений: 7
03.03.2018, 10:01
Точно. Я не датабазник и не аксессник.

Цитата Сообщение от qwertehok Посмотреть сообщение
а кто говорил про партионный учет?
думаешь вводом новой таблицы ты от этой проблемы ушел? для решения этой проблемы мы сначала должны эти партии ввести, а потом в расходе уже учитывать
Партией я назвал приход за одну операцию.

Приход
Дата Товар Цена Кол-во
1 янв 2018 винт 20х5 5 руб 70 шт
15 янв 2018 винт 20х5 4.5 500 шт (скидка за кол-во)

Наценка +100% (для удобства счета)
Расход
Дата Товар Цена Кол-во
4 янв 2018 винт 20х5 10 руб 20 шт
25 янв 2018 винт 20х5 ??? 50 шт (с какой партии будет выбираться товар: с 1 янв или с 15 янв?)
27 янв 2018 винт 20х5 9 руб 200 шт (тут понятно, только вторая партия, с первой столько нет)

Приход     
Дата Товар Цена Кол-во  
1 янв 2018 винт 20х5 5 руб 70 шт  
15 янв 2018 винт 20х5 4.5 500 шт (скидка за кол-во) 
Наценка +100%    (для удобства счета) 
Расход     
Дата Товар Цена Кол-во  
4 янв 2018 винт 20х5 10 руб 20 шт  
25 янв 2018 винт 20х5 ??? 50 шт (с какой партии будет выбираться товар: с 1 янв или с 15 янв?) 
27 янв 2018 винт 20х5 9 руб 200 шт (тут понятно, только вторая партия, с первой столько нет) 

Цитата Сообщение от qwertehok Посмотреть сообщение
менять цену задним числом?
а в чем проблемы? перепечатать расходные документы и все
Нет, не задним числом.

"С сегодняшнего дня в связи с инфляцией поменять цену на остаток товара ХХХ."
директор Петров.
0
6003 / 4578 / 1096
Регистрация: 29.08.2013
Сообщений: 28,269
Записей в блоге: 3
03.03.2018, 10:51
Цитата Сообщение от dangee Посмотреть сообщение
(с какой партии будет выбираться товар: с 1 янв или с 15 янв?)
это ОЧЕНЬ хороший вопрос, но адресовать его надо ТС
нужно внедрять понятие Партия и делать учет (Fifo и noFifo)
тут же у нас затрагиваются документы задним числом) и перерасчет последовательности))
и еще 100500 проблем

а так же нужно учитывать НДС и
Цитата Сообщение от dangee Посмотреть сообщение
"С сегодняшнего дня в связи с инфляцией поменять цену на остаток товара ХХХ."
Цены

так как цена понятие периодическое, то менять ее одним UPDATE нельзя, нужен как в 1с справочник цен. и это тоже нужно учитывать
0
2 / 2 / 0
Регистрация: 19.02.2018
Сообщений: 7
03.03.2018, 12:09
Я сюда (cyberforum.ru/msaccess/) забрел за "рецептом счастья" - структурой небольшой базы для продаж (Товары/Поступление/Продажа).

Пока ничего не нашел. Все сложно, все через кучу таблиц.

В той базе что я сделал, начались проблемы после того как изменяются цены на остатки (Схема была такая:
Товары->Поступление/Продажа (объединенная таблица для операций, положительное число - поступление, отрицательное - продажа). Запрос по остаткам выдает то "старую" цену, то - "новую".
Поэтому и рекомендую структуру вида Товар->Поступление->Продажа.

Кстати, где наш ТС? Куда Вы его заслали ?
0
6003 / 4578 / 1096
Регистрация: 29.08.2013
Сообщений: 28,269
Записей в блоге: 3
03.03.2018, 12:35
Цитата Сообщение от dangee Посмотреть сообщение
Поэтому и рекомендую структуру вида Товар->Поступление->Продажа.
что это за структура такая?))

Цитата Сообщение от dangee Посмотреть сообщение
Кстати, где наш ТС? Куда Вы его заслали ?
выходной ведь


ЗЫ я рекомендую делать формы на аксессе, а в качестве БД использовать MSSQL. и работать из аксесса с с хранимыми процедурами, написанными в MSSQL
0
2 / 2 / 0
Регистрация: 19.02.2018
Сообщений: 7
03.03.2018, 13:47
Цитата Сообщение от qwertehok Посмотреть сообщение
что это за структура такая?))
Цитата Сообщение от dangee Посмотреть сообщение
Таблица Отпуск. (Вот тут вопрос, qwertehok (Привет), тут 3 варианта:
а) Создать новую с привязкой к КодуТовара (из Товаров). (проблемы синхронизации с таблицей Поступление)
б) Создать новую с привязкой к КодуПоступления (из Поступлений) ( Я выбрал эту)
в) Добавить в Поступление новое поле с кодом Операции ( Проблемы с определением, с какой партии поступления мы продали товар... А если цену продажи, после пары продаж, решили изменить? )
Таблицу Товар привязали к таблице Приход. Теперь вопрос таблицы Расход/Продажа, куда его пристроить:
1. Либо привязать к таблице Приход (Товар->Приход->Продажа)
2. Либо привязать к таблице Товары (Приход <- Товар -> Продажа)
3. Либо, как Вы советовали, слить ее с таблицей Приход, учитывая, что все поля одинаковые (цена, дата, кол-во). Добавить поле Операция (со значениями Поступление/Продажа).

Я последней структурой пользовался. Там и возникли проблемы, что при изменении цены на остатки (!), выводится то "старая" цена, то - "новая".
0
6003 / 4578 / 1096
Регистрация: 29.08.2013
Сообщений: 28,269
Записей в блоге: 3
03.03.2018, 14:03
Цитата Сообщение от dangee Посмотреть сообщение
Добавить поле Операция (со значениями Поступление/Продажа).
Там не только Поступление\Продажа. Еще есть операция - Возврат. При чем он может быть как от внутреннего клиента (один склад другому), так и от покупателя (продали плохой товар)

Цитата Сообщение от dangee Посмотреть сообщение
Там и возникли проблемы, что при изменении цены на остатки (!), выводится то "старая" цена, то - "новая".
это проблема реализации - сама схема правильная, нужно проверять запрос
0
0 / 0 / 0
Регистрация: 03.10.2016
Сообщений: 22
06.03.2018, 09:51  [ТС]
Так, не ожидал такого обилия комментариев, пришлось немного поразбираться.

Цитата Сообщение от dangee Посмотреть сообщение
Привет, JacPoison
Доброго времени суток, dangee.
Большое спасибо, что так подробно все расписал, легко было составить картинку в голове, а заодно и схему бд на бумаге.

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

Цитата Сообщение от dangee Посмотреть сообщение
Проблемы с определением, с какой партии поступления мы продали товар... А если цену продажи, после пары продаж, решили изменить?
Цитата Сообщение от qwertehok Посмотреть сообщение
это ОЧЕНЬ хороший вопрос, но адресовать его надо ТС
нужно внедрять понятие Партия и делать учет (Fifo и noFifo)
тут же у нас затрагиваются документы задним числом) и перерасчет последовательности))
и еще 100500 проблем
а так же нужно учитывать НДС и
Эта проблема решается очень просто: всего этого попросту нет.
Ни цен, ни продажи, ни поставщиков с адресами.
Просто пришел наш электрик за 10м. кабеля, например.

Цитата Сообщение от qwertehok Посмотреть сообщение
Там не только Поступление\Продажа. Еще есть операция - Возврат. При чем он может быть как от внутреннего клиента (один склад другому), так и от покупателя (продали плохой товар)
Возрата, скорее всего, тоже не будет. Максимум: Иванов пришел за дрелью - Отпуск; вернул дрель в конце дня - Приход. И то, не факт что такое будут в базу заносить.

Цитата Сообщение от dangee Посмотреть сообщение
Таблицу Товар привязали к таблице Приход. Теперь вопрос таблицы Расход/Продажа, куда его пристроить:
1. Либо привязать к таблице Приход (Товар->Приход->Продажа)
2. Либо привязать к таблице Товары (Приход <- Товар -> Продажа)
3. Либо, как Вы советовали, слить ее с таблицей Приход, учитывая, что все поля одинаковые (цена, дата, кол-во). Добавить поле Операция (со значениями Поступление/Продажа).
В моем понимании, Расход должен браться из т.Товары. В ней же лежит название товара, с определенной мерой и прикрепленного к какой-то категории. Нельзя же отпустить 3 метра гвоздей еще и из категории "Жидкости".

Цитата Сообщение от dangee Посмотреть сообщение
Итого: Новая таблица Отпуск (КодОтпуска, КодПоступления, Дата, количество, ЦенаПродажи, Продавец)
Я немного не понял, как связан Расход и Код поступления из т.Приход.
0
6003 / 4578 / 1096
Регистрация: 29.08.2013
Сообщений: 28,269
Записей в блоге: 3
06.03.2018, 10:11
Цитата Сообщение от JacPoison Посмотреть сообщение
В моем понимании, Расход должен браться из т.Товары. В ней же лежит название товара, с определенной мерой и прикрепленного к какой-то категории.
Товары это справочник!!!!
В товарах не должно быть количества
Ну не делают так, пусть у тебя и самая простая база. пусть нет накладных. пусть будет просто строка в таблице Движения

Операция - Иванов забрал дрель
Сначала дрель должна появиться на складе. Вносим дрель в справочник, присваиваем ей код, категорию. Делаем приход за 2000 год(допустим)
id 1
дата 01,01,2000
кто код_сотрудника
что код_дрели
сколько 1 (если +1 - операция Приход)

Вчера Иванов забрал дрель
id - 2
дата 06,03,2018
кто код_Иванова
что код_дрели
сколько -1 (если -1 - Расход)

и так далее
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.03.2018, 10:11

Учет движения товара на складе
Сразу извинюсь . . . не знал в какую ветку вставить этот топик, поэтому он здесь :) Может у кого-нить где-нить завалялась банальная...

Реализовать проверку наличия товара на складе при проведении документа расходной
Всем привет. Получил учебное задание, реализовать проверку наличия товара на складе при проведении документа расходной. Написал простой...

На аптечном складе хранятся лекарства. Необходимо составить ведомость по учету лекарств.
На аптечном складе хранятся лекарства. Необходимо составить ведомость по учету лекарств. Таблица должна иметь следующую информацию:...

Программа по учету товара в делфи с использованием БД (Access)
Может кто-нибудь поможет? Нужно разработать программу в делфи, которая • ведет учет товаров поступивших на склад; • чтобы можно было...

База данных по учету движения материала на производстве - MS Access
Всем привет как сделать базу данных по учету движения материала на производстве ? Помогите пожалуйста со Схемой данных Может у кого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru