在SAP MM模块项目实施中,很多用户对采购订单中“交货已完成”这个字段(如下图)的功能用途存在困惑。
比如:上图采购订单100个,已收货50个,另外50个因为质量或其它原因不需要供应商再交货,很多用户认为通过手工勾选这个“标识”后,这张采购订单应该不能再进行交货了,但实际并不能起到这样的控制效果,仓库仍然可以继续收货,为什么?
从这字段翻译的中文意思上理解,既然交货已完成,就应该不能再继续交货了,但其实这个字段作用不是用于控制采购订单能否继续交货的。
这个字段作用是用于控制采购订单中的项目是否还有未清项的,它可以由系统在达成交货完成条件后自动设定,也可以在未达成交货完成条件时,通过手动设定,它的主要作用体现在MRP计算逻辑中。
举个例子:采购100件物料,只收了50件,另外50件尚未收货,如果这个采购订单中没勾选这个字段,那么跑MRP时会将这个采购订单中的未收货数量做未供应来计算,但如果勾选了,跑MRP时将不会再计算该采购订单的未供应数量。
这个字段的作用虽然不是用来控制采购订单能否交货的,但在很多实际项目中,用户都希望这个字段勾选后,采购订单就不能再进行交货了。
遇到这样业务控制需求,通常会采用如下两种解决方案来满足用户。
方案一:通过配置系统消息号,然后在采购订单上手工勾选“收货已完成“,并设定“最近收货日期”为过去的日期。
方案二:通过增强,增加采购订单收货的判断条件,当“已完成收货”打上勾选后不允许在进行交货。
对比下这两种方案的优缺点。
对此很多人也许会抱怨SAP系统怎么那么烂,这么简单的功能还要特殊配置或增强,但是如果能从业务管理角度去看SAP标准为何不做这样控制,会发现其管理理念的前瞻性。
我也认为这样控制的必要性是值得商榷的,试想一下一个公司的采购如果经常出现部分交货后,因质量或其它原因就不让供应商交货了,难道不是更应该反思公司采购管理的问题,如果通过系统上去堵,那么供应商交货质量的数据又如何在系统中真实体现出来,你又根据什么去评估管理供应商?
另外如果写增强代码去控制,随着业务的发展,因为这增强的存在,有些业务就需要比较复杂并且低效的方式去处理。
虽然我认为没有必要做这样的控制,但我也知道在项目中要说服别人接受你观点,还是非常挑战人的沟通能力的,所以最后附上上面两种方案的具体实施步骤供大家参考下。
方案一:通过配置方式实现
步骤1:使用Tcode:OMCQ ,将系统消息号163 类型设置为”E“.
步骤2:使用Tcode:ME22N 修改采购订单,将“交货已完成“勾选上,同时要设置最近交货日期为过去的一个日期,如下图。
这样设置后,再使用MIGO进行收货,效果如下,系统弹出错误信息,不允许仓库再进行收货。
方案二:通过写增强进行控制。
增强出口:EXIT_SAPMM07M_001
步骤1:输入Tcode:CMOD,回车,进入如下界面。
步骤2:输入项目名称,点击创建,进入如下维护界面。
步骤3:输入短文本描述,点击“保存”,后进入如下维护界面。
步骤4:点击“本地对象”后进入如下维护界面。
步骤5:点击“增强分配”后进入如下维护界面
步骤6:点击“组件”后进入如下维护界面。
步骤7:双击功能出口名称:EXIT_SAPMM07M_001,进入如下维护界面。
步骤8:双击ZXMBCU02,进入如下维护界面
步骤9:点击返回至如下界面,激活增强。
激活成功显示如下绿色灯
按上面步骤完成增强后,再使用MIGO进行收货,效果如下,系统弹出错误信息,不允许仓库再进行收货。
特别声明:以上纯属个人学习SAP的体会和想法,不代表任何公司 ,文中操作演示截图,来源于SAP软件,相应著作权归SAP公司所有。