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.