FUNCTION z_rfc_plm_009. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(P_SYSTEM) TYPE CHAR4 DEFAULT 'PLM' *" VALUE(P_UNAME) TYPE UNAME DEFAULT SY-UNAME *" VALUE(P_NAME1) TYPE CHAR12 OPTIONAL *" VALUE(P_START) TYPE SYST_TABIX OPTIONAL *" VALUE(P_LIMIT) TYPE SYST_TABIX OPTIONAL *" VALUE(P_MATKL) TYPE MATKL OPTIONAL *" VALUE(P_WGBEZ) TYPE WGBEZ OPTIONAL *" VALUE(P_KONTSX) TYPE CHAR1 OPTIONAL *" EXPORTING *" VALUE(P_TOTAL) TYPE INT4 *" TABLES *" IT_T023T STRUCTURE ZRFCS_PLM009 OPTIONAL *" S_MATKL STRUCTURE ZRANGES_MATKL OPTIONAL *" S_WGBEZ STRUCTURE ZRANGES_WGBEZ OPTIONAL *"---------------------------------------------------------------------- DATA: lv_tabix TYPE sy-tabix. IF p_matkl IS NOT INITIAL. s_matkl-sign = 'I'. s_matkl-option = 'CP'. s_matkl-low = p_matkl. APPEND s_matkl. ENDIF. IF p_wgbez IS NOT INITIAL. s_wgbez-sign = 'I'. s_wgbez-option = 'CP'. s_wgbez-low = p_wgbez. APPEND s_wgbez. ENDIF. IF p_limit IS INITIAL OR p_kontsx IS NOT INITIAL. SELECT * INTO CORRESPONDING FIELDS OF TABLE @it_t023t FROM t023t WHERE spras EQ @sy-langu AND matkl IN @s_matkl AND wgbez IN @s_wgbez. p_total = lines( it_t023t[] ). ELSE. SELECT COUNT(*) INTO @p_total"TABLE @DATA(lt_t023t) FROM t023t WHERE spras EQ @sy-langu AND matkl IN @s_matkl AND wgbez IN @s_wgbez. SELECT FROM t023t FIELDS matkl,wgbez WHERE spras EQ @sy-langu AND matkl IN @s_matkl AND wgbez IN @s_wgbez ORDER BY matkl INTO CORRESPONDING FIELDS OF TABLE @it_t023t OFFSET @p_start UP TO @p_limit ROWS. * p_total = lines( lt_t023t[] ). ENDIF. IF it_t023t[] IS NOT INITIAL. SELECT t023~matkl, t023~bklas, t030~ktopl, t030~ktosl, t030~bwmod, t030~komok, t030~konts INTO TABLE @DATA(lt_t023) FROM t023 JOIN t030 ON t023~bklas EQ t030~bklas FOR ALL ENTRIES IN @it_t023t WHERE t023~matkl EQ @it_t023t-matkl AND t023~bklas NE '' AND t030~ktopl EQ 'HL00'. SORT lt_t023[] BY matkl. ENDIF. LOOP AT it_t023t ASSIGNING FIELD-SYMBOL(<ls_t023t>). READ TABLE lt_t023 INTO DATA(ls_t023) WITH KEY matkl = <ls_t023t>-matkl BINARY SEARCH. IF sy-subrc EQ 0. <ls_t023t>-konts = ls_t023-konts. ENDIF. ENDLOOP. IF p_kontsx IS NOT INITIAL. DELETE it_t023t[] WHERE konts EQ ''. p_total = lines( it_t023t[] ). SORT it_t023t[] BY matkl. IF p_limit IS NOT INITIAL. "分页操作 LOOP AT it_t023t ASSIGNING FIELD-SYMBOL(<ls_t023t2>). <ls_t023t2>-zindex = sy-tabix. ENDLOOP. lv_tabix = p_start + p_limit. DELETE it_t023t[] WHERE zindex > lv_tabix. DELETE it_t023t[] WHERE zindex < p_start. ENDIF. ENDIF. ENDFUNCTION.