我需要开发一个库存和销售系统。
对于库存,我需要能够跟踪理想的库存水平,目前的库存水平,重新订购点,成本,销售价格等。
并不是库存中的每一项都是“可出售的”。例如,我可能想要保存用于汽水的塑料杯子的库存。也就是说,每次我卖一杯苏打水,我都需要从塑料杯的存货中减去一杯。因此,“中焦炭”实际上是塑料杯、一些餐巾纸和液体,每个项目都有自己的库存水平、成本等。
还有“组合体”的概念。也许一杯1美元的中号可乐和一个3美元的汉堡包一起作为一个组合出售,价格仅为3.5美元(节省0.50美元)。有人提到可乐里有一些餐巾纸。说汉堡本身也包括餐巾纸。然而,作为一个组合,买方没有得到餐巾纸可乐和汉堡包;相反,买方只得到相同数量的餐巾纸,就像他/她只是买可乐。
对于销售系统,我需要跟踪每一次销售,并可能与库存记录保持一种关系(这意味着,为了历史目的,我永远不会真正删除库存中的项目)。当我以1美元的价格出售一瓶“中杯可乐”时,也许我应该把它细分为液体0.90美元和塑料杯0.10美元。
当我卖一个“组合”的时候,也许我需要具体说明汉堡实际上卖了3美元,而中等的可乐只有0.50美元(只有苏打水被打折,以使这个组合更有吸引力)。
这不可能是个新问题。,我有什么想法(或例子)可以解决这个问题吗?,我不知道如何对库存、可销售项目(特别是组合体)进行建模,以及如何记录销售情况。
发布于 2011-11-09 23:56:11
您正在寻找的解决方案将依赖于一个会计风格的模式和几个材料清单(BOM)。您的主要实体类型将包括:
考虑以下ERD:

为了进行收入核算,您需要将记录在SALE_ITEM表中的资金相加。
库存级别是根据每个组件的INVENTORY_DTL输入和输出相加计算的。(不要将当前的库存水平存储在表中--这注定会导致调节问题。)
为了进行成本核算,您需要将记录在INVENTORY_DTL表中的钱加起来。请注意,您通常不会确切地知道您出售的餐巾纸或bun,所以不可能将特定的组件接收与特定的SKU销售联系起来。相反,您需要有一个约定来确定在任何给定的SKU中使用了哪些组件。您可能有指定您需要使用的约定的会计规则。大多数人使用FIFO。有些行业使用LIFO,我甚至见过加权平均成本会计。
发布于 2011-11-09 17:22:59
我建议把存货表和货币会计表完全分开。例如,你给出的例子--我知道这是荒谬的:对于你的普通快餐店来说,一杯$.90分值可乐的价格约为0.05-0.07美元,而液体的价格不到一分钱,这给$.83ish留下了可观的利润。为什么成本要加到$.90呢?
表:
InventoryItems字段: InventoryItemId,Name,CurrentInventoryLevel,IdealInventoryLevel
InventoryChangeRecords字段: InventoryChangeId、InventoryItemId、Change (int)
RetailItems字段: RetailItemId,名称,价格
RetailItemMakeup字段: RetailItemId,InventoryItemId,Quantity
SaleTransactions字段: SaleTransactionId,DateTime,TotalSale
SaleTransactionItems字段: SaleTransactionId,RetailItemId,Quantity
对于每个销售,您应该使用sproc (或触发器)更新CurrentInventoryLevel,并将记录插入到InventoryChangeRecords中。从SaleTransaction到SaleTransactionItems到RetailItemMakeup,您可以很容易地了解任何销售是如何影响库存的。
如果您想以一种更强大的(但海事组织无关的)方式来实现它,您可以在SaleTransactionItems和InventoryChangeRecords之间创建另一个多到多的表。
https://stackoverflow.com/questions/8059682
复制相似问题