深入浅出WMS之出库流程解析

  • 创建出库单
  • 出库单管理
    • 出库单管理-配货
    • 出库单管理-关单
  • 出库任务管理
    • 出库任务管理-撤销
  • 结尾

创建出库单

本来打算周末的时候写出库的流程,没想到今天开了一天会,作为项目负责人和各方客户详细的讲解了WMS的流程和各个模块的使用方式,正好趁热打铁的肝篇博客再去EMO,言归正传其实出库单的创建和入库的入库单创建是一样的,无非就是个添加功能。其次现在的智能化仓库都对接ERP系统或者MES系统,对于手动创建单据的需求并没有前几年高了。

出库单管理



两张图片对应不同类型的WMS,第一种是药业比较常用的定制化比较多,第二种就比较标准一些。不过第一种是立体库,第二钟是平面库,在流程上也有一些相对区别。在这我拿第二种WMS来讲一下平库和立体库的不同点。

出库单管理-配货

这个功能我愿称之为出库中最重要的一步。大家可以看到在第一种WMS中是有手动配货和自动配货两个不同的操作,这段时间工作比较杂,我还没写自动配货这个功能,不过对于流程来说不影响。个人理解自动配货的话对技术要求还是偏高一点的,所以打算等写个差不多的时候把自动配货和入库的自动分配货位拿出来作为技术点来写。那么接下来我们说一下配货的一个流程。

我们这边对于页面的要求是点击一条出库单据后,会弹出来一个框,是符合这条出库信息的所有库存,这个时候我们就可以输入要配货的数量,而且是可以进行多选和累加的,比如说我要出一万件物品,但是10货位上只有5000件,所以我们就可以选择10货位上要出库5000件,20货位上出库5000件。而且在页面上可以清晰的让操作人员知道我这条单据配货了多少,未配货数量是多少,每个货位上已配多少,可用数量是多少。

当我们配货完成后,数量和状态也会有一个相对的改动,而且这个时候会生成相对应的出库任务。这个时候就分两种情况,一种是有设备参与的情况下,另外一种就是人工。那么我们先说一下人工出库,当我们配完货后我们可以知道货位地址和出多少数量,这个时候叉车师傅可以开着叉车去相对应的货位去把货挑出来,然后用手持去扫托盘码来完成出库这个动作。那么对于设备来说,人工操作肯定是不确定因素更多一点。所以也有部分仓库是在叉车上安装车载系统和无线扫描来进行一个确认,这样的话可以一定程度上保证了正确率。那么接下来说一下全程设备参与是怎么样的一个流程,当我们配货完成后,WMS是知道货位地址和要出库数量的,这个时候WMS会向WCS发送指令,然后WCS对调度堆垛机去相对应的货位上取货,当货物到位后,操作人员拿着PDA去扫托盘码,来确认这个托盘是不是有出库任务,如果有的话确认,然后由叉车师傅给挑下来。其实这还分为两种情况,一种是整托出库,另外一种是拣选回库。我刚刚上面说的流程就是整托出库的一个流程,意思就是我要出500个东西,恰好这个托盘上有500个,所以我把整个托盘出库。那么还有一种情况就是我要取出500个东西,我们托盘上有700个,我们取出我们要的500个后,把剩下的200个再入进去。这种叫拣选出库。

出库单管理-关单

那么当我们出库完成后,我们需要手动关单。我们关单是指这个出库的结束,那么我们需要做什么操作呢,我们往下看。

首先我们关单要进行一系列的验证,首先我们要关单是不是要把这个单据的所有任务都完成,然后这个时候我们的真实出库数量必须和计划出库数量是相等的,这代表的是所有任务都完成了。 然后我们要把出库单据和出库任务给删除掉,其实就是把数据转移到了历史表中方便追溯。

出库任务管理


这个模块的话相对于入库模块中的入库任务管理要简单一些,因为我们把配货这个工作完成了,所以这个页面的功能就是显示正在出库的任务和待出库的任务。其中可能复杂一点的也就是撤销,因为出库完成的话我们可以用手持来进行确认。那么接下来我们说一下撤销。

