SAP ABAP分页功能通用代码

PERFORM frm_split_page TABLES et_item[]
                       USING page rows ep_head-re_count
                       CHANGING ep_head-status ep_head-message.


FORM frm_split_page TABLES p_table          "需要分页的table数据传入,form里处理好的分页数据也是通过这个参数传出(引用传递)
                     USING VALUE(p_page)    "mpos-页码
                           VALUE(p_rows)    "mpos-web每页显示的行数
                           VALUE(p_count)   "传入table的记录数
                     CHANGING p_status      "查询状态
                               p_message.   "返回消息

  DATA: lv_start TYPE int4.
  DATA: lv_end TYPE int4.
  DATA: lv_message TYPE char40.
*******由于table:p_table参数类型是不确定的,只用动态获取类型
  DATA: tr_table  TYPE REF TO cl_abap_tabledescr,
        tr_struct TYPE REF TO cl_abap_structdescr,
        tr_type   TYPE REF TO cl_abap_typedescr,
        fs_table  TYPE REF TO data,
        fs_struct TYPE REF TO data,
        td_comp   TYPE cl_abap_structdescr=>component_table.
  FIELD-SYMBOLS:
        <fs_table>  TYPE ANY TABLE,
        <fs_struct> TYPE any.
  tr_struct ?= cl_abap_structdescr=>describe_by_data( p_table ).
  td_comp = tr_struct->get_components( ).
  CALL METHOD cl_abap_structdescr=>create
    EXPORTING
      p_components = td_comp
    RECEIVING
      p_result     = tr_struct.
  CALL METHOD cl_abap_tabledescr=>create
    EXPORTING
      p_line_type = tr_struct
    RECEIVING
      p_result    = tr_table.

  CREATE DATA fs_table  TYPE HANDLE  tr_table.
  CREATE DATA fs_struct TYPE HANDLE  tr_struct.
  ASSIGN fs_table->* TO <fs_table>.
  ASSIGN fs_struct->* TO <fs_struct>.
*******由于table:p_table参数类型是不确定的,只用动态获取类型
  <fs_table> = p_table[].
  REFRESH p_table.
  lv_start = ( p_page - 1 ) * p_rows + 1.  "当前页开始记录数
  lv_end   = p_page * p_rows.          "当前页结束记录数
  IF p_count < lv_start.  "  如果sap查询到的记录数<当前页开始记录数
    p_status = 'False'.
    p_message = '没有符合条件的页码'.
  ELSE.
    LOOP AT <fs_table> ASSIGNING <fs_struct>.
      IF sy-tabix BETWEEN lv_start AND lv_end.
        APPEND <fs_struct> TO p_table.
      ENDIF.
    ENDLOOP.
  ENDIF.
ENDFORM.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值