其他分享
首页 > 其他分享> > 物料组查询接口,处理数据后,再处理分页

物料组查询接口,处理数据后,再处理分页

作者:互联网

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.

 

标签:物料,matkl,wgbez,处理,OPTIONAL,t023t,接口,t023,TYPE
来源: https://www.cnblogs.com/chaguoguo/p/16304286.html