ABAP ME21N/ME22N抬头文本增强

  1. 业务场景:采购订单抬头文本需要根据采用的采购申请,将采购申请的抬头文本带入到采购订单抬头文本
  2. 如果是采购订单行项目文本的话,可以通过SPRO配置:物料管理->采购->采购订单->采购订单文本->定义采购订单中抬头/项目文本的复制规则;注意:抬头就只是采购申请的配置不了,因为一个订单可能对应多个采购申请,供应商文本那些还是可以带出来的,具体可以看配置点
  3. BADI增强点:ME_PROCESS_PO_CUST,我的场景是采用采购申请和检查都去获取抬头文本
    在这里插入图片描述
    HEADER里面有这么些对文本操作的方法,我用的是SET_TEXT
    在这里插入图片描述
    4.上代码
IF sy-tcode = 'ME21N' OR sy-tcode = 'ME22N'.
*    将采购申请的抬头文本带到采购订单 抬头订单备注长文本里面去
      DATA:ls_item     TYPE mepoitem,
           ls_item_obj TYPE REF TO if_purchase_order_item_mm,
           lt_items    TYPE TABLE OF purchase_order_item,
           ls_items    TYPE purchase_order_item.
      DATA:BEGIN OF ls_banfn,
             banfn TYPE ekpo-banfn,
           END OF ls_banfn,
           lt_banfn LIKE TABLE OF ls_banfn.
      DATA:lv_str     TYPE string,
           lv_str_all TYPE string,
           lv_tdname  TYPE thead-tdname.
      DATA:ls_tdline TYPE mmpur_textlines,
           lt_tdline TYPE TABLE OF mmpur_textlines.

      CALL METHOD im_header->get_items
        RECEIVING
          re_items = lt_items.

      LOOP AT lt_items INTO ls_items.
        ls_item_obj = ls_items-item.

        CALL METHOD ls_item_obj->get_data
          RECEIVING
            re_data = ls_item.

        IF ls_item-banfn IS NOT INITIAL.
          ls_banfn-banfn = ls_item-banfn.
          APPEND ls_banfn TO lt_banfn.
          CLEAR ls_banfn.
        ENDIF.

      ENDLOOP.

      IF lt_banfn IS NOT INITIAL.
        SORT lt_banfn.
        DELETE ADJACENT DUPLICATES FROM lt_banfn COMPARING ALL FIELDS.

        LOOP AT lt_banfn INTO ls_banfn.
          CLEAR:lv_str,lv_tdname.
          lv_tdname = ls_banfn-banfn.

          CALL METHOD cl_eso_extraction_tools=>extract_long_text_by_id
            EXPORTING
              iv_langu        = sy-langu    "语言
              iv_text_id      = 'B01'       "文本id
              iv_name         = lv_tdname   "文本名
              iv_object       = 'EBANH'     "文本对象
            IMPORTING
              ev_search_terms = lv_str.
          lv_str_all = lv_str_all && lv_str.

        ENDLOOP.

        CONDENSE lv_str_all NO-GAPS.
        DATA(lv_strlen) = strlen( lv_str_all ).

        IF lv_strlen > 132.
          DATA(lv_len) = lv_strlen - 132.
          lt_tdline = VALUE #( ( tdobject = 'EKKO' tdid = 'F03' tdformat = '1' tdline = lv_str_all+0(132) )
                               ( tdobject = 'EKKO' tdid = 'F03' tdformat = '2' tdline = lv_str_all+132(lv_len) ) ).
        ELSE.
          lt_tdline = VALUE #( ( tdobject = 'EKKO' tdid = 'F03' tdformat = '1' tdline = lv_str_all+0(lv_strlen) ) ).
        ENDIF.

        CALL METHOD im_header->if_longtexts_mm~set_text
          EXPORTING
            im_tdid      = 'F03'
            im_textlines = lt_tdline.
      ENDIF.
    ENDIF.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值