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.
SAP ABAP分页功能通用代码
最新推荐文章于 2024-01-04 16:31:57 发布