ABAP 分页查询报表示例

话不多说,上代码

*&---------------------------------------------------------------------*
*& 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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值