- 业务场景:采购订单抬头文本需要根据采用的采购申请,将采购申请的抬头文本带入到采购订单抬头文本
- 如果是采购订单行项目文本的话,可以通过SPRO配置:物料管理->采购->采购订单->采购订单文本->定义采购订单中抬头/项目文本的复制规则;注意:抬头就只是采购申请的配置不了,因为一个订单可能对应多个采购申请,供应商文本那些还是可以带出来的,具体可以看配置点
- 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.