出库任务管理-撤销

            //使用事务进行出库任务撤销ResultData resultData = new ResultData();try{//LOGOUTTASK lOGOUTTASK1 = await _fsql.Select<LOGOUTTASK>().Where(x => x.ID == Convert.ToDecimal(lOGOUTTASK.ErpoutId)).FirstAsync();string palno = lOGOUTTASK.PALNO;var ErpOut = await _fsql.Select<LogErpOut>().Where(x => x.ORDNO == lOGOUTTASK.ORDNO && x.ITMNO == lOGOUTTASK.ITMNO).FirstAsync();var QuantMstore = await _fsql.Select<LogMstore>().Where(x => x.PALNO == palno).FirstAsync();string quant0 =ErpOut.QUANT0;string quanout = QuantMstore.QUANTOUT;//1.删除出库任务表数据_fsql.Transaction(() => {var derows = _fsql.Delete<LOGOUTTASK>().Where(x => x.ID == lOGOUTTASK.ID).ExecuteAffrows();if (derows <= 0) throw new Exception("出库任务撤销失败!");//2.修改库位状态var uprows = _fsql.Update<LOGSTORAGE>().Set(x => x.AFLAG, "F").Where(x => x.ADDRE == lOGOUTTASK.ADDRESRC).ExecuteAffrows();if (uprows <= 0) throw new Exception("库位状态撤销失败!");//3.修改出库单已配货数量quant0 = (Convert.ToDouble(quant0) - Convert.ToDouble(lOGOUTTASK.QUANT)).ToString();var rows = _fsql.Update<LogErpOut>().Set(x => x.QUANT0 == quant0).Set(x => x.IfDo == "O").Where(x => x.ORDNO == lOGOUTTASK.ORDNO && x.ITMNO == lOGOUTTASK.ITMNO).ExecuteAffrows();if (rows <= 0) throw new Exception("配货数量回写失败!");//4.修改库存数量quanout = (Convert.ToDouble(quanout) - Convert.ToDouble(lOGOUTTASK.QUANT)).ToString();if (Convert.ToDouble(quanout) < 0) quanout = "0";var mstoreRows = _fsql.Update<LogMstore>().Set(x => x.QUANTOUT == quanout).Where(x => x.PALNO == palno).ExecuteAffrows();if (mstoreRows <= 0) throw new Exception("修改库存数量失败!");});}catch (Exception ex){resultData.code = 6001;resultData.data = ex.Message;}return resultData;

撤销的话我配合部分代码来进行讲解,撤销这个功能和入库任务的撤销一样为了保证数据的准确性,需要用到事务。那么撤销要做哪些操作呢?
1.删除这条任务;
2.修改库位状态;因为我们出库任务是上一步配货完成后才生成的,所以我们撤销的时候也要把这个库位给释放出来。
3.修改出库单的已配货数量;举个例子我们单据要出库500件货物,然后配货了三个托盘也就是三个出库任务,这个时候我们撤销其中一个任务,是不是这个数量我们要给还原回去。
4.修改库存可用数量;注意我们这里修改的并不是库存数量,因为我们只是生成了这个任务,并没有去执行这个任务,所以库存是不会被扣减的,只有任务完成后或关单后才会扣减掉库存。那么库存的可用数量是什么呢,比如A物品我们库存里有10000件,这个时候可用数量也是10000件,当我们要出500件的时候,是不是库存还是10000件,因为这个任务还没有真正的执行,那可用数量就是10000-500,这个时候比如我们要撤销,那么这个可用数量的话就必须给还回去。

结尾

因为我是以我手里这款项目做了一个演示,而且这个项目还属于开发中其中肯定有一些细致的要求并没有具体写。不过大致的出库流程就是这些,当然其中一定会有很多遗漏,因为我在这个行业也才一年多一点,也不能说特别了解,不过这个出库流程对于想了解WMS的小伙伴还是能提供一定的认知。而且出入库只是WMS中的部分模块,里面肯定还有会质量转换、抽检、盘点等等很多功能,当所有的功能都用到的时候才是一个完整的流程。

