预留单新增修改增加⽇志
公司碰到⼀个需求,由于预留单在抛到条码扫描过账系统之后发⽣了更改,造成实际中仓库的不⽅便,需要做⼀个⾃制表存储⽇志。
刚好RESB在CDHDR⾥⾯⼜没有⽇志记录,不得不在程序⾥⾯做增强,需要在MB21/MB22 (  直接创建预留单 )、BAPI创建修改删除预留单、CJ20N(  项⽬ 库存类物料组件⽣成预留单)/CN22,⽣产订单保存创建预留CO01/CO02,委外PO会展BOM产⽣预留(不⽤考虑)。
⾸先介绍⼀下预留单号:预留单号是可能不留号的,原因是预留单的Number Range有设20的缓冲编号,如果需要保证连号需要调整。
预留是向仓库发出⼀种请求,要求仓库在某个时间保证某个物料在就绪状态。
1、⼿⼯创建预留单:
提交更改是什么
MB21/MB22除了我们正常的部门领料会⽤到,其实还有⼀些其他的⽤途。
在新机研发新品打样上的⽤料,因⽆法对⼯单实施发料,⼜想把这种消耗纳⼊到SAP系统作全局控制;此时⼿⼯创建预留可起到很⼤的帮助;
⾸先:可对研发新品打样,建⽴成本中⼼;如果有⽤料,审请后创建成本中⼼预留,
RUN MRP后⾃动产⽣采购审请,经审批后产⽣采购订单,
再对预留(成本中⼼)发料。这⼀过程发⽣的费⽤,即可纳⼊到SAP核算体系;
其它:
正常下客户订单,通过RUN MRP产⽣的⼯单预留,转成PO后,预留在这整个过程是不能被修改的,查看库存明细,即可看到明细,其中包括预留数量;
对⼯单发料后,库存中的预留⾃动消失;
⽽⼿⼯创建的预留,则是可以删除的,对⼿⼯预留删除后,不能反删除!
⾃动预留:当Procduction orders, networks, WBS,委外 PO ⼀创建,需要的元/组件就会在仓库⾃动
建⽴预留。如果在仓库级采⽤再订购点计划(Reorder Point Planning),当可⽤库存低于再订购点时,系统⾃动⽣成库存调拔预留补上差量。
⽤户不能⼿动修改预留(MB21/MB22),必须从发起预留的事务对象单据间接修改,修改⼯单,⽹络,委外PO数量,间接更新预留单数量。
MB22/MB21增强⽐较简单:使⽤的标准⽤户出⼝User Exit:MBCF0007。
2、BAPI创建修改删除预留单
BAPI的函数组:MB_BUS2093,注意:BAPI_RESERVATION_CREATE已经过时,⽆法使⽤,请选择函数:
BAPI_RESERVATION_CREATE1
增强内的更新语句都存放在MBRE函数组的函数⾥⾯,⽽且在函数的最后都有BADI去实现增强
但是我⽤SE19去新建BADI的实现的时候,系统表⽰这个BADI还没有开放给我们普通⽤户,这个控制是在表SXS_ATTR的INTERNAL字段控制的。
后来还是没写增强,在BAPI后⾯写上的⽇志逻辑,⼤家如果有什么更好的办法,请私聊。
3、CJ20N和CN22的预留单
CJ20N和CN22的预留单⽤不了User Exit和BADI,⽤系统留下来的enhancement point,但是两者的增强不能写到⼀起。
⾸先预留是挂在⽹络中的,所以单独⽤CN22也是能够修改预留(注:只能修改预留单数量,并不能创建,必须在CJ20N新增物料组件)。
修改预留和修改⽹络NETWORK同步的,都在函数 CO_ZV_ORDER_POST 中,但是CN22 只修改⽹络,CJ20N 在修改⽹络之后还需要修改项⽬和WBS ,这种使⽤的是 SAP LUW的理念, 使三者同时提交或者回滚。主要使⽤的是UPDATE FUNCTION 和PERFORM ON COMMIT  两种语法。
SAP LUW可以参考我的历史⽂章:
这种语法的提交回滚都是在 commit work / commit work and wait ⼀时刻提交的, 两种语法的差异可以参考上⾯的⽂章。
CJ20N 在调⽤ CO_ZV_ORDER_POST的时候,通过⼊参 控制函数不会提交,⽽是在修改完项⽬之后⼀起提交。 为了避免差异,我再update function中写了增强,这样可以保持⼀致性,注意:请不要再提交commit work 后⾯写增强,在这⾥CN22/CJ20N/BAPI的提交语法的地点都不⼀致。
⽣产预留CO01/CO02 ⽬前并不启⽤, 所以也就没有去。
可以参考这篇⽂章: