如何利用内置条码/二维码追踪多采购明细的同码产品
解决方案:内置重复条码的产品采购/销售批次追踪
针对产品自带重复内置条码、多采购批次明细不同的场景,核心解决销售扫码时的批次匹配问题,以下是几种可落地的方案:
方案1:入库时绑定条码与批次(精准单产品追踪)
流程调整
- 采购入库阶段:扫描产品内置条码时,系统自动将该条码与当前批次的
batchid、purchasedetails_tbl中的采购价、售价等明细绑定,生成关联映射记录。 - 新增映射表
barcode_batch_map_tbl,用于存储条码-批次-采购明细的关联关系,同时维护该条码对应批次的剩余库存。
表结构示例
CREATE TABLE barcode_batch_map_tbl ( id INT AUTO_INCREMENT PRIMARY KEY, barcode VARCHAR(50) NOT NULL, -- 产品内置重复条码 batchid VARCHAR(50) NOT NULL, -- 关联批次ID purchase_detail_id INT NOT NULL, -- 关联采购明细ID stock_quantity INT NOT NULL DEFAULT 0, -- 剩余可售库存 created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (batchid) REFERENCES batchtable_tbl(batchid), FOREIGN KEY (purchase_detail_id) REFERENCES purchasedetails_tbl(id) );
销售扫码逻辑
- 扫描内置条码后,查询
barcode_batch_map_tbl,筛选出对应条码下剩余库存>0的记录 - 按预设规则(默认推荐先进先出FIFO,可配置为后进先出或人工指定)排序,取第一条匹配的批次记录
- 关联
purchasedetails_tbl获取对应采购价、售价等明细 - 完成销售后,将该映射记录的
stock_quantity减1,当库存为0时标记该记录失效
核心SQL查询示例(FIFO规则)
SELECT pd.purchase_price, pd.sale_price, b.batchid FROM barcode_batch_map_tbl bm JOIN batchtable_tbl b ON bm.batchid = b.batchid JOIN purchasedetails_tbl pd ON bm.purchase_detail_id = pd.id WHERE bm.barcode = 'SCANNED_BARCODE' AND bm.stock_quantity > 0 ORDER BY b.purchase_date ASC LIMIT 1;
方案2:销售时动态分配批次(批次维度追踪)
如果不需要精准到单个产品,仅需按批次维度统计采购/销售明细,可采用此方案:
- 入库阶段:仅记录批次
batchid、采购明细、批次总库存,无需提前绑定条码 - 销售扫码逻辑:扫描条码后,系统根据该产品所有未售罄批次,按预设规则(FIFO/LIFO/指定批次)自动分配对应批次,关联
purchasedetails_tbl获取明细 - 库存扣减:直接扣减对应批次的总库存,无需维护条码映射
方案3:条码补充批次标识(物理区分)
如果允许对产品进行二次标识,可在内置条码基础上补充批次后缀(比如打印小型批次标签贴于产品包装):
- 入库时为每个批次的产品添加批次后缀,例如内置条码
ABC123补充为ABC123-B001(B001为批次ID) - 销售扫码时直接识别带后缀的条码,匹配对应
batchid的采购明细,实现精准追踪
内容的提问来源于stack exchange,提问作者Farhad.Ahmad
相关产品推荐
相关产品推荐

