1

最近在开发一家外贸公司的进销存系统,小微企业,年销售额在百万左右,这是我第一次开发进销存系统,没有相关经验的我觉得这套系统并不会那么复杂,但实际上它的复杂性被大大低估了。

为什么复杂?

恰恰就是这种外贸的小微企业,小订单会特别多,每天几乎都有数十单,一个订单里面可能会有几十个型号,总金额从几十到上万的都有,销售商品包括几十种大类,500多种型号,客户更多达500+,可想而知之前用excel管理起来有多困难,说实在点,原来可能就没办法管理或没管理,所以迫切地希望能有一套系统来把各个资源要素整合起来进行统一的规范化管理。

这家企业的负责人告诉我,他们用过好几家现成的系统,都难以达到他们理想的效果,归根结底还是与他们业务不够契合。

为什么会这样?大部分软件公司的销售一般做法都是拿自家产品去套客户需求,套住一个是一个,这种做法往往就没办法满足个性化的业务需要

我是如何开始的?

大天朝中医博大精深,借用其纲领,就是“望闻问切”,在系统开发上也一样适用。

“望”:亲自看,看看企业到底什么规模,人员有多少,组织架构是什么,有没有已经使用的系统或工具?看看他们每天都在干什么。当然,前提是你有这个机会去到企业。

“闻”:多倾听,倾听企业负责人的想法,倾听管理人员和员工等各个层面的需求,倾听不是一味地接纳,一个有经验的开发者是能甄别出哪些是真需求,哪些是伪需求的,如果你没有相关经验,那么在后续要进行调整。

“问”:善沟通,首先要确认企业的代表也就是对接人,这一点非常的重要!所有的问题都与对接人沟通,此人一定要对该企业的核心业务非常了解,而且系统的建设全权由此人负责,结合望、切、闻综合分析,与对接人进行系统开发方面的沟通。

“切”:多实践,好的产品在于不断的打磨,任何系统绝不可能一步到位,往往功能在设计与实际使用中的差别会很大,对于像我这样第一次开发这种系统没少进行重构,如果功能没有达到企业要求,或者不够完善,果断进行重构,不然程序的代码只会变得越来越臃肿,改动的代价越来越高。

这四种方法没有绝对的先后顺序,在项目的实施过程中不断的穿插进行。


现在系统基本已经开发完成投入实际生产了,这里就以我目前碰到的实际问题来说一下进销存系统复杂在哪里。

首先说明一下这里的复杂不同于面向大众消费端的应用,由于用户数量局限在企业内部,所以我这里暂时还没有碰到性能问题。
这种系统的复杂度分为两大方面:业务和数据


业务

要设计一个业务契合度高的系统就要把该企业的业务了解的尽可能的全面和透彻,小微企业的业务流程一般都比较杂乱和灵活,首先要做的就是要把流程固化下来,起初并没有直接与该企业探讨具体的功能实现,而是把他们所有的业务流程按照系统功能划分成了六大模块做成了excel表格,然后与对接人沟通,看看这六大模块是否能涵盖所有的业务流程。

确定了模块后,进一步确认模块下的具体功能,详细了解该功能应满足什么样的业务场景,业务流程是如何运转的等。

这里通过订单管理来简单的说明一下,基本的订单管理都有新建、修改、删除的功能,订单中会涉及到商品、数量、与金额,比如新建的订单商品要不要出库,是新建订单时直接出库还是需要主管审核后再出库?订单什么情况下可以修改,如果修改了该订单中已经出库的商品,是否需要作废该订单中这个商品,如果作废还要恢复作废商品的库存等等。

类似这样的业务需求会有很多,在确认功能时最好能穷尽每一个需求项。


上面提到的这种业务需求在实际开发中不可避免,后期也会不断的冒出来,当合理的需求出现时,就要有一套行之有效的方法来尽可能快速和便捷地响应企业需求。

  • 首先一个靠谱的后端MVC框架必不可少,不刻意追求最新的技术,但要带有一些基本功能,如权限与菜单控制功能,能节省不少的初始化和重复工作量,同时MVC的方式也能让业务逻辑在编程时更加的清晰。
  • 使用模块化开发,同时尽量避免模块间的相互依赖。剥离出类似于getGoods(获取商品信息)这种需要经常复用的function,更易于未来的功能扩展。
  • 前端也需要一套组件丰富的框架,这样可以尽可能的复用组件与样式(这次没用VUE是个遗憾,我觉得VUE应该挺适合构建进销存系统,希望这里有用过的同学能交流一下心得),同时能保证系统风格的一致。
  • 数据库的表设计要得当,不要为了图省事把所有需要用到的数据都塞到一个表中,比如订单表中没必要保存商品的价格、名称、种类等信息,应该使用视图或子查询的方式来获取数据,这样在信息获取上就有比较大的灵活性,也更加有利于表的复用。

数据

说一下另外一点比较复杂,也是比较头疼的地方,数据。

进销存系统开发的一大特点就是围绕数据的准确性展开。之前开发过很多其它各种各样的业务系统,但都没有比进销存对数据的准确要求的那么严格,进销存系统由于其对数据的特殊敏感性,原则上是不让业务员修改数据的,而且也不易修改,因为数据与数据之间的关联性太强,改了一处,与此关联的各处都需要进行修正,但往往一个人并不具备所有的修改权限,所以就需要确保各处数据的一致与准确性。

在对进销存的操作流程进行分解后,一般都会有以下几个步骤:

  1. 录入商品A(A=0)
  2. 采购商品A(A+10?)
  3. 入库商品A(A=10)
  4. 销售商品A(A-10?)
  5. 出库商品A(A=0)
  6. 盘点商品A(A=?)

举了一个简单的例子,也由此可见商品是进销存系统很重要的一块内容,其中要做的就是对商品的数量进行运算。
这里面的数学模型并不复杂,但是当有几百个商品,数量翻几十倍时,再加上外贸要换算汇率,手续费等,无论是商品数量还是金额,计算的过程就会比较复杂,会发现脑子完全不够用,尤其是出错的时候,找半天才找到出错的环节,算到最后往往都是逻辑出错,而不是数学模型的错误。

所以我的经验是,当面对一个繁杂的业务时,往往要经过冗长的系统流程,在处理时,尽量的能把它的处理过程拆分成多个function,让每一部分的function确保它只干一件事,只要把这件事做的准确就可以了。

总结

用“望闻问切”的方式充分了解需求,通过切合自身实际的方法快速响应,以精益求精的态度不断改善系统,确保数据的一致性和准确性。


比比比卡丘
94 声望5 粉丝

if(workHard === true){