这更像是一个抽象的架构问题。
我正在为药房相关领域开发库存管理系统。我有所有常用的组件,例如产品定义(产品类型、类别等)仓库、采购订单、收货单、销售订单、产品定价等。
对于每次购买,产品可能会产生不同的成本(购买成本 + 运费 + 额外成本),并且应该能够为每个“批次”购买配置售价。销售时应该可以根据 FIFO 或 LIFO 选择 BATCH(在产品定义中配置)
我们如何才能最好地完成这个要求?“价格”的属性是什么?任何关于这个主题的一般最佳实践都是最受欢迎的。
这更像是一个抽象的架构问题。
我正在为药房相关领域开发库存管理系统。我有所有常用的组件,例如产品定义(产品类型、类别等)仓库、采购订单、收货单、销售订单、产品定价等。
对于每次购买,产品可能会产生不同的成本(购买成本 + 运费 + 额外成本),并且应该能够为每个“批次”购买配置售价。销售时应该可以根据 FIFO 或 LIFO 选择 BATCH(在产品定义中配置)
我们如何才能最好地完成这个要求?“价格”的属性是什么?任何关于这个主题的一般最佳实践都是最受欢迎的。
我不确定“最佳”做法是什么,但我以前创建过这种库存系统。您的问题几乎有答案 - 您需要按批次跟踪购买。
所以你的库存主数据看起来像:
Primary_Inventory_Key
Description
LIFO_FIFO_FLAG // if this is set at the inventory item level
...
您的 Inventory Batch 表将是:
Primary_Inventory_Key
Batch # // autoincrement
// maybe PO # or something rather than these fields, depends on rest of schema
Purchase Date //
Purchase Price //
Purchase Qty // quantity originally purchased
VendorID
InventoryLevel // quantity remaining from this batch
...
PRIMARYKEY(Primary_Inventory_Key,Batch#)
然后,当您进行销售时,只需:
SELECT MAX(Batch#) WHERE InventoryKey = 'Mykey' AND InventoryLevel > 0
对于 LIFO 和:
SELECT MIN(Batch#) WHERE InventoryKey = 'Mykey' AND InventoryLevel > 0
先进先出。
您还可以拉出一个列表并让用户选择具有此模式的批次。
请记住在提交事务时减少您的库存水平。