Здравствуйте, пишу систему для магазина, реализовал приход и расход продукции. То есть сегодня может прийти товара 100 шт, но продать только 50 шт, значит 50 штук осталось на складе. Как лучше реализовать эту логику, с тем условием что вдруг если менеджер ошибся, то происходил перерасчет. Могу конечно создать 3 таблицу и ту вносить записи о расходах (отдельно каждую запись), но через год или два будет очень много записей, потому ищу более правильный вариант.
Для правильного вопроса надо знать половину ответа
Собственно основной складской учёт как раз и строится на приходных и расходных документах. Каждый отдельный документ либо добавляет товар на склад, либо забирает его со склада. Остаток на складе после проведения каждого документа может записываться в отдельной таблице (регистре) для более быстрого получения данных на определённый момент времени.
И да, создание документа само по себе не перемещает товар, для этого документ "проводят", то есть осуществляют в базе все движения товара связанные с данным документом. Проведение документа выполняется по состоянию на момент проведения, а не создания документа. После проведения документ изменению не подлежит, вместо этого создаются и проводятся корректирующие документы.
Скажите а изобретать очередное колесо и велосипед это новый вид мазохизма?
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)
Я сделал иначе.
У меня каждая единица товара содержится в отдельной строке.
id | product_id | stock_in_dt | stock_out_dt | reserved_dt
и так далее.
Зависит от того, что вам нужно.
Вот мне нужна каждая единица отдельно, чтоб отслеживать перемещение, знать на каком складе товар, перемещать, знать с какой партии эта единица товара и т.п.