好吧,今天同事让做个BOM组件物料重复检查
网上有很多例子都是在保存的时候检查的,用的是BADI :BOM_UPDATE
自己也试了一下,麻烦。。。。很麻烦。。。尤其是在重复检查的时候:
METHOD if_ex_bom_update~change_at_save. DATA:z_stpob TYPE LINE OF cs01_stpob_tab, z_stpob1 TYPE LINE OF cs01_stpob_tab, g_tab_bstpob TYPE TABLE OF stpob, g_tab_astpob TYPE TABLE OF stpob, z_msg TYPE string, count1 TYPE i, count2 TYPE i. DATA:lv_time TYPE i. count1 = lines( delta_stasb ). count2 = lines( delta_stpob ).* IF count2 > count1. LOOP AT delta_stpob INTO z_stpob. APPEND z_stpob TO g_tab_bstpob. IF sy-tabix <= count1. ELSE. APPEND z_stpob TO g_tab_astpob. ENDIF. ENDLOOP. LOOP AT g_tab_astpob INTO z_stpob. CLEAR:lv_time. LOOP AT g_tab_bstpob INTO z_stpob1 WHERE idnrk = z_stpob-idnrk. lv_time = lv_time + 1. ENDLOOP. IF lv_time > 1. CONCATENATE z_msg '项目' z_stpob-posnr '组件重复/' INTO z_msg. ENDIF. ENDLOOP. MESSAGE z_msg TYPE 'E'. RETURN.* EXIT. ENDMETHOD.
后来DEBUG标准程序,找到了个很适合的地方:
函数:CS_BT_STPOB_UPDATE
在程序最开始加段检查逻辑
好了,检查完成。。。每输入一行组件,都会检查。。。完美