2022年6月

想要弄清楚ERP的真正意思,光看概念是远远不够的,我们先来举个例子:

没有ERP的时候,如果客户打来了电话表示对库存当前数据有疑问,要求核查数据,业务人员只能拿着合同到处跑,必须将采

购部、生产部、销售部调查个遍才能发现问题,搜集数据,解决问题,效率低下。有了ERP后,所有的流程、文档、事务都可以在线

上,取代了之前的线下文档,可以直接调取ERP系统中的库存数据与客户及时核对。公司ERP系统贯穿整个业务流程,业务人员再也不

用东跑西跑,手机或电脑上就能与各部门数据互联互通。由此可见,有了ERP系统之后,所有的业务数据都可以在线上找到,做到了

对企业人、财、物的管控。这也就是ERP的具体意思,ERP是Enterprise Resource Planning(企业资源计划)的简称。

作者:CRM卡老师
链接:https://www.zhihu.com/question/394055620/answer/2196649141
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

从我入产品设计坑起,就一直在做B端的系统设计,其中接触最多的就是供应链管理系统。「供应链」简单来说,就是进销存管理“进货、销货、库存”,其中无论采购行为还是销售行为,都会涉及到库存变动,所以库存管理的好与坏会直接影响到经营运转。

kc.png

熟悉和设计供应链,理解库存系统在业务作业中的库存变动是非常重要的,因为库存是所有业务发生的映射底层,从库存的流动能够看到各业务线的流转过程。

这里推荐刘宝红老师的供应链管理系列书籍,用比较白话的方式讲清楚了供应链的本质。供应链产品经理是重业务型的,好在大多情况下是比较通用的,针对不同的行业特性,具体问题具体设计方案就好,供应链的业务本质都是一样的。

这里我主要从三个纬度来阐述库存管理的意义和作用:

销售场景(触发库存出库行为):

保证有充足的可用库存用于销售开单,当临时发生库存不足,下单后会触发紧急采购
销售开单库存还未实际出库时,需要进行库存预占,以免他人开单使用库存导致库存不足无法出库
采购场景(触发库存入库行为):

当销售开单判断无库存或库存不足时,会以紧急采购的方式补足库存进行出库,这种方式称为“以销定采”,采购入库后,系统会自动对应采购订单关联的销售订单进行库存预占和出库,从库存类型上需要做数据隔离
商品sku一般会设定库存的阈值上下限,当库存数量触发阈值下限时,就会生成紧急采购订单
线下产生补采需求,这是最常规的采购行为,会在系统上直接自建采购订单
资金流(核算采购和订单成本):

库存不是越多越好,呆滞库存会导致管理成本的上升和资金积压的风险;但库存也不是越少越好,库存不足会在实际发生销售的时候错过销售机会,导致订单损失。所以供应链的管理核心就是有效的预估库存需求,合理的进行采购,避免“牛鞭效应”信息逐级失真,降成本,增效率
每笔销售订单完结后,都需要进行财务核算,包括订单收入和成本,进而计算订单的毛利是多少,其中涉及到商品库存的订单成本都要从库存管理系统中取数,根据不同的核算方式(常见的有移动加权和先进先出)来计算。
在实际库存管理作业中,除了常见的入库和出库行为,其实还存在一些中间状态,包括占用库存、在途库存和待处理损溢库存。

占用库存:就是在上面销售场景中提到的,当销售开单以后,一定要有占用库存这一步,以防被其他订单占用导致无法出库的情况发生,一般只有在订单结算后库存才会出库,如果取消订单则会释放库存(虽然可以走紧急采购,但是不到万不得已一般都会避免临时采购行为,因为临时采购的拿货价都会比市场进货价要贵不少,这样订单毛利就会变少)
在途库存:是指已经发生的采购订单,但是还没有进行入库,这部分应该入库但是还未入库的库存也需要在系统中展示出来,以便系统或员工来判断是否需要进行下一次采购
待处理损溢库存:这个字段一般是用于处理发生盘点差异后的盘盈或者盘亏,对于比较重流程的业务线,盘点结果与账面库存数对不上时,不会直接进行调整库存,需要在线下查明原因之后由库存管理员在系统中确认并备注原因,之后才会变动账面的库存数量
以上是理论上的知识,下面举一个实际场景的案例,来感受下库存管理系统中的库存流转:

