ME22N采购订单增强检查
1、确认页签的累计确认数量不能超过PO数量
一开始是打算用以下方式来获取确认数据
ls_conf = ls_item-item->get_confirmation_handler( ).
lt_conf_data = ls_conf->get_data( ).
但是在第2行会Dump无法通过NULL对象引用访问,因此参考已解决:采购订单ME_PROCESS_PO_CUST阅读确认 - SAP 社区
增强点:BADI增强ME_PROCESS_PO_CUST中的CHECK方法
代码:
METHOD if_ex_me_process_po_cust~check. INCLUDE mm_messages_mac. TYPES BEGIN OF ty_ekes. INCLUDE TYPE ekes. TYPES: updkz TYPE c LENGTH 1. TYPES END OF ty_ekes. FIELD-SYMBOLS: <lt_ekes> TYPE ANY TABLE. DATA: lt_po_item TYPE purchase_order_items, ls_po_item LIKE LINE OF lt_po_item, ls_item TYPE mepoitem, ls_item_msg TYPE mepoitem. DATA: lt_ekes TYPE TABLE OF ty_ekes, ls_ekes TYPE ty_ekes. DATA: lv_menge TYPE ekes-menge, lv_msg TYPE string. lt_po_item = im_header->get_items( ). ASSIGN ('(SAPLEINB)ETS[]') TO <lt_ekes>. IF <lt_ekes> IS ASSIGNED. MOVE-CORRESPONDING <lt_ekes> TO lt_ekes. LOOP AT lt_po_item INTO ls_po_item. CLEAR lv_menge. ls_item = ls_po_item-item->get_data( ). LOOP AT lt_ekes INTO ls_ekes WHERE ebelp = ls_item-ebelp. lv_menge += ls_ekes-menge. ENDLOOP. "累计确认数量超过PO数量 IF lv_menge > ls_item-menge. lv_msg = |Total Confirmed Qty { lv_menge } is more than PO Qty!|. mmpur_business_obj_id ls_item-id. mmpur_context mmcnt_user_exit. mmpur_message_forced 'E' '00' '001' lv_msg '' '' ''. ch_failed = 'X'. ENDIF. ENDLOOP. ENDIF. ENDMETHOD.
效果:

落霞与孤鹜齐飞,秋水共长天一色

浙公网安备 33010602011771号