谈谈企业信息化 一种比较简单、灵活的产品物料多单位实现方案

  企业随着生产经营的延续,其产品、产品SKU也会越来越多,当然同个产品的计量单位也可能越来越多。比如企业规模小,采购可能是按KG采购(价格可能比较贵),当企业采购量大时,采购可能就按吨来采购啦(比如白糖、粒子等)。因此企业信息化软件在解决企业产、供、销核心业务时,必须考虑到产品多单位问题。
  企业通常在采购、销售环节可能部分产品可能会涉及多单位问题。特殊行业,比如快消品行业,在报损、集卡或奖盖兑现等环节部分产品也可能会涉及多单位问题。多单位通常处理流程如下:

  • 维护产品多个单位,指定产品默认单位;
  • 按产品实际单位采购、销售;
  • 单位换算,比如:统一换算成默认单位进行出入库、盘点等仓储操作;

本文将探讨一种比较简单的多单位系统实现方案。

1、数据表设计

1)产品表,base_goods
CREATE TABLE `base_goods` (
  `sid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `goods_id` varchar(32) NOT NULL,
  `goods_no` varchar(20) NOT NULL COMMENT '商品编码',
  `goods_name` varchar(100) NOT NULL COMMENT '商品名称',
  `spec` varchar(64) DEFAULT NULL COMMENT '规格',
  `unit_id` varchar(32) DEFAULT NULL COMMENT '计量单位',
  `unit_scale` decimal(20,4) DEFAULT NULL COMMENT '规格系数',
  `unit_weight` decimal(20,6) DEFAULT NULL,
  `barcode` varchar(32) DEFAULT NULL COMMENT '箱条码',
  ...
  PRIMARY KEY (`sid`),
  UNIQUE KEY `NewIndex2` (`goods_id`,`goods_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表'
2)单位表 base_goods_unit
CREATE TABLE `base_goods_unit` (
  `sid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `unit_id` varchar(32) DEFAULT NULL,
  `unit_name` varchar(32) DEFAULT NULL COMMENT '计量单位',
	...
  PRIMARY KEY (`sid`),
  UNIQUE KEY `NewIndex1` (`unit_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='单位表'
3)产品多单位,sku表 base_goods_sku
CREATE TABLE `base_goods_sku` (
  `sid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `goods_id` varchar(32) NOT NULL COMMENT '产品ID',
  `unit_id` varchar(32) NOT NULL COMMENT '单位',
  `spec` varchar(64) DEFAULT NULL,
  `unit_scale` decimal(20,4) DEFAULT NULL COMMENT '规格系数',
  `unit_weight` decimal(20,6) DEFAULT NULL,
  `barcode` varchar(32) DEFAULT NULL COMMENT '箱条码',
  `is_default` char(1) DEFAULT 'N',
  ...
  PRIMARY KEY (`sid`),
  UNIQUE KEY `idx_base_goods_unit` (`goods_id`,`unit_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品多单位、sku表'

2、3张表 数据关系

1)先维护表base_goods_unit,基本单位
  • 维护两个基本单位:unit_id = 1, unit_name = 箱;unit_id = 2, unit_name = 瓶
2)产品查询、维护:base_goods

新增一个产品,产品单位下拉选择数据源为base_goods_unit基本单位表;

goods_id goods_no goods_name unit_id spec unit_scale unit_weight bar_code
1 1001 596ml纯净水 1(箱) 4*6 40 0.0001 012039988455

新增产品时,同时会往base_goods_sku插入一条记录,内容如下:

goods_id unit_id spec unit_scale unit_weight bar_code is_default
1 1(箱) 4*6 24 0.0024 012039988455 Y
3)给产品再添加一个单位:瓶
goods_id unit_id spec unit_scale unit_weight bar_code is_default
1 1(箱) 4*6 24 0.0001 012039988455 Y
1 2(瓶) 1*1 1 0.0001 012039988456 N

说明:

  • 产品规格系数,unit_scale=24,表示 1箱 = 24最小单位,最小单位可以不维护;
  • 案例维护了最小单位:瓶,因为其unit_scale = 1,则596ml水 1箱=24瓶;
  • 假设596ml水,再维护一个单位:提,规格系数=12,则1箱=2提=24瓶

3、多单位如何使用

1)采购、销售

根据base_goods, base_goods_sku表,可以列出产品单位组合表,如下表:

goods_id unit_id spec unit_scale unit_weight bar_code is_default
1 1(箱) 4*6 24 0.0001 012039988455 Y
1 2(瓶) 1*1 1 0.0001 012039988456 N

只要对列表行项目进行采购、销售即可,菜单行项目、销售订单行项目必须包含goods_id,unit_id信息。

2)仓储操作

为了便于盘点、财务记账,仓库通常按物料默认单位进行出入库,如本例的596ml水,你默认单位为箱,假设销售了960瓶,则出库时(假设原库存为100箱):
库存减少 960/24 = 40 箱,当前库存 = 100 - 40 = 60箱。

3)经销商报损、奖盖兑现

奖盖兑现
类似“再来一瓶”,“加1元再来一瓶”促销活动,顾客向门店兑奖后,门店会向经销商兑奖,经销商则会把奖盖、集卡等交给企业业务员,并录入系统,类似xx产品,申请奖盖兑现xx只。企业销售内勤核实情况后,会根据维护的兑奖规则,根据产品多单位规格系数,折算出兑现数量(默认单位),通过:

  • 订单 配送的方式,发放给经销商;
  • 折算成金额,进入客户奖盖台账或其它台账(客户可以用台账进行自行下单)

产品报损
操作方式同”奖盖兑现“,经销商对有暇疵的产品(包装不好,沉淀等)提交报损申请,经业务员核实后,企业销售内勤根据报损产品数量单位计算最终报损数量或金额:

  • 订单 配送的方式,补给经销商;
  • 折算成金额,进入客户报损台账(客户可以自行下单)

基本思路
不管客户上报的是瓶,还是箱,都统一换算成产品基本单位进行数量、金额计算。计算方式:

  • 假设 基本单位,规格系数 = 40
  • 假设第二单位,规格系数 = 20,则基本单位 = 2个 第二单位
  • 此处40对应的为最小单位,最小单位可以不维护,如饮料企业通常就是箱,瓶,提;
    对于产品来说一般只维护“箱”即可,假设规格系数5*6,公司员工一看就知道,该箱产品有6排,每排5瓶。

4、本文不足

本文只讨论了多单位简单实现方案,并未讨论口味等多SKU如何简单实现。

发布了294 篇原创文章 · 获赞 98 · 访问量 77万+

猜你喜欢

转载自blog.csdn.net/chuangxin/article/details/97113185