A商品期初库存为100个,占用库存为0个,可用库存为100个。

场景一:

小明应顾客需求下了销售订单,出售A商品10个:账面库存=100,占用库存=10,可用库存=90

这个时候顾客不要了,小明无奈将销售订单作废了。账面库存=100,占用库存=0,可用库存=100

场景二:

小明又接待了一个顾客,一次性销售A商品120个开了个大单:账面库存=100,占用库存=100,可用库存=0

这次顾客很爽快的结了帐,等待拿货离店:账面库存=0,占用库存=0,可用库存=0

但是此次占用库存数量是不足以销售单出库的,小明就从隔壁店临时高价补采了20个,同时系统也自动触发了紧急采购订单,采购数量为20个,小明在系统上完善采购价格后一键入库,系统针对这笔销售订单进行了自动处理并出库:账面库存=20,占用库存=20,可用库存=0,紧接着账面库存=0,占用库存=0,可用库存=0

另外,存储库存会有相应的仓库和库位,在系统建设上也要考虑到多仓库和多库位的管理设置。

  1. 仓库和库位管理
    仓库分实物仓库和虚拟仓库,从物品所有权的角度来看,实物仓库一般记录的是本地库存,虚拟仓库记录的是物权为其他单位的库存(例如铺货场景,经销商将库存放置在门店,只有门店将铺货库存销售出去之后才会发生物权的变更,这种场景门店不需要承担库存积压的风险,只是可能毛利空间会被压缩)

完善的仓库基本都会有库位管理,每一个库位都会有库位编码,例如3L-01,含义就是库位在三楼的01号位置。库位也要区分类型,按可销售属性可以分为良品、残次品和不良品,良品库位就是状态良好的正常属性库存;残次品是有一些小瑕疵但不影响销售的库存(可以通过促销打折的方式销售);不良品是属于不可销售库存,通常是要追溯到所属供应商进行返场退货的。

  1. 库存调整/盘点
    一般情况下,除了正常的采购入库和销售出库,是不允许随意增减库存数量的,如有其他特殊情况需要入库和出库(比如入库数量记录错误,需要更正),会以其他入库和其他出库的方式进行同时备注原因。

期末会进行一次盘点来核对库存,根据不同的要求,可以是日盘,周盘,月盘或季度盘等,盘点方式分为两种:一种是盲盘,没有账面库存数量可以参考,完全凭实际盘点数量记录;一种是明盘,根据账面库存数量来核对实际库存数量是否准确。两种盘点方式各有利弊,盲盘因为没有参考数量可能出现多数漏数导致数量上不准确,而明盘则有可能发生盘点舞弊行为。

在库存差异获批对账面库存产生影响后,需要同时生成相应的盘盈入库单或盘亏出库单。理论上来说,无论是盘盈还是盘亏都需要查明原因,因为这是库存管理不当造成的,但实际情况下盘亏会更被重视,因为丢货带来的是实际的金钱损失。

  1. 末尾总结
    我一直认为库存管理是供应链系统的核心所在,它牵涉的面非常广,涉及库存管理体系的时候点线面都要考虑到,在进行其他相关业务线方案设计和改动的时候也要同时考虑对库存系统的映射影响范围,不然很可能因为考虑不周全给研发造成困难和风险。

供应链系统随着使用量的增长,功能逻辑和代码都会越来越复杂,越来越重,基本是牵一发而动全身的状态,所以供应链产品经理一定要完整的考虑整个业务线,尝试在大脑中构建业务模型,对每一个需求在系统中产生的影响心中有数,就能够很大程度的增加系统安全系数。

