ALV是
ABAP开发报表时最常用的一个输出形式,它的优点在于实现简单,操作方便,便于阅读等多种优点。其实现方法下面我们来看看吧。我们主要学习一下ALV实现部分,前期的数据取得等部分就省略不计了。
1,前期定义必要的变量
TYPE-POOLS: SLIS.
DATA: IT_FIELDCAT TYPE TABLE OF SLIS_FIELDCAT_ALV.
2,ALV的主处理部分(前期是数据都已取得放在内部表中)
FORM ALV_LIST_PROC.
*输出字段项目的作成
PERFORM CREATE_ALV_FIELDCATALOG.
*ALV输出项目的编辑
PERFORM EDIT_FIELDCAT.
*ALV表示用的函数调用
PERFORM DISPLAY_ALV_GRID.
ENDFORM.
下面的第3到6步,我们来看看各自的PERFORM的实现。
3,CREATE_ALV_FIELDCATALOG的实现
调用REUSE_ALV_FIELDCATALOG_MERGE函数。
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = 'ZSD_ZZR2004_S001'
CHANGING
CT_FIELDCAT = IT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
其中'ZSD_ZZR2004_S001'是在SE11定义的数据结构,具体为输出的项目。然后通过IT_FIELDCAT取得。
4,EDIT_FIELDCAT的实现
如果输出的标题等要跟前面的结构定义的不一样的话,在这个函数里可以定义的。
FORM EDIT_FIELDCAT.
DATA L_WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
LOOP AT IT_FIELDCAT INTO L_WA_FIELDCAT.
CASE L_WA_FIELDCAT-FIELDNAME.
WHEN 'NETWR'.
L_WA_FIELDCAT-SELTEXT_S = L_WA_FIELDCAT-SELTEXT_M =
L_WA_FIELDCAT-SELTEXT_L = L_WA_FIELDCAT-REPTEXT_DDIC = '我被换了.
WHEN 。。。
。。。
MODIFY IT_FIELDCAT FROM L_WA_FIELDCAT.
ENDLOOP.
5,DISPLAY_ALV_GRID的实现
DATA: L_WA_LAYOUT TYPE SLIS_LAYOUT_ALV,
L_WA_DISVARIANT TYPE DISVARIANT.
*列的宽度调整
L_WA_LAYOUT-COLWIDTH_OPTIMIZE = C_ON.
*ALV输出
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = '
SET_PF_STATUS'
I_CALLBACK_USER_COMMAND = '
EXE_USER_COMMAND'
I_STRUCTURE_NAME = 'ZSD_ZZR2004_S001'
IS_LAYOUT = L_WA_LAYOUT
IT_FIELDCAT = IT_FIELDCAT
I_SAVE = C_ON
IS_VARIANT = L_WA_DISVARIANT
TABLES
T_OUTTAB = IT_LIST
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. " DISPLAY_ALV_GRID
其中SET_PF_STATUS表示设定GUI_STATUS,EXE_USER_COMMAND表示在ALV发生的事件。
6,SET_PF_STATUS的实现
FORM SET_PF_STATUS USING VALUE(V_EXTAB) TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STS_ALV'.
ENDFORM. " SET_PF_STATUS
7,
EXE_USER_COMMAND的实现
关于ALV的操作,请参看
http://www.91sap.com/thread-44-1-1.html等等
关于ALV更多属性,请下载文档
ALV文档
http://www.91sap.com/thread-378-1-1.html