SAP Function ALV 01(样式、排序、筛选、事件)
2016-07-13 13:40
736 查看
ALV全称SAP List View,是SAP提供的一个强大的数据报表显示工具。
相比write输出:提供了更优质的与用户交互的功能。
实现方式:
- 调用标准函数
- 优化接口:用户可以实现对字段的排序、筛选及统计等功能。
显示方式:
-List:类似于write语句输出的表单形式
-Grid: 每个输出字段提供按钮,用户可以自行设定,操作更为灵活
运用Function ALV之前需要了解的大概内容
1.类型池:SLIS(类型池其实是特殊的程序)
2.Fieldcat TYPE slis_t_fieldcat_alv(每列的设置)
-列格式设置(表单)
-字段名称,列是否可修改,列宽度等
3.Layout TYPE slis_layout_alv(整个的设置)
- 全局格式设置(结构)
- 整表字段是否可修改,是否以斑马线输出,是否显示选择按钮字段等
4.函数:REUSE_ALV_FIELDCATALOG_MERGE
-根据内表结构返回FIELDCAT字段结构信息
5.函数:REUSE_ALV_GRID_DISPLAY / REUSE_ALV_LIST_DISPLAY
-使用GRID/LIST模式输出ALV报表
在程序中常用的架构:
START-OF-SELECTION
-数据表单数据选取(取数逻辑)
注意:为空就不走下面程序了。
END-OF-SELECTION
-对FIELDCAT赋值:设置每列格式
-对LAYOUT赋值:设置表单格式(可选)
-对SORT表等赋值:设置排序内容等(可选)
-给EVENT表等赋值:增加程序交互事件(可选)
-调用函数,输出ALV
创建Fieldcat
先声明:
DATA GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA GS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
eg:在合计的时候,可以根据单位的不同分类合计:
GS_FIELDCAT-QFIELDNAME = ‘单位字段名’.
GS_FIELDCAT-CFIELDNAME = ‘货币单位名’。
创建LAYOUT
先声明:
DATA GS_LAYOUT TYPE SLIS_LAYOUT_ALV.
-BOX_FIELDNAME:
1.在内表中增加一列,字段名为BOX。
2.在layout赋值之后,表单显示时为可选择按钮。
-DETAIL_XX:标准按钮
点击时触发的详细清单相应的的设置。
“详细清单属性
GS_LAYOUT-DETAIL_INITIAL_LINES = ‘X’. “是否显示值为空的字段
GS_LAYOUT-DETAIL_TITLEBAR = ‘Detail Information’ .”对话框标题
创建SORT表:进行排序
先声明:
DATA:GT_SORT TYPE SLIS_T_SORTINFO_ALV,
GS_SORT TYPE SLIS_SORTINFO_ALV.
SORT表为一个内表,将需要排序的字段信息增加到sort表中,在ALV输出按照顺序排序输出。
创建FILTER表:进行筛选
DATA :GT_FILTER TYPE SLIS_T_FILTER_ALV,
GS_FILTER TYPE SLIS_FILTER_ALV.
创建EVENT表:进行筛选
DATA:GT_EVENT TYPE SLIS_T_EVENT, “ALV事件
GS_EVENT TYPE SLIS_ALV_EVENT.
注意:
ALV中CHAR类型默认输出后左对齐,数字类型默认右对齐。
fieldcat是一张内表,记录的是ALV输出时每列的属性信息。
layout是一个结构,存储的整个表单的全局设置。
添加图标:Tcode:ICON查看,需要用时直接复制icon名。
单击的前提是要设置热点
单击和双击虽然都是‘&IC1’,但是一般来说单击是真的某个单元格,双击则是某一行
附上相关代码:
相比write输出:提供了更优质的与用户交互的功能。
实现方式:
- 调用标准函数
- 优化接口:用户可以实现对字段的排序、筛选及统计等功能。
显示方式:
-List:类似于write语句输出的表单形式
-Grid: 每个输出字段提供按钮,用户可以自行设定,操作更为灵活
运用Function ALV之前需要了解的大概内容
1.类型池:SLIS(类型池其实是特殊的程序)
2.Fieldcat TYPE slis_t_fieldcat_alv(每列的设置)
-列格式设置(表单)
-字段名称,列是否可修改,列宽度等
3.Layout TYPE slis_layout_alv(整个的设置)
- 全局格式设置(结构)
- 整表字段是否可修改,是否以斑马线输出,是否显示选择按钮字段等
4.函数:REUSE_ALV_FIELDCATALOG_MERGE
-根据内表结构返回FIELDCAT字段结构信息
5.函数:REUSE_ALV_GRID_DISPLAY / REUSE_ALV_LIST_DISPLAY
-使用GRID/LIST模式输出ALV报表
在程序中常用的架构:
START-OF-SELECTION
-数据表单数据选取(取数逻辑)
注意:为空就不走下面程序了。
END-OF-SELECTION
-对FIELDCAT赋值:设置每列格式
-对LAYOUT赋值:设置表单格式(可选)
-对SORT表等赋值:设置排序内容等(可选)
-给EVENT表等赋值:增加程序交互事件(可选)
-调用函数,输出ALV
创建Fieldcat
先声明:
DATA GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA GS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
eg:在合计的时候,可以根据单位的不同分类合计:
GS_FIELDCAT-QFIELDNAME = ‘单位字段名’.
GS_FIELDCAT-CFIELDNAME = ‘货币单位名’。
创建LAYOUT
先声明:
DATA GS_LAYOUT TYPE SLIS_LAYOUT_ALV.
-BOX_FIELDNAME:
1.在内表中增加一列,字段名为BOX。
2.在layout赋值之后,表单显示时为可选择按钮。
-DETAIL_XX:标准按钮
点击时触发的详细清单相应的的设置。
“详细清单属性
GS_LAYOUT-DETAIL_INITIAL_LINES = ‘X’. “是否显示值为空的字段
GS_LAYOUT-DETAIL_TITLEBAR = ‘Detail Information’ .”对话框标题
创建SORT表:进行排序
先声明:
DATA:GT_SORT TYPE SLIS_T_SORTINFO_ALV,
GS_SORT TYPE SLIS_SORTINFO_ALV.
SORT表为一个内表,将需要排序的字段信息增加到sort表中,在ALV输出按照顺序排序输出。
创建FILTER表:进行筛选
DATA :GT_FILTER TYPE SLIS_T_FILTER_ALV,
GS_FILTER TYPE SLIS_FILTER_ALV.
创建EVENT表:进行筛选
DATA:GT_EVENT TYPE SLIS_T_EVENT, “ALV事件
GS_EVENT TYPE SLIS_ALV_EVENT.
注意:
ALV中CHAR类型默认输出后左对齐,数字类型默认右对齐。
fieldcat是一张内表,记录的是ALV输出时每列的属性信息。
layout是一个结构,存储的整个表单的全局设置。
添加图标:Tcode:ICON查看,需要用时直接复制icon名。
单击的前提是要设置热点
单击和双击虽然都是‘&IC1’,但是一般来说单击是真的某个单元格,双击则是某一行
附上相关代码:
*&---------------------------------------------------------------------* *& Report Z9617_OLE_TEST *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT Z9617_F_ALV01. TABLES: MARA,MARD,MAKT. TYPE-POOLS SLIS. DATA : BEGIN OF GT_MARA OCCURS 0, MATNR TYPE MARA-MATNR, NTGEW TYPE MARA-NTGEW, END OF GT_MARA. DATA : BEGIN OF GT_MAKT OCCURS 0, MATNR TYPE MAKT-MATNR, SPRAS TYPE MAKT-SPRAS, MAKTX TYPE MAKT-MAKTX, END OF GT_MAKT. DATA : BEGIN OF GT_TOTAL OCCURS 0, MATNR TYPE MARD-MATNR, WERKS TYPE MARD-WERKS, LGORT TYPE MARD-LGORT, LABST TYPE MARD-LABST, SPRAS TYPE MAKT-SPRAS, NTGEW TYPE MARA-NTGEW, MAKTX TYPE MAKT-MAKTX, BOX TYPE C, ICON TYPE C LENGTH 4, "增加ICON图标列 CHECK TYPE C LENGTH 1, "增加复选框 END OF GT_TOTAL. *Function ALV DATA GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV. "属性列 DATA GS_FIELDCAT TYPE SLIS_FIELDCAT_ALV. DATA GS_LAYOUT TYPE SLIS_LAYOUT_ALV. DATA:GT_SORT TYPE SLIS_T_SORTINFO_ALV, "排序 GS_SORT TYPE SLIS_SORTINFO_ALV. DATA :GT_FILTER TYPE SLIS_T_FILTER_ALV, "筛选 GS_FILTER TYPE SLIS_FILTER_ALV. DATA:GT_EVENT TYPE SLIS_T_EVENT, "ALV事件 GS_EVENT TYPE SLIS_ALV_EVENT. DEFINE %%APPEND_FIELDCAT. "定义宏 CLEAR GS_FIELDCAT. GS_FIELDCAT-COL_POS = &1. GS_FIELDCAT-fieldname = &2. GS_FIELDCAT-outputlen = &3. GS_FIELDCAT-seltext_m = &4. CASE &2. WHEN 'MATNR'. GS_FIELDCAT-KEY = 'X'. "底纹颜色变化了。 WHEN 'ICON'. GS_FIELDCAT-ICON = 'X'. "定义ICON 的属性 WHEN 'CHECK'. GS_FIELDCAT-CHECKBOX = 'X'. "定义复选框属性 WHEN 'NTGEW'. GS_FIELDCAT-DO_SUM = 'X'. "给数量类型添加合计属性 " GS_FIELDCAT-QFIELDNAME = ''."内表中标明当前熟知的单的的字段,这样可以根据单位分开合计。 GS_FIELDCAT-HOTSPOT = 'X'. "fieid 中热点设置,可以指定任意字段 。 ENDCASE. APPEND GS_FIELDCAT TO GT_FIELDCAT. END-OF-DEFINITION. SELECT-OPTIONS: P_MATNR FOR MARD-MATNR . PARAMETERS: P_WERKS TYPE MARD-WERKS, P_LGORT TYPE MARD-LGORT. START-OF-SELECTION. PERFORM GET_DATA. PERFORM BUILD_FIELDCAT. PERFORM BUILD_LAYOUT. PERFORM BUILD_SORT. PERFORM BUILD_FILTER. PERFORM BUILD_EVENT. END-OF-SELECTION. IF GT_TOTAL[] IS NOT INITIAL. PERFORM DISPLAY_DATA. ENDIF. *&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* * text *---------------------------------------- 4000 ------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM GET_DATA . SELECT MATNR WERKS LGORT LABST INTO CORRESPONDING FIELDS OF TABLE GT_TOTAL FROM MARD WHERE MATNR IN P_MATNR AND WERKS = P_WERKS AND LGORT = P_LGORT. IF GT_TOTAL[] IS NOT INITIAL. SELECT MATNR NTGEW FROM MARA INTO CORRESPONDING FIELDS OF TABLE GT_MARA FOR ALL ENTRIES IN GT_TOTAL WHERE MATNR = GT_TOTAL-MATNR. SELECT MATNR SPRAS MAKTX FROM MAKT INTO CORRESPONDING FIELDS OF TABLE GT_MAKT FOR ALL ENTRIES IN GT_TOTAL WHERE MATNR = GT_TOTAL-MATNR. ENDIF. SORT GT_MARA BY MATNR ASCENDING. SORT GT_MAKT BY MATNR ASCENDING. LOOP AT GT_TOTAL. READ TABLE GT_MARA WITH KEY MATNR = GT_TOTAL-MATNR BINARY SEARCH. IF SY-SUBRC = 0. GT_TOTAL-NTGEW = GT_MARA-NTGEW. MODIFY GT_TOTAL. ENDIF. READ TABLE GT_MAKT WITH KEY MATNR = GT_TOTAL-MATNR BINARY SEARCH. IF SY-SUBRC = 0. GT_TOTAL-SPRAS = GT_MAKT-SPRAS. GT_TOTAL-MAKTX = GT_MAKT-MAKTX. MODIFY GT_TOTAL. ENDIF. ENDLOOP. CLEAR GT_TOTAL. FREE : GT_MAKT,GT_MARA. LOOP AT GT_TOTAL. IF GT_TOTAL-MATNR = '000000000000000023'. GT_TOTAL-ICON = ICON_GREEN_LIGHT. "对ICON取值进行判断 ELSE. GT_TOTAL-ICON = ICON_RED_LIGHT. ENDIF. MODIFY GT_TOTAL. ENDLOOP. ENDFORM. " GET_DATA *&---------------------------------------------------------------------* *& Form DISPLAY_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM DISPLAY_DATA . CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING * I_INTERFACE_CHECK = ' ' * I_BYPASSING_BUFFER = ' ' * I_BUFFER_ACTIVE = ' ' I_CALLBACK_PROGRAM = SY-CPROG * 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 = GS_LAYOUT IT_FIELDCAT = GT_FIELDCAT * IT_EXCLUDING = * IT_SPECIAL_GROUPS = IT_SORT = GT_SORT IT_FILTER = GT_FILTER * IS_SEL_HIDE = * I_DEFAULT = 'X' * I_SAVE = ' ' * IS_VARIANT = IT_EVENTS = GT_EVENT * 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 = GT_TOTAL * EXCEPTIONS * PROGRAM_ERROR = 1 * OTHERS = 2 . IF SY-SUBRC <> 0. * Implement suitable error handling here ENDIF. ENDFORM. " DISPLAY_DATA *&---------------------------------------------------------------------* *& Form BUILD_FIELDCAT *&---------------------------------------------------------------------* * text 使用子程序或者宏等方式,向fieldcat的内表中增加行 * 表单中的每一列为fieldcat中的一行 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM BUILD_FIELDCAT . * CLEAR GS_FIELDCAT. * GS_FIELDCAT-COL_POS = '1'. * GS_FIELDCAT-fieldname = 'MATNR'. * GS_FIELDCAT-outputlen = '18'. * GS_FIELDCAT-seltext_m = '物料编号'. * APPEND GS_FIELDCAT TO GT_FIELDCAT. %%APPEND_FIELDCAT '1' 'MATNR' '' '物料编号' . * CLEAR GS_FIELDCAT. * GS_FIELDCAT-COL_POS = '2'. * GS_FIELDCAT-fieldname = 'WERKS'. * GS_FIELDCAT-outputlen = '18'. * GS_FIELDCAT-seltext_m = '工厂'. * APPEND GS_FIELDCAT TO GT_FIELDCAT. %%APPEND_FIELDCAT '2' 'WERKS' '' '工厂' . * CLEAR GS_FIELDCAT. * GS_FIELDCAT-COL_POS = '3'. * GS_FIELDCAT-fieldname = 'LGORT'. * GS_FIELDCAT-outputlen = '18'. * GS_FIELDCAT-seltext_m = '库存地址'. * APPEND GS_FIELDCAT TO GT_FIELDCAT. %%APPEND_FIELDCAT '3' 'LGORT' '' '库存地址' . * CLEAR GS_FIELDCAT. * GS_FIELDCAT-COL_POS = '4'. * GS_FIELDCAT-fieldname = 'LABST'. * GS_FIELDCAT-outputlen = '18'. * GS_FIELDCAT-seltext_m = '库存'. * APPEND GS_FIELDCAT TO GT_FIELDCAT. %%APPEND_FIELDCAT '4' 'LABST' '' '库存数量' . * CLEAR GS_FIELDCAT. * GS_FIELDCAT-COL_POS = '5'. * GS_FIELDCAT-fieldname = 'SPRAS'. * GS_FIELDCAT-outputlen = '4'. * GS_FIELDCAT-seltext_m = '语言代码'. * APPEND GS_FIELDCAT TO GT_FIELDCAT. %%APPEND_FIELDCAT '5' 'SPRAS' '' '语言代码' . * CLEAR GS_FIELDCAT. * GS_FIELDCAT-COL_POS = '6'. * GS_FIELDCAT-fieldname = 'MAKTX'. * GS_FIELDCAT-outputlen = '18'. * GS_FIELDCAT-seltext_m = '物料描述'. * APPEND GS_FIELDCAT TO GT_FIELDCAT. %%APPEND_FIELDCAT '6' 'MAKTX' '' '物料描述' . * CLEAR GS_FIELDCAT. * GS_FIELDCAT-COL_POS = '7'. * GS_FIELDCAT-fieldname = 'MEINS'. * GS_FIELDCAT-outputlen = '18'. * GS_FIELDCAT-seltext_m = '数量'. * APPEND GS_FIELDCAT TO GT_FIELDCAT. %%APPEND_FIELDCAT '7' 'NTGEW' '' '净重' . %%APPEND_FIELDCAT '8' 'ICON' '' '状态' . %%APPEND_FIELDCAT '9' 'CHECK' '' '选择' . ENDFORM. " BUILD_FIELDCAT *&---------------------------------------------------------------------* *& Form BUILD_LAYOUT *&---------------------------------------------------------------------* * text 用于向layout赋值 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM BUILD_LAYOUT . GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X' ."优化列宽 GS_LAYOUT-ZEBRA = 'X'. "斑马线格式输出 GS_LAYOUT-KEY_HOTSPOT = 'X' . "有区别于fieldcat中热点的设置,这个是关键字的热点设置 GS_LAYOUT-BOX_FIELDNAME = 'BOX'. "详细清单属性 GS_LAYOUT-DETAIL_INITIAL_LINES = 'X'. "是否显示值为空的字段 GS_LAYOUT-DETAIL_TITLEBAR = 'Detail Information' ."对话框标题 "表单属性 GS_LAYOUT-WINDOW_TITLEBAR = '物料信息查看'. "退出时弹出确认对话框 GS_LAYOUT-CONFIRMATION_PROMPT = 'X'. ENDFORM. " BUILD_LAYOUT *&---------------------------------------------------------------------* *& Form BUILD_SORT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM BUILD_SORT . * 1. 按照物料号升序 CLEAR GS_SORT . GS_SORT-SPOS = '1'. GS_SORT-FIELDNAME = 'MAKTX'. GS_SORT-UP = 'X'. GS_SORT-SUBTOT = 'X'."在该字段再进行小计 APPEND GS_SORT TO GT_SORT. * 1. 按照语言升序 CLEAR GS_SORT . GS_SORT-SPOS = '2'. GS_SORT-FIELDNAME = 'NTGEW'. GS_SORT-DOWN = 'X'. APPEND GS_SORT TO GT_SORT. ENDFORM. " BUILD_SORT *&---------------------------------------------------------------------* *& Form BUILD_FILTER *&---------------------------------------------------------------------* * text 创建filter对数据进行筛选,这里筛除掉净重为0的。 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM BUILD_FILTER . CLEAR GS_FILTER. GS_FILTER-FIELDNAME = 'NTGEW'. "字段名 GS_FILTER-OPTIO = 'EQ'. "等于 GS_FILTER-SIGN0 = 'E'. "不包含 GS_FILTER-VALUF = ''. "空值 APPEND GS_FILTER TO GT_FILTER. ENDFORM. " BUILD_FILTER *&---------------------------------------------------------------------* *& Form BUILD_EVENT *&---------------------------------------------------------------------* * text alv事件 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM BUILD_EVENT . CLEAR GS_EVENT. GS_EVENT-NAME = 'PF_STATUS_SET'. "Name of callback event. GS_EVENT-FORM = 'SET_STATUS'. APPEND GS_EVENT TO GT_EVENT. GS_EVENT-NAME = 'USER_COMMAND'. "定义按钮功能 GS_EVENT-FORM = 'FRM_COMMAND'. APPEND GS_EVENT TO GT_EVENT. ENDFORM. " BUILD_EVENT FORM SET_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB. SET PF-STATUS 'STATUS' EXCLUDING RT_EXTAB. "创建一组名为status的按钮。 ENDFORM. FORM FRM_COMMAND USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD. CASE R_UCOMM. WHEN 'LEAVE'. MESSAGE 'leave' TYPE 'I' DISPLAY LIKE 'E'. WHEN OTHERS. ENDCASE. ENDFORM.
相关文章推荐
- css第一步
- 图片 CSS3图片拖拽碰撞感应特效
- 提示框 9款css3 tooltips鼠标悬停显示消息提示框样式(精)
- CSS cursor 属性
- 上传文件样式美化
- 纯CSS完美实现垂直水平居中的6种方式
- jq判断元素class是否定义了CSS样式
- CSS隐藏元素的几个方法(display,visibility)的区别
- CSS z-index 属性
- CSS Modules
- 元素不可用的三种样式
- 使用CSS3的 @font-face 显示自定义字体
- css初始化
- 用css属性实现箭头
- css 等高布局
- 如何给边框添加阴影效果:box-shadow
- css-margin collapse外边距折叠
- 将子div在父div中固定在底部(类似剩余电量的效果)
- 表格样式
- css-position,float,display的关系和优先级