深入浅出WMS之出库流程解析相关推荐

  1. 【项目】出库流程记录

    需求分析:前端传入数据为list,里面为包含线路的数组,例如:lineInfos:[lineNo,lineNo...].功能:第一批前六辆车直接到交接位,后面的车在等待位排队等待,交接位有空闲位置时等 ...

  2. 深入浅出WMS之入库流程解析

    深入浅出WMS之入库流程解析 前言 创建入库单 入库单管理 入库单管理-组盘 入库单管理-关单 入库任务管理 入库任务管理-货位分配 入库任务管理-任务撤销 入库任务管理-入库完成 结尾 前言 古人十 ...

  3. wms系统的出库单价是这样自动生成的?

    wms仓库管理软件中,出库单价是可以自动填写,因为自动生成价格通常有几种情况,所以,用户可以在参数设置,单据定义中设置如何自动产生出库价. wms仓库管理软件 1.按成本价 根据用户选择的成本算法(先 ...

  4. 2021-05-26wms系统的出库单价是这样自动生成的?

    wms仓库管理软件中,出库单价是可以自动填写,因为自动生成价格通常有几种情况,所以,用户可以在参数设置,单据定义中设置如何自动产生出库价. wms仓库管理软件 1.按成本价 根据用户选择的成本算法(先 ...

  5. 仓储系统之入库、出库理解浅谈

    入库管理: 功能:入库单打印.入库上架确认. 一.入库流程: 1,首先,操作人员在电脑上通过仓储系统的入库管理下的入库单打印功能查询有没有要打印的入库单.如果有,打印入库单,入库单主要信息:商品条码. ...

  6. 被装管理系统之出入库流程

    一.系统简介 本系统主要分为三部分:后台系统软件,采用B/S架构:通道数据采集软件,采用CS架构:移动APP软件,Android系统.主要功能如下: n 手持功能:出库.回库.上架.盘点.报废 n 发 ...

  7. 编辑出库单issue

    普遍意义上的出库流程是在出库之前要有一个审批流程(编辑出库单审批),流程过了,再走出库单的流程(出库单审批) 极少数情况下,出库单的流程可直接过,即直接审批通过

  8. WMS出库作业流程简介

    一.WMS出库作业的基本概念 WMS出库作业是指将已经确认出库的物料,按照出库单上的要求,从仓库中取出并发运到指定地点的整个过程.WMS出库作业需要遵循一定的流程和规定,以确保出库的准确性和高效性. ...

  9. 超详细的WMS仓储管理系统介绍——出库篇

    目前市面上的WMS主要分为四类,分别是电商WMS.物流WMS.零售WMS.工厂WMS,其中市场占有率占比最大的为电商WMS. 作为全球商品品种最多的网上零售商,亚马逊具有强大的仓储系统进行支撑,不仅满 ...

最新文章

  1. 【深度学习】(7) 交叉验证、正则化,自定义网络案例:图片分类,附python完整代码
  2. __sync_fetch_and_add
  3. R语言读取出现 列的数目比列的名字要多的解决方法
  4. 计算机应用系统的开发活动,计算机应用教学训练系统的开发与应用.doc
  5. 实现权限控制_Spring自定义注解+AOP实现权限控制
  6. Thread class vs Runnnable interface(转)
  7. 在一个类型的继承体系中,成员的构造顺序
  8. Linux安装MySQL的两种方法
  9. 我的docker随笔25:一个测试用的镜像制作过程
  10. VMware:虚拟机(xp)与主机(win10)连接步骤(超详细)
  11. 富户端商业应用开发教程 开发易买网电子商务交易平台教程
  12. java printf 格式_JAVA中Printf支持的格式
  13. 伯克利校长全员邮件:上课先用 Zoom,还不行就发电报!
  14. 【SLAM学习笔记】10-ORB_SLAM3关键源码分析⑧ Optimizer(五)sim3优化
  15. 【AI科幻】地球陨落·平行世界
  16. 介绍一个软件开发工具,堪称快速开发神器
  17. 吐血推荐:“四无男”泡良 妞 实战攻略
  18. I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之kernel移植
  19. CGdiObject::DeleteObject的说法
  20. unity 2d摄像机类型_Unity法线水,顺便利用CommandBuffer实现廉价的深度和截屏

热门文章

  1. html自动生成价格,Excel技巧:用VLOOKUP函数制作产品报价单,自动生成价格!
  2. 邮件合并批量制作邀请函
  3. 2017湖湘杯Writeup
  4. 数据采集:如何自动化采集数据
  5. python控制其它软件_python——实现ERP软件自动化操作
  6. 人生的极致:大道至简 知行合一
  7. 微信小程序搜索功能的实现(模糊搜索、带历史记录)
  8. 微博的大数据挖掘:知著、见微、晓意
  9. 微信小游戏实现语音识别(超详细)
  10. C++病毒——鼠标乱飞