如何写一个ALV报表程序

说起来,已经好久都没有写过代码了,我怕自己忘记一些ABAP的东西,打算开一个专栏,来重新温习一下,ok,走着!

一个简单的AVL报表程序,可以调用REUSE_ALV_GRID_DISPLAY_LVC这个函数(有的人习惯用REUSE_ALV_GRID_DISPLAY,其实二者差别不大,LVC是对原有BAPI的升级,包含单元格处理之类的)。

下面来看一下REUSE_ALV_GRID_DISPLAY_LVC的几个重要的参数

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
* EXPORTING
*   I_INTERFACE_CHECK                 = ' '
*   I_BYPASSING_BUFFER                =
*   I_BUFFER_ACTIVE                   =
*   I_CALLBACK_PROGRAM                = ' '
*   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_LVC                     =
*   IT_FIELDCAT_LVC                   =
*   IT_EXCLUDING                      =
*   IT_SPECIAL_GROUPS_LVC             =
*   IT_SORT_LVC                       =
*   IT_FILTER_LVC                     =
*   IT_HYPERLINK                      =
*   IS_SEL_HIDE                       =
*   I_DEFAULT                         = 'X'
*   I_SAVE                            = ' '
*   IS_VARIANT                        =
*   IT_EVENTS                         =
*   IT_EVENT_EXIT                     =
*   IS_PRINT_LVC                      =
*   IS_REPREP_ID_LVC                  =
*   I_SCREEN_START_COLUMN             = 0
*   I_SCREEN_START_LINE               = 0
*   I_SCREEN_END_COLUMN               = 0
*   I_SCREEN_END_LINE                 = 0
*   I_HTML_HEIGHT_TOP                 =
*   I_HTML_HEIGHT_END                 =
*   IT_ALV_GRAPHICS                   =
*   IT_EXCEPT_QINFO_LVC               =
*   IR_SALV_FULLSCREEN_ADAPTER        =
* IMPORTING
*   E_EXIT_CAUSED_BY_CALLER           =
*   ES_EXIT_CAUSED_BY_USER            =
  TABLES
    t_outtab                          =
* EXCEPTIONS
*   PROGRAM_ERROR                     = 1
*   OTHERS                            = 2
          .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

EXPORTING

I_CALLBACK_PROGRAM : ALV返回程序,一般是原程序,可以写'SY-REPID',或者程序名

I_CALLBACK_PF_STATUS_SET:ALV的GUI状态

I_CALLBACK_USER_COMMAND:ALV的按钮功能

I_GRID_TITLE:ALV表头

IS_LAYOUT_LVC:ALV布局(等宽,对齐,是否有BOX等)

IT_FIELDCAT_LVC:ALV字段(ALV字段名,是否有前导零,字段颜色)

I_DEFAULT:ALV是否默认带出布局(设置为X则表示可以设置优先级)

I_SAVE:是否能保存变式(X:全部用户 U:仅针对特定用户 A:全部用户或特定用户)

TABLES

t_outtab:ALV最终输出数据

一般ALV就需要填写这些参数,下面来简单的写一个Demo程序

DATA:GT_FCAT TYPE LVC_T_FCAT,
     GS_FCAT LIKE LINE OF GT_FCAT,
     GT_LAYOUT TYPE TABLE OF LVC_S_LAYO,
     GS_LAYOUT TYPE LVC_S_LAYO.

DATA:GT_ALV TYPE STANDARD TABLE OF SFLIGHT,
     GS_ALV TYPE SFLIGHT.

"宏定义,用于快速设置ALV字段属性
DEFINE INIT_FIELDCAT.
  CLEAR GS_FCAT.
  GS_FCAT-FIELDNAME = &1.
  GS_FCAT-COLTEXT = &2.
  GS_FCAT-NO_ZERO = &3.
  GS_FCAT-EMPHASIZE = &4.
  APPEND GS_FCAT TO GT_FCAT.
END-OF-DEFINITION.

PARAMETERS: P_CARRID TYPE SFLIGHT-CARRID OBLIGATORY."OBLIGATORY为必输

START-OF-SELECTION.
  PERFORM FRM_PROCESS_DATE."数据处理
  PERFORM FRM_ALV_OUTPUT.  "ALV显示设置
END-OF-SELECTION.

FORM ALV_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'ALV_TABLE_STANDARD'.
ENDFORM.

FORM USER_COMMAND USING R_UCOMM TYPE SLIS_T_EXTAB
                        RS_SELFIELD TYPE SLIS_SELFIELD.

ENDFORM.

FORM FRM_PROCESS_DATE.
  SELECT *
   FROM SFLIGHT
   INTO TABLE GT_ALV.
ENDFORM.

FORM FRM_ALV_OUTPUT.
  CLEAR:GS_LAYOUT.
  GS_LAYOUT-CWIDTH_OPT = 'X'.
  GS_LAYOUT-ZEBRA = 'X'.
  INIT_FIELDCAT:
  'CARRID' '航线' '' '',
  'CONNID' '航班号' '' '',
  'FLDATE' '日期' '' '',
  'PRICE' '航空运费' '' '',
  'CURRENCY' '航线货币' '' ''.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
 EXPORTING
*   I_INTERFACE_CHECK                 = ' '
*   I_BYPASSING_BUFFER                =
*   I_BUFFER_ACTIVE                   =
   I_CALLBACK_PROGRAM                = SY-REPID
   I_CALLBACK_PF_STATUS_SET          = 'ALV_PF_STATUS'
   I_CALLBACK_USER_COMMAND           = '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_LVC                     = GS_LAYOUT
   IT_FIELDCAT_LVC                   = GT_FCAT[]
*   IT_EXCLUDING                      =
*   IT_SPECIAL_GROUPS_LVC             =
*   IT_SORT_LVC                       =
*   IT_FILTER_LVC                     =
*   IT_HYPERLINK                      =
*   IS_SEL_HIDE                       =
   I_DEFAULT                         = 'X'
   I_SAVE                            = 'A'
*   IS_VARIANT                        =
*   IT_EVENTS                         =
*   IT_EVENT_EXIT                     =
*   IS_PRINT_LVC                      =
*   IS_REPREP_ID_LVC                  =
*   I_SCREEN_START_COLUMN             = 0
*   I_SCREEN_START_LINE               = 0
*   I_SCREEN_END_COLUMN               = 0
*   I_SCREEN_END_LINE                 = 0
*   I_HTML_HEIGHT_TOP                 =
*   I_HTML_HEIGHT_END                 =
*   IT_ALV_GRAPHICS                   =
*   IT_EXCEPT_QINFO_LVC               =
*   IR_SALV_FULLSCREEN_ADAPTER        =
* IMPORTING
*   E_EXIT_CAUSED_BY_CALLER           =
*   ES_EXIT_CAUSED_BY_USER            =
  TABLES
    t_outtab                          = GT_ALV[]
* EXCEPTIONS
*   PROGRAM_ERROR                     = 1
*   OTHERS                            = 2
          .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.

这个是一个简单的ALV的程序,不过这样的程序写着不快速。要想写一个ALV比较快的话,可以写一个SALV,这个就留到之后更新吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值