S A P学习系列教程之A L V(一)
教程目的:
学习S A P已经有一段时间,A L V报表在项目中使用都是比较简单的功能.一直想着有时间好好整理一下整个A L V报表的编写方法,给自己以及学习A B A P的同志们做一个参考.
部分文字与代码参考了网络上流传的文档,在此感谢.
时间仓促加上水平有限,行文不当之处敬请谅解.
一、 A L V介绍
T h e A L V G r i d C o n t r o l(A L V=S A P L i s t V i e w e r)是一个显示列表的灵活的工具,它提供了基本功能的列表操作,也可以通过自定义来进行增强,因此可以允许你可以在大型的用程序中使用.
A L V提供了常用的按键功能.(求和,排序,导出等)
A L V可以简单的认为是一个界面美观,功能强大,可以提供灵活的互动界面的报表显示。
如果说传统的w r i t e输出比作是一辆马车的话,那A L V可以算是一个是奔驰了.
图一:A L V显示效果
它包括3大部分,工具栏,标题,用于显示数据的网格控制器.如果有必要,用户可以隐藏标题和工具栏.
实现A L V输出主要有两种方法
1.类“C L_G U I_A L V_G R I D”中封装的方法
2.函数“R E U S E_A L V…”
在这个文档中,将分别对这两种方法进行讲解.
二、 A L V类方法输出
在A L V输出之前,我们先要了解最基本的3个这种方法输出的参数.
1.输出数据.也就是我们想要在报表中显示的数据,必须是扁平结构的内表.
2.F i e l d C a t a l o g(字段目录).字段目录是用来控制A L V显示的网格中每个字段的属性的,
比如字段的顺序,对齐方式,可编辑状态,颜色,等等.以内表形式传入A L V类方法,内表的每一行代表一个字段(A L V报表输出中的一列).每一行的字段可以参考结构
L V C_T_F C A T.
3.L a y o u t S t r u c t u r e(布局控制结构).布局是用来控制整个A L V的一个布局,比如A L V的
标题,是否可编辑,行颜色,列颜色.以工作区形式传入A L V类方法,结构参考L V C_S_L A Y O
注意:除了上面三个最基本的要素之外,对于A L V事件的处理,打印设置,数据过滤等功能还将涉及到其他的参数.
下面我们就一步一步的来做一个简单的A L V报表(容器方式,也就是在屏幕的一个区域内显示A L V报表).
第一步:建立一个用户屏幕区域.
第二步:定义A L V相关变量
*-- Global data definitions for ALV
*--- ALV Grid instance reference
DATA gr_alvgrid TYPE REF TO cl_gui_alv_grid .
*--- Name of the custom control added on the screen
DATA gc_custom_control_name TYPE scrfname VALUE ‘CC_ALV’ . *--- Custom container instance reference
DATA gr_ccontainer TYPE REF TO cl_gui_custom_container .
*--- Field catalog table
DATA gt_fieldcat TYPE lvc_t_fcat .
*--- Layout structure
DATA gs_layout TYPE lvc_s_layo
第三步: 定义数据内表
*--- Internal table holding list data
DATA BEGIN OF gt_list OCCURS 0 .
INCLUDE STRUCTURE SFLIGHT .
*--In further sections, some additional fields will added here
*--for some functionality
DATA END OF gt_list .
第四步: 填充内表数据
START-OF-SELECTION.
SELECT * FROM sflight INTO TABLE gt_list.
第五步: 调用屏幕
CALL SCREEN 100.
第六步:编写PBO和PAI
PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
MODULE display_alv.
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
MODULE display_alv OUTPUT.
PERFORM display_alv.
ENDMODULE.
FORM display_alv .
IF gr_alvgrid IS INITIAL .
CREATE OBJECT gr_ccontainer
EXPORTING
container_name = gc_custom_control_name 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.
CREATE OBJECT gr_alvgrid
EXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =
i_parent = gr_ccontainer
* I_APPL_EVENTS = space
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_NAME =
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.
*----Preparing field catalog.
* PERFORM prepare_field_catalog CHANGING gt_fieldcat .
*----Preparing layout structure
* PERFORM prepare_layout CHANGING gs_layout .
CALL METHOD gr_alvgrid->set_table_for_first_display
EXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME = 'SFLIGHT'
* IS_VARIANT =
* I_SAVE =
* I_DEFAULT = 'X'
is_layout = gs_layout
* IS_PRINT =
* IT_SPECIAL_GROUPS =
IT_TOOLBAR_EXCLUDING = ui_functions_exclude
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
CHANGING
it_outtab = gt_list[]
it_fieldcatalog = gt_fieldcat
* IT_SORT =
* IT_FILTER =
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.
CALL METHOD gr_alvgrid->refresh_table_display
* EXPORTING
* IS_STABLE =
* I_SOFT_REFRESH =
EXCEPTIONS
finished = 1
OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDFORM. " display_alv
未完待续…………