话不多说,上代码
*&---------------------------------------------------------------------*
*& Report ZLY_PAGE_QUERY
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zly_page_query NO STANDARD PAGE HEADING.
TABLES: sflight.
TYPES: BEGIN OF ty_output.
INCLUDE TYPE sflight.
TYPES: slbox TYPE c,
END OF ty_output.
DATA: gt_output TYPE TABLE OF ty_output,
gs_output TYPE ty_output.
DATA: ok_code TYPE sy-ucomm.
DATA: save_ok TYPE sy-ucomm.
DATA: zpage TYPE char10.
DATA: gs_grid TYPE REF TO cl_gui_alv_grid.
DATA: gs_con TYPE REF TO cl_gui_custom_container.
DATA: gs_layo TYPE lvc_s_layo.
DATA: gt_fcat TYPE lvc_t_fcat.
DATA: gs_fcat TYPE lvc_s_fcat.
DATA: gv_col TYPE i.
DATA: gv_page TYPE i VALUE 1.
DEFINE m_fieldcat.
CLEAR gs_fcat.
gs_fcat-fieldname = &1.
gs_fcat-ref_table = &2.
gs_fcat-ref_field = &3.
gs_fcat-scrtext_l = &4.
gs_fcat-key = &5.
gv_col = gv_col + 1.
gs_fcat-col_pos = gv_col.
APPEND gs_fcat TO gt_fcat.
END-OF-DEFINITION.
SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME.
SELECT-OPTIONS: s_carrid FOR sflight-carrid.
SELECTION-SCREEN END OF BLOCK blk .
START-OF-SELECTION.
PERFORM frm_select_data USING gv_page.
CALL SCREEN 9000.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
SET PF-STATUS 'ZSTATUS'.
* SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
save_ok = ok_code.
CASE save_ok.
WHEN 'ZLPAGE'.
gv_page = gv_page - 1.
IF gv_page = 0.
gv_page = 1.
ENDIF.
PERFORM frm_select_data USING gv_page.
WHEN 'ZRPAGE'.
gv_page = gv_page + 1.
PERFORM frm_select_data USING gv_page.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE exit INPUT.
save_ok = ok_code.
CASE save_ok.
WHEN 'ZBACK'.
LEAVE TO SCREEN 0.
WHEN 'ZLEAVE'.
LEAVE TO SCREEN 0.
WHEN 'ZCANCEL'.
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module INIT_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE init_9000 OUTPUT.
zpage = gv_page.
IF gs_grid IS INITIAL.
PERFORM frm_set_grid.
PERFORM frm_set_layo.
PERFORM frm_set_fcat.
PERFORM frm_set_alv.
ELSE.
PERFORM frm_refresh_alv.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FRM_SELECT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_select_data USING fv_page.
DATA: lv_rows TYPE i.
DATA: lv_offset TYPE i.
"分页查询SQL
IF fv_page EQ 1.
SELECT * FROM sflight
ORDER BY carrid, connid, fldate
INTO CORRESPONDING FIELDS OF TABLE @gt_output
UP TO 10 ROWS.
ELSE.
lv_offset = ( fv_page - 1 ) * 10.
SELECT * FROM sflight
ORDER BY carrid, connid, fldate
INTO CORRESPONDING FIELDS OF TABLE @gt_output
UP TO 10 ROWS OFFSET @lv_offset.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_GRID
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_grid .
"实例化屏幕容器
CREATE OBJECT gs_con
EXPORTING
* PARENT =
container_name = 'ZCON'
* STYLE =
* LIFETIME = lifetime_default
repid = sy-repid
dynnr = '9000'
* NO_AUTODEF_PROGID_DYNNR =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
"实例化alv展示对象
CREATE OBJECT gs_grid
EXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =
i_parent = gs_con
* I_APPL_EVENTS = space
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_NAME =
* I_FCAT_COMPLETE = SPACE
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYO
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_layo .
CLEAR gs_layo.
gs_layo-box_fname = 'SLBOX'.
gs_layo-cwidth_opt = 'X'.
gs_layo-zebra = 'X'.
gs_layo-sel_mode = 'A'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_fcat .
m_fieldcat 'CARRID' '' '' '航线' ''.
m_fieldcat 'CONNID' '' '' '航班' ''.
m_fieldcat 'FLDATE' 'SFLIGHT' 'FLDATE' '日期' ''.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_alv .
CALL METHOD gs_grid->set_table_for_first_display
EXPORTING
* i_buffer_active =
* i_bypassing_buffer =
* i_consistency_check =
* i_structure_name =
* is_variant =
* i_save =
* i_default = 'X'
is_layout = gs_layo
* is_print =
* it_special_groups =
* it_toolbar_excluding =
* it_hyperlink =
* it_alv_graphics =
* it_except_qinfo =
* ir_salv_adapter =
CHANGING
it_outtab = gt_output
it_fieldcatalog = gt_fcat
* it_sort =
* it_filter =
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_REFRESH_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_refresh_alv .
DATA: ls_stable TYPE lvc_s_stbl.
ls_stable-col = 'X'.
ls_stable-row = 'X'.
CALL METHOD gs_grid->refresh_table_display
EXPORTING
is_stable = ls_stable
* I_SOFT_REFRESH =
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
代码复制即可,但是是用OOALV写的,所以需要自建屏幕,具体操作请看后续步骤
先自建屏幕,屏幕号9000
然后画屏幕,点击布局
然后加按钮
差点忘记,还有菜单栏需要创建
到这里,激活所有后程序就可以运行了
然后前面筛选屏幕上面的筛选条件我没有写进SQL里面,具体自己需要自己加一下好吧
不过SAP中其实分页好像用处不大并且用的不多,所以这里只是示例,需要的人可以参考一下。
OVER。