abap ALV 报表入门

今天学习制作一个报表,最基本的报表,显示效果和se11进去查看表数据差不多。用ALV制作报表大概有4个步骤:

1.定义一些数据结构,主要是用于存数和显示的内表和alv的一些参数变量。

2.制作屏幕(界面).

3.获取屏幕输入的数据,用该数据从数据库中获取所需的数据放到前面定义的内表中。

4.调用ALV生成函数。其中还要为ALV定义表结构,布局等信息,主要是layout和fieldcat。其中定义报表字段fieldcat的时候可以用子程序便捷的赋值。

下面是学习代码:主要功能是从屏幕输入学号范围,然后联合查询两个表,得到该学号范围内的数据。

*&---------------------------------------------------------------------*
*& 程序ID:ZTEST_YHY_06
*&程序名称:
*程序描述:联合查询两个表,使用alv显示结果
*&---------------------------------------------------------------------*
*开发人员:
*&---------------------------------------------------------------------*
*&修改日期      版本    修改人    修改描述
*&
*&---------------------------------------------------------------------*

REPORT ZTEST_YHY_06.
*&---------------------------------------------------------------------*
*&INCLUDE 部分
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&表的声明
*&---------------------------------------------------------------------*
TABLES: zyhy_table01,   "学生基本信息表
       zyhy_table02.   "学生其他信息表

*&---------------------------------------------------------------------*
*&数据类型声明
*&---------------------------------------------------------------------*

TYPES: BEGIN OF ty_data,
         zxh2 TYPE zyhy_table01-zxh2, "学号
         zxm2 TYPE zyhy_table01-zxm2, "姓名
         zxb2 TYPE zyhy_table01-zxb2, "性别
         zsg2 TYPE zyhy_table01-zsg2, "身高
         znl2 TYPE zyhy_table01-znl2, "年龄
         zdh2 TYPE zyhy_table01-zdh2, "电话
         zzy2 TYPE zyhy_table02-zzy2,  "专业
         zjg2 TYPE zyhy_table02-zjg2,  "籍贯
         zsfz2 TYPE zyhy_table02-zsfz2, "身份证
      END OF ty_data.

*&---------------------------------------------------------------------*
*&内表和工作区声明
*&---------------------------------------------------------------------*
DATA: it_data TYPE STANDARD TABLE OF ty_data, "学生信息表,就是用来显示报表的。
      wa_data TYPE ty_data.                   "学生信息表工作区
*ALV 使用
DATA: it_fieldcat TYPE SLIS_T_FIELDCAT_ALV,  "slis是一个类型组,se11可见或双击。
      wa_fieldcat LIKE LINE OF it_fieldcat,
      wa_layout TYPE SLIS_LAYOUT_ALV.
*&---------------------------------------------------------------------*
*&全局变量的声明
*&---------------------------------------------------------------------*
DATA:  g_xh TYPE zyhy_table01-zxh2.

*&---------------------------------------------------------------------*
*&常量的声明
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&宏的定义
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&选择屏幕的定义
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blk0 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_xh FOR g_xh. "学号

SELECTION-SCREEN END OF BLOCK blk0.

*&---------------------------------------------------------------------*
*&INITIALIZATION
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&选择屏幕事件
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&START-OF-SELECTION 程序开始
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM frm_data_get.
  PERFORM frm_data_display.
*&---------------------------------------------------------------------*
*& END-OF-SELECTION 程序结束
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&子程序部分
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  FRM_DATA_GET
*&---------------------------------------------------------------------*
*       数据获取
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_DATA_GET .

  SELECT zyhy_table01~zxh2   "
         zyhy_table01~zxm2   "
         zyhy_table01~znl2   "
         zyhy_table01~zxb2   "
         zyhy_table01~zsg2   "
         zyhy_table01~zdh2   "
         zyhy_table02~zzy2   "
         zyhy_table02~zjg2   "
         zyhy_table02~zsfz2  "

    INTO CORRESPONDING FIELDS OF TABLE it_data
    FROM zyhy_table01
    LEFT JOIN zyhy_table02 ON zyhy_table01~zxh2 = zyhy_table02~zxh2
    WHERE zyhy_table01~zxh2 IN s_xh.
  IF sy-subrc = 0.
    SORT it_data BY zxh2 ASCENDING. "按学号升序排列
  ELSE.
    MESSAGE '没有找到符合条件的数据' TYPE 'S'.
  ENDIF.
ENDFORM.                    " FRM_DATA_GET
*&---------------------------------------------------------------------*
*&      Form  FRM_DATA_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_DATA_DISPLAY .
  CLEAR: wa_layout,it_fieldcat,wa_fieldcat.
  PERFORM frm_edit_fieldcat using:
        '1'  'ZXH2' 'IT_DATA' '学号',  "这里第三个参数都是it_data,所以你可以在子程序里直接赋值给第三个参数,就不用在这传参。。
        '2'  'ZXM2' 'IT_DATA' '姓名',
        '3'  'ZXB2' 'IT_DATA' '性别',
        '4'  'ZNL2' 'IT_DATA' '年龄',
        '5'  'ZSG2' 'IT_DATA' '身高',
        '6'  'ZDH2' 'IT_DATA' '电话',
        '7'  'ZZY2'  'IT_DATA' '专业',
        '8'  'ZJG2'  'IT_DATA' '籍贯',
        '9'  'ZSFZ2'  'IT_DATA' '身份证'.

  wa_layout-colwidth_optimize = 'X'. "列宽最优显示
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' "CALL标准SAP函数输出ALV报表
    EXPORTING
*   I_INTERFACE_CHECK                 = ' '
*   I_BYPASSING_BUFFER                = ' '
*   I_BUFFER_ACTIVE                   = ' '
    I_CALLBACK_PROGRAM                = sy-repid
*   I_CALLBACK_PF_STATUS_SET          = ' '
*   I_CALLBACK_USER_COMMAND           = ' '
*   I_CALLBACK_TOP_OF_PAGE            = ' '
*   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*   I_CALLBACK_HTML_END_OF_LIST       = ' '
*   I_STRUCTURE_NAME                  =
*   I_BACKGROUND_ID                   = ' '
*   I_GRID_TITLE                      =
*   I_GRID_SETTINGS                   =
   IS_LAYOUT                         = wa_layout
   IT_FIELDCAT                       = it_fieldcat
*   IT_EXCLUDING                      =
*   IT_SPECIAL_GROUPS                 =
*   IT_SORT                           =
*   IT_FILTER                         =
*   IS_SEL_HIDE                       =
*   I_DEFAULT                         = 'X'
*   I_SAVE                            = ' '
*   IS_VARIANT                        =
*   IT_EVENTS                         =
*   IT_EVENT_EXIT                     =
*   IS_PRINT                          =
*   IS_REPREP_ID                      =
*   I_SCREEN_START_COLUMN             = 0
*   I_SCREEN_START_LINE               = 0
*   I_SCREEN_END_COLUMN               = 0
*   I_SCREEN_END_LINE                 = 0
*   I_HTML_HEIGHT_TOP                 = 0
*   I_HTML_HEIGHT_END                 = 0
*   IT_ALV_GRAPHICS                   =
*   IT_HYPERLINK                      =
*   IT_ADD_FIELDCAT                   =
*   IT_EXCEPT_QINFO                   =
*   IR_SALV_FULLSCREEN_ADAPTER        =
* IMPORTING
*   E_EXIT_CAUSED_BY_CALLER           =
*   ES_EXIT_CAUSED_BY_USER            =
  TABLES
    T_OUTTAB                          = it_data
* EXCEPTIONS
*   PROGRAM_ERROR                     = 1
*   OTHERS                            = 2
          .
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.                    " FRM_DATA_DISPLAY

*&---------------------------------------------------------------------*
*&      Form  FRM_EDIT_FIELDCAT
*&---------------------------------------------------------------------*
*       子程序用于生成列,每一列其实是一个结构体组成的。就是说一个结构体描述一列
*----------------------------------------------------------------------*
*      -->P_COL_POS    显示列的位置
*      -->P_FIELDNAME  字段ID
*      -->P_TABNAME    表名
*      -->P_SELTEXT    列名称
*----------------------------------------------------------------------*
FORM frm_edit_fieldcat  USING p_col_pos   TYPE any
                              p_fieldname TYPE any
                              p_tabname   TYPE any
                              p_seltext   TYPE any.

  wa_fieldcat-col_pos   = p_col_pos.
  wa_fieldcat-fieldname = p_fieldname.
  wa_fieldcat-tabname   = p_tabname.
  wa_fieldcat-seltext_m = p_seltext.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.
ENDFORM.                    " FRM_EDIT_FIELDCAT                  " FRM_EDIT_FIELDCAT




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值