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.

效果:

image

 

posted @ 2026-05-27 11:49  鲸与海  阅读(9)  评论(0)    收藏  举报