SAP ME21N 创建采购订单时采购信息记录号自动获取逻辑调整

案例:标准逻辑中采购信息记录号是按照供应商和物料获取,现调整为按照供应商+物料+工厂获取采购信息记录号。

发布时间:2025/12/3

  1. 采购信息记录如下图所示,本案例中需要获取工厂3411对应的采购信息记录号5301306408。
    在这里插入图片描述

  2. 在用ME21N,ME22N创建或修改采购订单时,在输入供应商、物料和工厂并回车后,我们可以看到行项目上获取到了采购信息记录号5302788988,并非5301306408。

在这里插入图片描述

  1. 通过事务码ST05跟踪SQL读取情况(这是一个跟踪标准逻辑中数据获取位置的小技巧),找到了标准代码中按照供应商+物料获取到一条采购信息记录号的逻辑。发现获取到的不是我们需要的采购信息记录号,所以通过增强的方式重新获取工厂级采购信息记录号。
    在这里插入图片描述

  2. 在BAPI 方法IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM中写增强。
    在这里插入图片描述

源码如下:

  METHOD if_ex_me_process_po_cust~process_item.
    DATA: ls_mepoitem   TYPE mepoitem,
          ls_mepoheader TYPE mepoheader,
          ls_head       TYPE REF TO if_purchase_order_mm.
    DATA: lv_msg TYPE string.

    DATA:it_eine TYPE STANDARD TABLE OF eine.

    ls_mepoitem = im_item->get_data( ).
    ls_head = im_item->get_header( ).
    ls_mepoheader = ls_head->get_data( ).

    CHECK sy-tcode = 'ME21N' OR sy-tcode = 'ME22N' OR sy-tcode = 'ME23N'.   "用ME23N进去更改,而事务代码不会变成ME22N.
 
    SELECT *
      INTO CORRESPONDING FIELDS OF TABLE it_eine
      FROM eine AS e
     INNER JOIN eina AS a ON e~infnr = a~infnr
     WHERE e~ekorg = ls_mepoheader-ekorg AND e~werks = ls_mepoitem-werks AND e~esokz = ls_mepoitem-pstyp AND e~loekz = ''
       AND a~lifnr = ls_mepoheader-lifnr AND a~matnr = ls_mepoitem-matnr AND a~loekz = ''.
    IF sy-subrc <> 0.
      lv_msg = '物料:' && |{ ls_mepoitem-matnr ALPHA = OUT }| && '供应商:' && |{ ls_mepoheader-lifnr ALPHA = OUT }| && '在工厂:' && ls_mepoitem-werks && '下无采购信息记录!'.
      CONDENSE lv_msg NO-GAPS.
      mmpur_business_obj_id ls_mepoitem-id.
      mmpur_message_forced 'E' 'ZMM01' '999' lv_msg '' '' ''.
      CALL METHOD im_item->invalidate( ).
      RETURN.
    ELSE.
      READ TABLE it_eine INTO DATA(ls_infnr) INDEX 1.
      ls_mepoitem-infnr = ls_infnr-infnr.
      "重写采购信息记录号
      CALL METHOD im_item->set_data
        EXPORTING
          im_data = ls_mepoitem.
    ENDIF.
    
  ENDMETHOD.    
  1. 最后看一下增强后的效果吧!获取到了工厂级的采购信息记录号5301306408。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值