@lzy

Как реализовать склад?

Здравствуйте, пишу систему для магазина, реализовал приход и расход продукции. То есть сегодня может прийти товара 100 шт, но продать только 50 шт, значит 50 штук осталось на складе. Как лучше реализовать эту логику, с тем условием что вдруг если менеджер ошибся, то происходил перерасчет. Могу конечно создать 3 таблицу и ту вносить записи о расходах (отдельно каждую запись), но через год или два будет очень много записей, потому ищу более правильный вариант.

1 таблица Income
Id
ProductName
Qty

2 таблица Outcome
Id
ProductName
Qty
  • Вопрос задан
  • 173 просмотра
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Собственно основной складской учёт как раз и строится на приходных и расходных документах. Каждый отдельный документ либо добавляет товар на склад, либо забирает его со склада. Остаток на складе после проведения каждого документа может записываться в отдельной таблице (регистре) для более быстрого получения данных на определённый момент времени.
И да, создание документа само по себе не перемещает товар, для этого документ "проводят", то есть осуществляют в базе все движения товара связанные с данным документом. Проведение документа выполняется по состоянию на момент проведения, а не создания документа. После проведения документ изменению не подлежит, вместо этого создаются и проводятся корректирующие документы.
Ответ написан
Комментировать
alams_stoyne
@alams_stoyne
Full Stack Developer - #PHP #CSS #JS #DB
Скажите а изобретать очередное колесо и велосипед это новый вид мазохизма?

objects
Id | ProductName | Qty
1 | MyItem | 50

objects_action
id | id_object | date | type | qty
1 | 1 | 24_07_2020 | admission | 100
2 | 1 | 24_07_2020 | spent | 50

1) Заводится товар - на остатках 0 пишется в бд objects
2) Делается поступление 100 шт пишется в бд objects_action
3) Производим расчет остатков
4) Делается списание 50 шт пишется в бд objects_action
5) Производим расчет остатков

* в бухгалтерии есть понятие "закрытие месяца", где есть отсечка с какой даты производить расчет/обновление остатков
* * Так же есть такая штука как не один склад и тут появляется еще одно действие "перемещение" (moving)
Ответ написан
Комментировать
@vism
Я сделал иначе.
У меня каждая единица товара содержится в отдельной строке.
id | product_id | stock_in_dt | stock_out_dt | reserved_dt
и так далее.

Зависит от того, что вам нужно.
Вот мне нужна каждая единица отдельно, чтоб отслеживать перемещение, знать на каком складе товар, перемещать, знать с какой партии эта единица товара и т.п.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы