报工增强中不同的增强点对应的方法的触发点都不一样,该在哪个方法去实现。今天我们来聊一下吧(●'◡'●)。本文内容基于公司的具体业务,本人仅是菜鸟一名,如有错误请指出交流🤝。
报工事务码CO11N(单个工序确认)
1. 功能:用于对某一具体工序进行逐条报工,适合较复杂的多工序生产流程。
2. 特点:
- 可输入每道工序的实际开始/完成时间、工时、产量、报废量等。
- 支持回写活动(如人工工时、机器工时)。
- 支持部分确认、最终确认。
- 灵活度高,适合详细控制。
3. 界面:
报工常用的增强分析
第一个:WORKORDER_CONFIRM
从事务码SE18输入”WORKORDER_CONFIRM“,就可以进入到如下界面。可以看到该增强点的具体描述,以及其对应的接口名称”IF_EX_WORKORDER_CONFIRM“。
在该BADI中,其接口会有多个方法,我们就是找到对应的方法去实现它(和JAVA接口实现差不多吧),下面是该接口所有的方法。
1.AT_SAVE
该方法在在保存订单确认时触发,主要用于对输入的一些字段数据进行校验以及判断。参数如下,I_TYPE暂时未知具体代表什么标识,IS_CONFIRMATION是页面确认的数据信息,也是使用最多的参数。
2.BEFORE_UPDATE
该方法在AT_SAVE触发后、在写进数据库之前进行的一个方法。暂时我还没有用过这个方法,不多说,后面有具体业务使用到了再回来补充。下面是对应的参数列表。
3.IN_UPDATE
4.AT_CANCEL_CHECK
CO13取消报工,在选择完要取消报工的工序,点击保存的时候触发。
5.INDIVIDUAL_CAPACITY
第二个:WORKORDER_GOODSMVT
从事务码SE18输入”WORKORDER_GOODSMVT“,就可以进入到如下界面。可以看到该增强点的具体描述,以及其对应的接口名称”IF_EX_WORKORDER_GOODSMVT“。
在该BADI中,其接口会有多个方法,接下来就重点讲我用到的方法,没有用到的不详细讲,待后面慢慢补充~~~
1.BACKFLUSH
下面图片是该方法参数。
这个方法的参数有货物移动行项目的数据信息,点击“货物移动”时会触发该方法,是在进去界面前就会触发而不是在进入界面后触发,这就会导致如果有报错信息、警告信息就会不进入界面。这样子想知道具体错在哪里以及想修改也不行,感觉就是完全困在当前页面了,所以这方法不是我想要的。
后面发现报错信息后,再次回车就会进入到货物移动页面。但是这样不利于用户使用操作,毕竟用户需要的是“傻瓜式操作”哈哈哈哈哈哈~~~~
2.GM_SCREEN_LINE_CHECK
方法只有一个参数,参数数据就是货物移动中行项目的内容。这样就可以对输入的货物移动的行项目数据进行校验啦!
之前是需要做一个需求,在CO11N报工的时候货物移动带出的物料对应的仓位以及新增的进行判断,有时候系统自动带出来的仓位不是我们所希望的。找了很多报工可以做增强的地方,都没有货物移动的行项目参数,终于!!!!在这个方法里找到了!!!!。所以在这个方法完成了我的需求😭。
举个例子:这样在输入完信息后回车就会触发啦。
METHOD if_ex_workorder_goodsmvt~gm_screen_line_check.
DATA : lt_resb TYPE TABLE OF resb,
ls_resb TYPE resb.
* CO11N不允许用S1,N1,Z1,S2,N2,Z2开头的库位
IF i_cowb_comp-lgort CS 'S1' OR i_cowb_comp-lgort CS 'N1' OR i_cowb_comp-lgort CS 'Z1' OR
i_cowb_comp-lgort CS 'S2' OR i_cowb_comp-lgort CS 'N2' OR i_cowb_comp-lgort CS 'Z2'.
MESSAGE '不允许使用原材料库位报工!请检查' TYPE 'E'.
ENDIF.
ENDMETHOD.
3.GM_SCREEN_OKCODE_CHECK
该方法触发点是在货物移动页面进行按钮操作,比如:返回、保存等。非常适合对整个列表循环进行校验判断。
如果报错是不允许保存以及返回操作的,直到数据符合要求。
METHOD if_ex_workorder_goodsmvt~gm_screen_okcode_check.
DATA : lt_resb TYPE TABLE OF resb,
ls_resb TYPE resb.
LOOP AT ct_comp ASSIGNING FIELD-SYMBOL(<lfs_item>).
* CO11N不允许用S1,N1,Z1,S2,N2,Z2开头的库位
IF <lfs_item>-lgort CS 'S1' OR <lfs_item>-lgort CS 'N1' OR <lfs_item>-lgort CS 'Z1' OR
<lfs_item>-lgort CS 'S2' OR <lfs_item>-lgort CS 'N2' OR <lfs_item>-lgort CS 'Z2'.
MESSAGE '不允许使用原材料库位报工!请检查' TYPE 'E'.
ENDIF.
ENDLOOP.
ENDMETHOD.
常用增强BADI的个人理解
由于公司业务部门的一些需求,经常需要对标准的事务码做一些增强操作,来符合具体的业务需求。在这里讲一下我对增强的理解吧,不知道对不对,也只是为了留下我的足迹哈哈哈哈哈!
SAP第三代增强:基于类的增强(BADI)
BADI中的增强点(Enhancement Spot)、BADI定义(BADI Definitions)、接口(Interface)、增强实施(Enhancement Implementation)、BADI实施(BADI Implementation)、实施类(Implementing Class)之间的关系:
- 一个增强点下可以创建多个BADI定义 (1...N)
- 每个BADI定义由一个接口与多个增强实施(1...N) 组成
- 每个增强实施里可以创建多个BADI实施(1...N)
- 每个BADI实施里可以创建一个实施类,在实施类就可以实现接口的方法啦
- BADI实质上就是将接口与实现类组织(打包、捆绑)在一起