物流IT圈

泛物流行业IT知识分享传播、从业人士互帮互助,覆盖快递快运/互联网物流平台/城配/即时配送/3PL/仓配/货代/冷链/物流软件公司/物流装备/物流自动化设备/物流机器人等细分行业。长按二维码即刻加入我们,如果你是以上行业公司中的IT从业人士加运营小哥微信后可入群交流。

开单

经过几天的商品盘点和录入,随着开业的日子的到来,第一个客户进入了 店里,过了一小会他拉着购物车走到收银台面前。

小麦要开始进行开单了。

扫码开始:扫一个,扫一个,继续扫一个。。最后总金额200块钱。然后发现买了四个馒头。这个好像是按照个数来进行售卖的

这个并不需要称重和标签。于是找到馒头,点击数量4 单价0.5。点击结算,一个订单就完成了。

Github 地址: https://github.com/zifeiniu/YinHaiYiBaoCSharpAPI

C#Model封装 银海医保的接口
介绍
银海医保的接口我就不说了,很多家医院在用,但是网上资料不多,接口通过COM组件调用。官方示例有VB,delphi,PB。

我们的HIS是B/S 程序,不能直接调用,所以通过此程序封装银海接口后,通过此程序调用。

当前程序是一个Asp.net mvc web api selfhost 做成一个桌面服务端,封装银海接口,浏览器通过使用JavaScript 请求调用。当然你也可以直接引用DLL,调用方法。

.NET 调用COM 组件示例:
COM 组件调用方式如下:

int  Appcode = -1;
msg = string.Empty;
object[] args = new object[] { Appcode, msg };
yhObject = System.Activator.CreateInstance(yh);
ParameterModifier pm = new ParameterModifier(2);
pm[0] = true;
pm[1] = true;
ParameterModifier[] pmd = { pm };
yh.InvokeMember("yh_interface_init", BindingFlags.InvokeMethod, null,
    yhObject, args, pmd, System.Globalization.CultureInfo.CurrentCulture, null);

string o1 = args[0].ToString();
string o2 = args[1].ToString();

复制
项目特点
银行的接口是通过组装XML来调用,而且xml都是这种prm_xxx 神奇的数字节点。。
我使用特性封装Model,调用方屏蔽掉xml中prm_xxx 这种神奇的数字,直接使用中文属性。
(使用中文Model当然也有缺点,只不过是我懒得封装上百个Model。直接使用代码生成器生成Model)

这样如果需要添加一个新的接口,可以在两分钟之内搞定。(只需要一键生成Model)

项目添加Mock方式,可以在没有环境的情况下模拟假数据。
也添加了测试环境,及Dump文件及日志等。直接使用dump的json重现错误。
不吹了。。

已知的坑
银海某些接口是返回的使用/t分隔的文本文件的,居然没有表头。我这边解析是通过反射解析,所以要注意model属性声明的顺序就是解析文本文件的顺序。。。顺序千万不能乱。

此项目主要是通过反射赋值,其实效率并不慢。当然你可以去优化了。。

不同的医保政策使用同一个接口,同一个model时,可能再不同的政策下,屏蔽某些属性。
这个只要在反射的时候过滤下就行,这个我还没做。因为我的项目所在医院目前只开了两个政策。

原文地址: https://cloud.tencent.com/developer/article/1333141

yy.png

第1篇-

本文将尝试通过MVP(最小可行产品)思维,解构最小可行的进销存产品,以达到对进销存产品有入门的雏形认知。
但凡涉及到货品这一概念的商业形态,基本上离不开进销存管理,而一些有资源的企业可能会使用功能上更加强大的ERP系统,但从本质上讲,都是为了更准确更方便去解决【货】与【账】之间的关系,这也是进销存系统解决问题最重要的诉求层面。


- 阅读剩余部分 -