请教abap alv 合并单元格老手,table control和可编辑ALV

下次自动登录
现在的位置:
& 综合 & 正文
abap-在table control中实现查找功能
table control 创建时可以实现添加,删除,及翻页的功能,但没有查找的功能,故记录多时查看不方便,所以要自己写,DEBUG标准ALV的查找功能发现使用函数ALV_POPUP_TO_SEARCH2,该函数仅弹出查找框,其余查找仍需要自己写。
该函数查找提供的查找点过多,于是找了个简单的ALV_POPUP_TO_SEARCH,实现一个简单的查找功能,代码如下:
WHEN '%SC'."查找
CALL FUNCTION 'ALV_POPUP_TO_SEARCH'
i_disable_search_sequence = 'X'"不显示下拉框
e_cancelled
= e_cancelled
e_new_search
= e_new_search
= s_string.
IF e_cancelled NE 'X'."取消查找
IF e_new_search EQ 'X'."重新查找
s_line = 0.“从头开始查找
LOOP AT ztmsd1 FROM s_line TO zmsdscp1-lines.
IF ztmsd1-matnr CS s_string.”包含字符串s_string
ztmsd1-zflag = 'X'."选中符合条件行记录
MODIFY ztmsd1 TRANSPORTING zflag.
zmsdscp1-top_line = sy-tabix.“符合条件记录置于首行
s_line = sy-tabix.”记录当前行,方便查找下一个时,从当前行的下一行开始查找
search_deflag = 'X'.“查找是否成功标志
IF search_deflag NE 'X'.
MESSAGE s007 WITH '无匹配内容存在'.
CLEAR search_deflag.
WHEN '%SC+'."查找下一个
IF s_string NE ''.
s_line = s_line + 1.”查找下一个,则从上个符合条件记录的下一行再始查找
LOOP AT ztmsd1 FROM s_line TO zmsdscp1-lines.
IF ztmsd1-matnr CS s_string.
ztmsd1-zflag = 'X'.
MODIFY ztmsd1 TRANSPORTING zflag.
zmsdscp1-top_line = sy-tabix.
s_line = sy-tabix.
search_deflag = 'X'.
IF search_deflag NE 'X'.
MESSAGE s007 WITH '无匹配内容存在'.
CLEAR search_deflag.
&&&&推荐文章:
【上篇】【下篇】博客访问: 431638
博文数量: 457
注册时间:
认证徽章:
ITPUB论坛APP
ITPUB论坛APP
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Linux
[size=10.5pt]Everyone who uses computers regularly knows that they can copy and paste text. [size=10.5pt]
[size=10.5pt]What they might notknow is that when you copy something, it goes into a location known as the “clipboard”. Most programsprovide access to a clipboard of some sort, whether it be just within the program itself or to the systemclipboard, which allows items to be copied to other applications. [size=10.5pt]
[size=10.5pt]The wxPython GUI toolkit also providesclipboard access, which you can use to copy text to and from within your program and even to thesystem clipboard. You can also copy images to the clipboard. In this tutorial, we’ll take a lookat how you can do this in your own code.
We’ll start out with a really simple example code snippet. The following contains two buttons, one which copies any text that’s added to the text control and which you can then paste elsewhere, such as in the text box, in a search engine or whatever. The other button also copies to clipboard and then closes the application after flushing the data.
This is supposed to make the data available in the system clipboard even after the application is closed. Both work great on Windows, but wxGTK (i.e. the Linux version) doesn’t work in the latter case. See the bug ticket for more information.
阅读(202) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。博客访问: 675584
博文数量: 486
博客积分: 10070
博客等级: 上将
技术积分: 5082
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: IT职场
&&&Table Control作为一个表维护的标准工具,在屏幕程序中经常使用。它的特点就是简单,实现速度快。缺点就是不够灵活。
&& 我个人更喜欢用ALV grid,由于基于OO,ALV grid绘制图形表格,更加灵活,功能更加强大(大家从标准的ALV grid中自带了那么多功能键就知道了)。但是往往强大的工具,实现起来就相对就比较复杂。
&& 所以对于需求比较简单的功能,诸如从一些外部文件导入数据,然后在维护表中稍加修改和检查,再自动生成单据的需求,就可以用Table Control。对于一些,需要复杂事件触发的程序,ALV grid更加适用。
&& Table Control有自动和人工两种生成方法。使用的时候要视具体境况而定。我的例子中,是在自动生成的程序中,做了一下修改,使之为我所用。(能复用的代码为什么不用呢?)
PROCESS&BEFORE&OUTPUT.*&SPWIZARD:&PBO&FLOW&LOGIC&FOR&TABLECONTROL&'ZTC'&&MODULE&ZTC_CHANGE_TC_ATTR.*&SPWIZARD:&MODULE&ZTC_CHANGE_COL_ATTR.&&LOOP&AT&&&GT_ZKEVIN&&&&&&&INTO&GS_ZKEVIN&&&&&&&WITH&CONTROL&ZTC&&&&&&&CURSOR&ZTC-CURRENT_LINE.&&&&MODULE&ZTC_GET_LINES.*&SPWIZARD:&&&MODULE&ZTC_CHANGE_FIELD_ATTR&&ENDLOOP.&MODULE&STATUS_1000.*PROCESS&AFTER&INPUT.*&SPWIZARD:&PAI&FLOW&LOGIC&FOR&TABLECONTROL&'ZTC'&&LOOP&AT&GT_ZKEVIN.&&&&CHAIN.&&&&&&FIELD&GS_ZKEVIN-ID.&&&&&&FIELD&GS_ZKEVIN-NAME.&&&&&&MODULE&ZTC_MODIFY&ON&CHAIN-REQUEST.&&&&endchain.&&&&FIELD&GS_ZKEVIN-LINE&&&&&&MODULE&ZTC_MARK&ON&REQUEST.&&ENDLOOP.&&MODULE&ZTC_USER_COMMAND.*&SPWIZARD:&MODULE&ZTC_CHANGE_TC_ATTR.*&SPWIZARD:&MODULE&ZTC_CHANGE_COL_ATTR.&MODULE&USER_COMMAND_1000.
阅读(1542) | 评论(2) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
Table Control要用在screen上加控件的,简单的copy是跑不了的。博客上不易放图,所以没有screen的画法,不过这个case我是用wizard的,你可以试一下。
zkevin 表的结构,ID是主键。
程序copy直接跑不了,推荐用非Z表做模板,容易移植。
请登录后评论。请教ABAP老手, table control和可编辑ALV
论坛徽章:14
iamma 发表于
1,是不是这种ALV只能用OO的方式,不能用REUSE_ALV_GRID_DISPLAY?OO的那个container好难看
2,我看了SAP标 ...
就你说描述的需求来看,REUSE_ALV_GRID_DISPLAY完全可以实现.
论坛徽章:10
本帖最后由 iamma 于
16:09 编辑
sorrowlich 发表于
就你说描述的需求来看,REUSE_ALV_GRID_DISPLAY完全可以实现.
我要做一个排班界面,在selection-screen里进去输入人员号和日期后(日期范围是动态的,所以还需要做成动态内表),比如10个人在2012年2月,执行进入展示和编辑界面,首先显示的是10行*29列的界面,每一格是系统默认的员工那天的日排班计划(数据类型ptpsp-tprog,CHAR4),在单元格里F4或者下拉列表可以另选一个来替换掉现有的排班,如果用户从F4 list新选的值和旧值不一样,则popup给用户确认更新,用户确认后,系统就去更新数据库(通过后台的标准function module进行),更新成功则成功,状态栏显示成功,单元格换成新的值,不成功则popup message告知原因,并且单元格还原成旧值。
一个界面可以多次修改,及时刷新。
其他还有一些锦上添花的功能,比如本次更新过的单元格就有不同的底色,更新不成功的也有不同的底色,或者限定一次更新后本格不可以在编辑,还可以在用户用F4选新值前后,加一些自己的类似PAI/PBO的东西。
给个feasibility analysis和quota?
论坛徽章:14
iamma 发表于
我要做一个排班界面,在selection-screen里进去输入人员号和日期后(日期范围是动态的,所以还需要做成动 ...
请参照系统demo程序:BCALV*系列.
alv单元格F4的应用,还可以参考Jack Wu 在CSDN上的博客.
对于你的情况,我个人的意见是,如果abaper对alv熟悉,alv比较方便,因为需要的功能alv都已经集成了.
反之,就table control.
论坛徽章:2
还真没研究过ALV的修改功能,落伍了。。。像楼主这种需求,常规都是用table control的,但是开发时间可能要比ALV长
论坛徽章:0
兩者均可實現編輯/維護
ALV&&user_command&&可以知道此行數據
判斷更改有個data_changed 吧
论坛徽章:2
iamma 发表于
我要做一个排班界面,在selection-screen里进去输入人员号和日期后(日期范围是动态的,所以还需要做成动 ...
日期范围是动态的,这里是指ALV的列标题是动态的还是列数是动态的?
如果标题是动态的,那很容易。
如果列数是动态的,不确定最大会有多少列(不是说固定50列,有数据就显示,没数据就显示空白,而是有数据就有列,没数据就没有列。),table control是不好控制的,我暂时没有见过系统里的哪一个例子的是用table control来实现这种动态列数的。或者有,帮忙举一个例子一个出来,我去想想。不过就算有,我想也不适合来做你这样的需求,你这个需求应该是不值那么多人天的。你什么附加的改色之类的,table control中也用的很少,大部分也是字体变色,单元格背景变色的也不多见,恕我孤陋。
所以,这里用ALV来控制会比较好。
但是不是用REUSE_ALV_GRID_DISPLAY,这个对各种事件的支持不是太友好,SAP仅建议这个用来做显示,虽然他支持编辑事件。而且,暂时没有看到REUSE_ALV_GRID_DISPLA这个可以控制到单元格的编辑,谁知道的话,帮忙把参数贴一个上来?
所以,建议你用OO 的ALV来处理,不会费太多时间。也就是一个F4,一个数据改变完成2个事件,已及对单元格进行编辑控制。可能你在生成动态内表的动态列时,可能需要费些时间,但也是可以实现的。
对了,如果你觉得那个container难看,你可以试一下SALV的OO方法。
论坛徽章:14
maycolour 发表于
日期范围是动态的,这里是指ALV的列标题是动态的还是列数是动态的?
如果标题是动态的,那很容易。
1.不知道“对各种事件支持不太友好”是指哪些事件呢?没遇到过这种情况,请教一下。
2.OO能做到的绝大部分功能,REUSE_ALV_GRID_DISPLAY都可以,包括控制到单元格的内容编辑,颜色变化等等,我做过这种程序,所以敢肯定。jack wu的博客上也有不少现成的例子。现在手头没有系统,没法贴具体的代码。
论坛徽章:27
这种情况,我从来只有OO ALV,且可用动态内表实现
论坛徽章:1
功能上跟 se16n有些类似, 我不是abaper, 帮不了你
论坛徽章:0
maycolour 发表于
日期范围是动态的,这里是指ALV的列标题是动态的还是列数是动态的?
如果标题是动态的,那很容易。
请问,table control里的标题如何在代码中修改,我定义了相同名称的变量,赋值后还是不变。
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号ABAP&ALV&总结整理_兔兄_新浪博客
ABAP&ALV&总结整理
/ronachen2007/blog/category/Alv
ALV&总结整理
一、ALV简介
2、ALV_GRID介绍
3、其它描述
二、开发ALV的基本流程
三、ALV相关开发细节
1、标准ALV与对象ALV的共同开发细节
2、标准ALV开发相关细节
3、对象ALV开发相关细节
四、注意事项
五、附属信息
1、ALV快捷工具栏功能说明(如下图)
2、类型SLIS_FIELDCAT_ALV常用参数说明
3、类型SLIS_T_SORTINFO_ALV常用参数说明
4、类型SLIS_LAYOUT_ALV常用参数说明
5、类型SLIS_T_EVENT常用参数说明
6、结构LVC_S_FCAT参数说明(清单观察器控制的字段目录)
7、结构LVC_S_LAYO参数说明(ALV&控制:&布局结构)
8、打印的参数控制请参考结构[LVC_S_PRNT]
9、排序的参数控制请参考结构[LVC_S_SORT]
11、'REUSE_ALV_GRID_DISPLAY'函数常用参数
12、'REUSE_ALV_LIST_DISPLAY'函数常用参数
13、方法"set_table_for_first_display"的参数说明
14、方法"REFRESH_TABLE_DISPLAY"的参数说明
六、ALV常见问题
七、示例程序
&一、ALV简介
ALV――SAP
VIEWER是SAP中的一种报表方式,这里姑且称之为ABAP表单浏览器,用它可以标准化,简单化R/3系统中的表单,它可以提供给用户一个统一的表单格式及用户接口。ALV是系统的一种网格的显示方式,这种方式带有汇总\排序\筛选等功能,ALV格式的数据是以单元格为单位显示,SAP提供了一套ALV的功能模块,可以对输出报表的样式作修饰,提高报表输出的可读性和功能性,对于动态报表程序是一个很有效率的工具。ALV家族包含3中ALV工具:简易的,两层ALV,分等级连续的列表和树形结构的ALV。一般的ALV报表有一个表头,再加上表内容,并附加一些如排序,分类汇总,合计或下载为本地文件等预设功能。ALV报表显示方式基本上有2种,一种是Grid方式,一种是List方式,是分别调用不同的Function来实现。
1)当调用“REUSE_ALV_GRID_DISPLAY”函数时,ALV的显示样式如下:
2)当调用“REUSE_ALV_LIST_DISPLAY”函数时,ALV的显示样式如下:
2、ALV_GRID介绍
&&&&TheALV
Grid Control (ALV = SAP List
Viewer)是一个显示列表的灵活的工具,它提供了基本功能的列表操作,也可以通过自定义来进行增强,因此可以允许你可以在大型的应用程序中使用。在SAP的开发项目中,ALV
GRID也可以作为修改和创建数据的一种工具。它包括3大部分,工具栏,标题,用于显示数据的网格控制器.如果有必要,用户可以隐藏标题和工具栏。
3、其它描述
&&&&&&&&报表的自主开发设计主要逻辑都是依托于选择屏幕上字段,也就是提供给用户让他们得到自己想要结果的选择条件途径。其中最重要的就是必选字段,因为必选字段是取数逻辑的精华所在,他可以很巧妙的限制很多非必要的情况出现,减少开发人员的开发量,还能让用户最直接最快捷的得到与实际业务相关的展现结果。
对于一个报表程序的开发流程,一般都会有几个INCLUDE.(X代表任意自定义字母)
&&&&&&&REPORTZXXXXXX.
&&&&&&&INCLUDE&ZXXXX_INIT.
&&&&&&&INCLUDE&ZXXXX_F01.
&INCLUDE&ZXXXX_block.
很多都是个人习惯吧,但是有一些习惯,能够让其他人在读程序或者修改程序的时候,很快捷,有规律可循。
INCLUDEZXXXXX_BlOCK。
里面无非就是以下几个部分
INITIALIZATION.(初始化。在所有以下事件块运行之前运行的,只运行一次的事件块)
ATSELECTTION-SCREEN
OUTPUT.(PBO事件块,即屏幕输出前事件块)
AT&SELECTION-SCREEN&ON&VALUE-REQUEST&FOR&&选择屏幕字段名称。(自定义搜索帮助事件块)
ATSELECTION-SCREEN.(PAI事件块,即屏幕操作后事件块)
START-OF-SELECTION.(程序运行事件块)
其它见解:SAP中的程序还是有很多类型的.尤其是类报表程序,有可执行程序(REPORT&开头)还有MODULE
POOL(PROGARM&开头)2种形式.
ABAP开发属于事件驱动开发,这句话也清晰的解释了SAP程序的必然结构。对于事件驱动,SAP程序就需要是由一个个事件去触发才能够执行的程序,当我们使用SE38去创建1类型的可执行性程序(REPORT&开头)这样的程序,我们可以直接调试,我们会发现,这个程序是按照上面所写的事件块的顺序去依次执行的。它的事件块的顺序是指定好的。所以我们能够按F8,去运行。我们所创建的MODULE
POOL就不能去执行,因为它需要用TCODE的去指定运行入口,一般都会在MODULE
POOL&里面创建&SCREEN
.&在一个SCREEN里就会有两个事件块,分别是PBO&和PAI。我们使用多个屏幕,或者使用TABLECONTROL控件,再或是使用子屏幕范围控件嵌套各种SUBSCREEN(子屏幕),其中都是需要PAI&和&PBO&相互联系的,一个屏幕的PAI中,必然后会有一个CALL
SCREEN&或者CALL SUBSCREEN ...
INCLUDIG....命令去调用另一个屏幕或者子屏幕,然后另一个屏幕先运行PBO,有屏幕上的操作,就执行被操作屏幕的PAI。个人感觉正式这种灵活的编写方式,导致了这种类型(MODULE
POOL)的程序不能直接F8,编译器无法获取程序从哪里开始,而TCODE就会指定从哪个屏幕开始。
INCLUDE&ZXXXX_INIT(ZXXXX_TOP):进入程序的第一个INCLUDE。INCLUDE&是什么??(CR:就是产生的请求号,也可以理解为一个程序的代码版本,所有的SAP程序都是在D系统(DEVELOPMENT
SYSTEM)然后传到Q(测试)系统由顾问进行测试,又不干扰生产系统的程序运行,最后再传到P(生产)系统,覆盖原来的代码,变成修改后代码逻辑)恩,我感觉它是一种封装起来的思想。我研究一下,它单独产生CR,而和它的主程序没有任何关联。这也是必然的,因为INCLUDE是一个全局全系统的声明,一旦你取了一个名字,那么其他人也能够引用使用,这就导致它的修改CR是单独产生的。这里也可以定义程序所需的数据类型和数据对象。
&&&INCLUDE&ZXXXX_F01:习惯使用PERFROM来封装代码,取有意义的名字,然后把所有的FORM都放在这边。
在START-OF-SELECTION中,我们一般都会写以下几个PERFORM,
&PREFORMfrm_get_data.
(取数逻辑)
&PERFORMfrm_alv_layout_build.&(创建ALV显示格式)
&PERFORMfrm_alv_set_columns.(调用ALV函数)
二、开发ALV的基本流程
&第一步:定义ALV所要用到的类型池:TYPE-POOLS:
&第二步:定义ALV所要显示的数据对应的内表数据类型及内表数据对象;
&第三步:定义一些显示ALV时所要使用到的变量,例如:
&&&Data:w_repid&&like&&sy-repid,&&“ABAP程序,我们一般取当前程序
&&&&&&&&w_callback_ucomm&&&typeslis_formname,&&&"字符型,功能
&&&&&&&&w_print&&&&&&&&&&&&typeslis_print_alv,&&"类型组
&&&&&&&&w_layout&&&&&&&&&&&typeslis_layout_alv,
&&&&&&&&w_html_top_of_pagetype&&slis_formname,&&"字符型
&&&&&&&&w_fieldcat_alv&&&&&likeline
i_fieldcat_alv,&“从上面的数据结构类型引用过来的
&&&&&&&&w_excluding&&&&&&&&likeline
i_excluding,&&&&“同上
&&&&&&&&w_events&&&&&&&&&&&likeline
i_events,&&&&&&&“同上
&&&&&&&&w_event_exit&&&&&&&likeline
i_event_exit,&&&“同上
&&&&&&&&w_list_comments&&&&likeline
of i_list_comments.“同上
&第四步:定义选择屏幕 ;
&第五步:声明各个选择屏幕事件块,例如:
&&&定义initialization部分,在这个部分往往要指定w_repid的值,w_repid
= sy-repid。
&&&定义start-of-selection部分,在这通常会调用各种子程序,以下以标准ALV显示为例:
&&&1)调用一个子程序(通常命名为frm_get_dataXXX(X代表任意自定义字母)),用于获取ALV所要显示的数据
&&&&&FORM&frm_get_data.
&&&&&&&&…
…&&&&“其它处理逻辑
&&&&SELECT&lifnr&&&&&&&&&&&"供应商账号&&&&&&&&&ktokk&&&&&&&&&&&"账号组&&&&&&&&&name1&&&&&&&&&&&"名称1&&&&&&&&&name2&&&&&&&&&&&"名称2&&&&&&&INTO&CORRESPONDING&FIELDS&OF&TABLE&it_main&&&&&&&FROM&zmmjyht003&&&&&&&WHERE&(l_where)&&&&&&&.
…&&&&“其它处理逻辑
&&&&&ENDFORM.
&&&2)调用一个子程序(通常命名为frm_alv_layout_build),用于设置ALV所要显示的样式
&&&&例如:
&&&&&FORM&frm_alv_layout_build.&&&&&&&g_layout-zebra&=&'X'.&&&&&&&g_layout-colwidth_optimize&=&'X'.&&&&&&&"列数据最优化显示&&&&&&&g_layout-box_fieldname&=&'SELFLAG'.&&&&&"表示ALV行项目选中的字段&&&&&ENDFORM.&&&
&&&3)调用一个子程序(通常命名为frm_alv_set_columns),用于完成ALV所要显示的列的相关设置;
&&&&例如:
&&&&&FORM&frm_alv_set_columns.
&&&&&&&&REFRESH&g_fieldcat_alv.&&PERFORM&frm_set_l_fieldcat&USING&1&'LIFNR'&'供应商账号'.
&&&&&ENDFORM.
&&&&&FORM&frm_set_l_fieldcat&&USING&&p_pos&p_name&p_text.
&&&&&&&DATA:&l_fieldcat&TYPE&slis_fieldcat_alv.&l_fieldcat-col_pos&=&p_pos.&l_fieldcat-fieldname&=&p_name.&l_fieldcat-seltext_l&=&p_text.&&
APPEND&l_fieldcat&TO&g_fieldcat_alv.
&&&&ENDFORM.&
&&&4)调用显示ALV的函数,例如:REUSE_ALV_GRID_DISPLAY&;
&&&&&FORM&frm_alv_display_data.&&&&&&&CALL&FUNCTION&'REUSE_ALV_GRID_DISPLAY'&&&&&&&&&EXPORTING&&&&&&&&&&&i_callback_program&&&&&&&&&&&&&&&&=&g_repid&&&&&&&&&&&i_callback_pf_status_set&&&&&&&&&&=&'FRM_STATUS_ALV'&&&&&&&&&&i_callback_user_command&&&&&&&&&&&=&'FRM_USER_COMMAND_ALV'&&&&&&&&&&is_layout&&&&&&&&&&&&&&&&&&&&&&&&&=&g_layout&&&&&&&&&&it_fieldcat&&&&&&&&&&&&&&&&&&&&&&&=&g_fieldcat_alv[]&&&&&&&&TABLES&&&&&&&&&&t_outtab&&&&&&&&&&&&&&&&&&&&&&&&&&=&it_main&&&&&&&&EXCEPTIONS&&&&&&&&&&&program_error&&&&&&&&&&&&&&&&&&&&&=&1&&&&&&&&OTHERS&&&&&&&&&&&&&&&&&&&&&&&&&&&&=&2&&&&&&&&&&&&.&&&&&ENDFORM.&
&&&&&如果ALV所要展示的列过多时,建议先在数据字典系统中创建相应的结构,这样可免去对输出列表头信息的繁琐编辑处理,代码行也会缩短。只要将上面函数中的it_fieldcat参数替换成i_structure_name,如:I_STRUCTURE_NAME
='TY_OUT_FILE',注意:此处的TY_OUT_FILE结构必须是数据字典中已经存在的对象
&&以上步骤,详见“示例程序”部分:示例一(标准ALV)。
三、ALV相关开发细节
&1、标准ALV与对象ALV的共同开发细节
2、标准ALV开发相关细节
&2.1、ALV中的各种结构类型注解:
1)TYPE-POOLS:&slis:用于指定ALV类型组;
2)slis_listheader:用于定义top
of page的抬头结构;
3)slis_t_listheader:用于定义top
of page的抬头表
4)slis_t_sortinfo_alv:用于指定ALV排序分类合计等信息的数据对象;
&&&3)slis_layout_alv&:用于定义布局类型数据对象;
4)slis_t_fieldcat_alv&WITH&HEADER&LINE:用于定义ALV列字段相关类型数据
&&&&&&对象;(slis_t_fieldcat_alv是表字段的整体,slis_fieldcat_alv是某一个字段的内容,将该字段的内容写到&slis_fieldcat_alv后,通过append添加到slis_t_fieldcat_alv中,后者是整个列表的标题,在显示的时候用到。)
5)slis_t_event&:是event的整体可看作event的集合,感觉可以用来写表头。&&
&&&&slis_alv_event是某个event,需要将slis_alv_event
append到slis_t_event.它可以包含图片和listheader等,也就是说listheader等是靠event来显示的。
6)slis_t_listheader&:是listheader的集合,slis_listheader是某个listheader。将slis_listheader赋值后append到slis_t_listheader中。它是内表的表头。
&&7)slis_listheader&:
包含:typ :H = header,S = Selection,A = action. key
&&&&&是和s对应的,是那个的标题吧.
info:可以是变量和赋值的。跟在key的标题后面,
&&&&&是个表达值。
&&2.2、ALV中所用到的函数:
1)显示ALV函数:
&&&&&CALL&FUNCTION&'REUSE_ALV_GRID_DISPLAY'&EXPORTING
&&&&i_callback_program&&&&&&&&=&g_repid&&&&&i_callback_pf_status_set&&=&'FRM_STATUS_ALV'&&&i_callback_user_command&&&=&'FRM_USER_COMMAND_ALV'&&&is_layout&&&&&&&&&&&&&&&&&=&g_layout&&&it_fieldcat&&&&&&&&&&&&&&&=&g_fieldcat_alv[]&TABLES&&&t_outtab&&&&&&&&&&&&&&&&&&=&it_main
&&&&&上面“REUSE_ALV_GRID_DISPLAY&“函数的参数说明:
&&&1&g_repid:用于保存当前程序名,例如:
&&&&&&g_repid&TYPE&sy-repid&VALUE&sy-repid&&&&&"保存当前程序名
&&&2&FRM_STATUS_ALV:该子程序用于指定程序状态,例如:
&&&&&&FORM&frm_status_alv&USING&p_extab&TYPE&slis_t_extab.SET&PF-STATUS&'STANDARD'.
ENDFORM.&&&&
&&&3&FRM_USER_COMMAND_ALV:该子程序指定相关函数功能码的响应逻辑,例如:
&&&&&&FORM&frm_user_command_alv&USING&p_ucomm&
TYPE&sy-ucomm&p_selfield&TYPE&slis_selfield.&&ok_code&=&p_ucomm.
&&CASE&ok_code.
WHEN&'CREATE'.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&…
WHEN&'DELETE'.&
…&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&p_selfield-refresh&=&'X'.&"ALV被修改时会自动刷新,没有修改不进行刷新
ENDFORM.&&&&&&&&&&&&&&&&&&&&
4&&g_layout:用于设置ALV布局样式,例如:
&&&FORM&frm_alv_layout_build.&&&&&&&&&g_layout-zebra&=&'X'.&&&&&&&&&g_layout-colwidth_optimize&=&'X'.&&&&&&&"列数据最优化显示&&&&&&&&&g_layout-box_fieldname&=&'SELFLAG'.&&&&&"表示ALV行项目选中的字段&&&&&&&ENDFORM.&&&&&&&&
5&&g_fieldcat_alv[]:用于指定ALV字段相关属性信息,例如:
&&&FORM&frm_alv_set_columns.&&&&&&&&&REFRESH&g_fieldcat_alv.&&&&&&&&&PERFORM&frm_set_l_fieldcat&USING&1&'LIFNR'&'供应商账号'.
&&&&&&&ENDFORM.&
&&&&&&&FORM&frm_set_l_fieldcat&&USING&&p_pos&p_name&p_text.&&&&&&&&&DATA:&l_fieldcat&TYPE&slis_fieldcat_alv.&&&&&&&&&l_fieldcat-col_pos&=&p_pos.&&&&&&&&&l_fieldcat-fieldname&=&p_name.&&&&&&&&&l_fieldcat-seltext_l&=&p_text.&&&&&&&*&&l_fieldcat-no_zero&=&'X'.&&&&&&&&&APPEND&l_fieldcat&TO&g_fieldcat_alv.&&&&&&&ENDFORM.
6&&it_main:此内表中保存的是ALV所要展示的数据,例如:
&&&it_main&TYPE&TABLE&OF&typ_item&WITH&HEADER&LINE,&&"ALV对应的内表
&&&SELECT&lifnr&&&&&&&&&&&"供应商账号&&&&&&&&&ktokk&&&&&&&&&&&"账号组&&&&&&&&&name1&&&&&&&&&&&"名称1&&&&&&&&&name2&&&&&&&&&&&"名称2&&&&&&&INTO&CORRESPONDING&FIELDS&OF&TABLE&it_main&&&&&&&FROM&zmmjyht003&&&&&&&WHERE&(l_where)&&&&&&&.
&&&&&&此函数的其它参数信息,详见附属信息中的&'REUSE_ALV_GRID_DISPLAY'函数常用参数
&&&2)&reuse_alv_events_get&:
将各个事件的名字写到slis_t_event的name中。这样,可以在后面,根据名字的不同,对不同的event付不同的form,来实现不同功能。
2.3、ALV其它相关信息:
alv中对数字字段进行去掉小数点后面的零的操作如下:
&&&在slis_t_fieldcat_alv结构中,给demcimals_out字段设为零即可,代码如下:
&&&&&&IF&P_FIELD&=&'LINE_SUM'.&&&&&&&&&LS_FIELDCAT-DECIMALS_OUT&=&'0'.&&&&&&ENDIF.
&&&2)通过HTML格式来显示表头,示例代码如下:
&&&&*-------ALV&Commit&Setting&of&ALV_top_of_page--------FORM&alv_top_of_page&USING&cl_dd&TYPE&REF&TO&cl_dd_document.&&&DATA:&m_p&TYPE&i.
&&&&&&&DATA:&m_buff&TYPE&string.
*表头其实完全可以是一个html文件,自己使用html语言进行格式控制
&m_buff&=&''.
&&&&&&&CALL&METHOD&cl_dd-&html_insert
&EXPORTING
contents&=&m_buff
position&=&m_p.
m_buff&=&'
配件报废品种汇总表
CALL&METHOD&CL_DD-&HTML_INSERT
CONTENTS&=&m_buff
POSITION&=&m_p.
CONCATENATE&'报表日期:'&S_DATE-LOW&' TO '&S_DATE-HIGH&&'
'&into&m_buff.
CALL&METHOD&CL_DD-&HTML_INSERT
CONTENTS&=&m_buff
POSITION&=&m_p.
m_buff&=&'
CALL&METHOD&cl_dd-&html_insert
contents&=&m_buff
&&&&&&&&&&&&position&=&m_p.&&&ENDFORM.&&&&&&&&&&&&&&&&&&&&"ALV_top_of_page
&&&3)ALV中设置选择字段
g_layout-box_fieldname&=&'SELFLAG'.
&&&&&上面中的“SELFLAG”是ALV所要显示的内表对应的类型中的一个字段定义,形式如下:
&&&&&selflag&TYPE&c,&&&&&&&&&"用于判断行项目是否被选中
&&&&&当box_fieldname赋值为”SELFLAG”后,就可以通过“SELFLAG”来判断ALV显示中的行项目是否被选中。
3、对象ALV开发相关细节
&&3.1、ALV
GRID CONTROL (ALV网格控制器)
&&&&&&&ALVGRID
CONTROL使用了控制器技术以实现艺术性的屏幕显示,象所有的控制器一样,ALV
CONTROL通过系统中的一个全局的类提供方法,以响应它的动作。
&&&&&&&使用了ABAP的对象以后,列表是通过ALV的一个实例(INSTANCE)来显示的,程序员可以使用ABAP对象的事件管理.
&3.2、ALV GRID
CONTROL&实例
&&&&&&ALVGRID实例的定义,参照CL_GUI_ALV_GRID类
&&&&&&dataALV_GRID1
type ref to cl_gui_alv_grid.
&3.3、简单对象ALV的开发流程
&&3.3.1、OO的ALV
GRID必须存在于一个容器当中,就是FUNCTION的ALV,其实也是一样的,底层也是使用CL_GUI_ALV_GRID这个类的。首先ALV的显示需要有几个先决条件:
&&&&&&&&1,字段目录,这个是必须的,如果没有这个参数,参考一个数据字典也是可以的,就是参数I_STRUCTURE_NAME.
&&&&&&&&2.存放数据的内表,最好内表的结构和字段目录是一致的,否则可能会出现一些无法预知的错误,当然你说我非要不一样,那也不一定会出现错误.我建议是最好一样的.
&&&&这2个是必须的,布局的话,应该是可以不设置的,使用默认的就可以了.
&&第一步:创建个SCREEN,在屏幕上创建个容器,CONTAINER.定义变量.
&&&&&&&WCL_CONTAINERTYPE
REF TO CL_GUI_CUSTOM_CONTAINER,
&&&&&&&WCL_ALVTYPE
REF TO CL_GUI_ALV_GRID .
&&&&*---&存放字段目录的内表
gt_fieldcat TYPE lvc_t_fcat .
&&&&*---&布局结构
gs_layout TYPE lvc_s_layo .
&&&&*----声明需要显示的内表(以SFLIGHT为例)
BEGIN OF gt_list OCCURS 0 .
&&&&&&&&INCLUDE
STRUCTURE SFLIGHT .
DATAEND OF gt_list .
&&第二步:&创建ALV这个对象,它的父组件是那个容器.
&&&&&&&在PBO中写入如下代码:
&&&&&&&&PROCESS
BEFORE OUTPUT .
&&&&&&&&&&&&MODULE
display_alv .
&&&&&&&创建DISPLAY_ALV的MODULE后,写下如下代码:
&&&&&&&&&&&&MODULE
display_alv OUTPUT .
&&&&&&&&&&&&&&&&PERFORM
display_alv .
&&&&&&&&&&ENDMODULE
&&&&在FORM
DISPLAY_ALV中,判断ALV实例是否存在,如果不存在,则创建:
&&&&&&IF&WCL_ALV
IS INITIAL .
&&&&&&&CREATEOBJECT:
WCL_CONTAINER&
&&&&&&&&&EXPORTING&
&&&&&&&&&&&CONTAINER_NAME=
\'ALV_CON\'.
&&&&&&&CREATEOBJECT
&&&&&&&&&&EXPORTING
&&&&&&&&&&&&I_PARENT=
WCL_CONTAINER.&
&&&&&*-----准备获取字段目录
PERFORMprepare_field_catalog CHANGING gt_fieldcat
&&&&&*-----设置布局
PERFORMprepare_layout CHANGING gs_layout .
&&&&&*-----显示ALV
CALLMETHOD
gr_alvgrid-&set_table_for_first_display
&&&&&*----刷新ALV
CALLMETHOD
gr_alvgrid-&refresh_table_display
第三步,获取要显示数据的字段目录.有两种方式.
&&1.手动创建
FORMprepare_field_catalog CHANGING pt_fieldcat TYPE
lvc_t_fcat .
DATAls_fcat type lvc_s_fcat .
ls_fcat-fieldname= \'CARRID\' .
ls_fcat-inttype= \'C\' .
ls_fcat-outputlen= \'3\' .
ls_fcat-coltext= \'Carrier ID\' .
ls_fcat-seltext= \'Carrier ID\' .
APPENDls_fcat to pt_fieldcat .
CLEARls_fcat .
&&2.半自动的创建
FORMprepare_field_catalog CHANGING pt_fieldcat TYPE
lvc_t_fcat .
DATAls_fcat type lvc_s_fcat .
CALLFUNCTION \'LVC_FIELDCATALOG_MERGE\'
i_structure_name= \'SFLIGHT\'
ct_fieldcat= pt_fieldcat[]
EXCEPTIONS
inconsistent_interface= 1
program_error= 2
OTHERS= 3.
IFsy-subrc && 0.
*--Exceptionhandling
LOOPAT pt_fieldcat INTO ls_fcat .
CASEpt_fieldcat-fieldname .
WHEN\'CARRID\' .
ls_fcat-outpulen= \'10\' .
ls_fcat-coltext= \'Airline Carrier ID\' .
MODIFYpt_fieldcat FROM ls_fcat .
WHEN\'PAYMENTSUM\' .
ls_fcat-no_out= \'X\' .
MODIFYpt_fieldcat FROM ls_fcat .
第四步,设置布局
&&FORMprepare_layout
CHANGING ps_layout TYPE lvc_s_layo.
&&&ps_layout-zebra
&&&ps_layout-grid_title
= \'Flights\' .
&&&ps_layout-smalltitle
ENDFORM." prepare_layout
第五步,排除不需要的标准按钮(可选,这个是第一种方法,还有另外一种,在添加自定义的按钮的时候介绍)
&&&&&在你的ALV上,如果你想排除一些你不想要的标准按钮,你可以把需要排除的按钮填入到表UI_FUNCTIONS中,然后传给set_table_for_first_display方法的参数"IT_TOOLBAR_EXCLUDING".这些按钮的功能码一般都可以通过查看类cl_gui_alv_grid的常量属性中获取到,或者自己加个断点,在after_user_command事件中.
&&如果你要隐藏全部的工具条,你可以把layout中的no_toolbar设置为"X".
FORMexclude_tb_functions CHANGING pt_exclude TYPE
ui_functions .
ls_exclude TYPE ui_func.
&&&&ls_exclude
= cl_gui_alv_grid=&mc_mb_sum .
&&&&APPEND
ls_exclude TO pt_exclude.
&&以上步骤,详见“示例程序”部分:示例二(对象ALV)。
3.3.2、对象ALV的一些功能.
&&&功能一:在第一次显示以后,修改字段目录和布局.
&&&&&&在运行的时候,很有可能需要在显示之后,需要设置一个新的布局或者字段目录.有下面这些方法去实现.
&&&字段目录&:&&&get_frontend_fieldcatalog
&&&&&&&&&&&&&&&set_frontend_fieldcatalog
&&&布局:&&&&&&&&get_frontend_layout
&&&&&&&&&&&&&&&set_frontend_layout
&&&使用这些方法,你在执行的任何时候,可以获取这些内容,然后修改他们.
DATAls_fcat TYPE lvc_s_fcat .
DATAlt_fcat TYPE lvc_t_fcat .
DATAls_layout TYPE lvc_s_layo .
CALLMETHOD
gr_alvgrid-&get_frontend_fieldcatalog
&IMPORTING
&&&et_fieldcatalog
= lt_fcat[] .
&LOOPAT lt_fcat INTO ls_fcat .
&&IF ls_fcat-fieldname =
\'PAYMENTSUM\' .
&&&&ls_fcat-no_out
&&&&MODIFY
lt_fcat FROM ls_fcat .
CALLMETHOD
gr_alvgrid-&set_frontend_fieldcatalog
&&EXPORTING
&&&&it_fieldcatalog
= lt_fcat[] .
CALLMETHOD
gr_alvgrid-&get_frontend_layout
&IMPORTING
&&&es_layout
= ls_layout .
&&ls_layout-grid_title =
\'Flights (with Payment Sums)\' .
CALLMETHOD
gr_alvgrid-&set_frontend_layout
&EXPORTING
is_layout= ls_layout .
功能二:设置排序条件
&&&&&&有时候我们需要使用到数据的排序.这个可以通过填充参考结构LVC_T_SORT创建的内表来实现,这个内表中包含了排序的标准.可以传递给set_table_for_first_display这个方法的IT_SORT参数来初始化一个排序.
&FORMprepare_sort_table CHANGING pt_sort
TYPE lvc_t_sort .
ls_sort TYPE lvc_s_sort .
&&&&ls_sort-spos
&&&&ls_sort-fieldname
= \'CARRID\' .
&&&&ls_sort-up
= \'X\' . "A to Z
&&&&ls_sort-down
&&&&APPEND
ls_sort TO pt_sort .
&&&&ls_sort-spos
&&&&ls_sort-fieldname
= \'SEATSOCC\' .
&&&&ls_sort-up
&&&&ls_sort-down
= \'X\' . "Z to A
&&&&APPEND
ls_sort TO pt_sort .
ENDFORM." prepare_sort_table
&&这有2点特别的说明:
&&&&1.如果这边排序的字段名,不存在于字段目录中,那将出现DUMP.
&&&&2.排序以后,垂直的网格中,如果出现相同的内容,就会合并,如果要避免,请在布局中设置"no_merging"为"X"
&&可以通过使用方法“get_sort_criteria”&和“set_sort_criteria”来获取和设置排序的标准.
功能三:设置过滤(和排序类似)
&&&&&&ALV的标准按钮中已经有过滤的功能,我们也可以在初始显示的时候就设置过滤条件.我们需要把过滤条件填充到参考表类型"LVC_T_FILT"创建的内表中.过滤条件是类似一个RANGES结构的.然后把这个内表传递给方法"SET_TABLE_FOR_FIRST_DISPLAY"中的参数"IT_FILTER"
FORMprepare_filter_table CHANGING pt_filt TYPE lvc_t_filt
ls_filt TYPE lvc_s_filt .
&&&&ls_filt-fieldname
= \'FLDATE\' .
&&&&ls_filt-sign
&&&&ls_filt-option
= \'BT\' .
&&&&ls_filt-low
&&&&ls_filt-high
&&&&APPEND
ls_filt TO pt_filt .
ENDFORM." preparefiltertable
&&&&我们可以使用"get_filter_criteria"&和"set_filter_criteria"来获取过滤条件和设置过滤条件.
功能四:选择方式
&&&&&有时候,我们需要选择一些单元格,行或者列,在布局中,有个参数"SEL_MODE"可以设置我们不同的选择方式.下面是参数的介绍.和不同的地方.
值 模式 可能的选择 注释
SPACE&等同于B&参考B&默认设置
\'A\'&行和列的选择,无法选择单元格
多行,多列用户可以使用最左边的选择按钮来选择多行
\'B\'&单选,不可以多选行,不可以多选单元格
多行,多列  
\'C\'&多选,可以多选行,不可以多选单元格
多行,多列  
\'D\'&单元格的选择,可以多选单元格
多行,多列,任何单元格多选 用户可以使用最左边的选择按钮来选择多行
&1.如果你设置了ALV是可编辑的,可能会覆盖你在布局中选择方式的设置的.
&2.设置了选择方式以后,我们可以使用很多方法来获取用户的选择.比如"GET_SELECTED_CELLS","GET_SELECTED_CELLS_ID","GET_SELECTED_ROWS","GET_SELECTED_COLUMNS"
&3.在执行PAI以后,用户所选择的单元格,行或者列可能丢失.你可以在PBO中,使用对应的SET方法来恢复这些选择.
功能五:颜色设置
&&&&&有的时候,我们需要在ALV网格上绘上一些颜色.可以给特定的行,某个特定的列,某个特定的单元格绘制颜色.
如果某列被设置为关键列,这列的颜色将被自动绘制,而不需要我们额外的指定.
先介绍ALV里色码.就是颜色编码,4位CHAR型.
&&&&&&&&&&&&&Cxyz---
&&&&&&&&&&&&Color
&&&&&&&&&&&&&&&&&&&&|&&&
1/0:&相反 开/关
&&&&&&&&&&&&&&&&&&&&1/0:&强化
&&&&&其中C是固定的第一位,第二位代表是颜色编码(1到7),第三位是加强的设置,第四位是相反,个人理解,在强化关闭的情况下,相反的作用是背景和字体的变化.
x&颜色 主要使用在
1Gray-blue headers
2Light gray List bodies
3yellow totals
4Blue-green Key columns
5green Positive threshold value
6red Negative threshold value
7orange Control levels&
A)设置列的颜色.
&&&&&我们可以通过字段目录的"emphasize"控制字段来控制某列的颜色.这个字段同样是4位的CHAR型,传入上述的颜色编码.例如:
&&&&&LS_FCAT-EMPHASIZE=
\'C701\'.&
如果这列被设置为关键列,就是&&&
LS_FCAT-KEY = \'X\'
,那么颜色设置就不会起作用.请注意,自动产生的字段目录中,KEY的设置是自动获取的.
B)设置行的颜色
&&&&为某行设置颜色,是有点复杂的,我们需要在要显示的数据内表中增加一个字段,这个字段不需要在字段目录中存在.同样,这个字段也是4位的CHAR型,符合颜色编码的定义.
&&&&那我们就需要这样来定义我们的数据内表:
DATABEGIN OF gt_list OCCURS 0 .
&&&&INCLUDE
STRUCTURE SFLIGHT .
rowcolor(4) TYPE c .
DATAEND OF gt_list .
&&&&很明显,填入颜色编码以后,ALV怎么知道它是我们用来设置颜色的呢,在布局中,有个控制字段"INFO_FNAME",我们可以设置这个字段来告诉ALV,我们的颜色字段是哪个.
&&ps_layout-info_fname =
\'ROWCOLOR\'.&
&&&&请注意,这个字段随便你起名字,但是记住,一定是数据内表里的字段,而且这边设置的时候一定要大写.你可以在任何时候设置行的颜色,只需要去修改内表里的这个字段的值,但是记得,一定要刷新以后才起作用.
C)设置单元格的颜色&&&&&
&&&&&设置单元格和设置行的颜色,本质上没有什么大的区别,但是定位单元格需要2个参数.我们需要在数据内表中插入一个表类型的字段,这样我们的数据内表就变成了DEEP结构了,不过ALV是可以处理的.不需要担心.
插入的这个表类型的类型为"LVC_T_SCOL".
&里面有3个参数:
&&&&FNAME告诉我们你需要设置的是哪个字段,如果为空,然后直接在COLOR中设置颜色,就是整行设置为这个颜色.如果具体到某个单元格,必须指定是哪个字段.
&&&&COLOR字段是用来设置颜色的.
&&&&NOKEYCOL字段比较关键了.设置为关键列的一些字段,我们的颜色设置可能被覆盖.通过这个字段的设置,可以避免被关键列覆盖.
&&&&同样,ALV在布局中有个字段"CTAB_FNAME"告诉我们,数据内表中,哪个字段是用来设置单元格的颜色的.
DATABEGIN OF gt_list OCCURS 0 .
&&&INCLUDE
STRUCTURE SFLIGHT .
DATArowcolor(4) TYPE c .
DATAcellcolors TYPE lvc_t_scol .
DATAEND OF gt_list .
DATAls_cellcolor TYPE lvc_s_scol .
&READ TABLE gt_list INDEX 5 .
&&&ls_cellcolor-fname
= \'SEATSOCC\' .
&&&ls_cellcolor-color-col
&&&ls_cellcolor-color-int
ls_cellcolor TO gt_list-cellcolors .
&MODIFY gt_list INDEX 5 .
&&&颜色设置中有优先级顺序,他们是单元格---&行---&列.
功能六:插入超链接
&&&&&&插入超链接是通过一个含有超级链接和句柄的表来实现的.这个表类型为"LVC_T_HYPE"
,句柄是一个INT4类型的字段,我们需要在数据显示的内表中,加入这样的字段,来告诉ALV,我们的字段指定的句柄,从而找到对应的超级链接.在字段目录中,WEB_FIELD是用来指定对应的句柄名的.
&&下面举个例子来说明,我们要为字段CARRID,CONNID建立超级链接:
首先,内表定义中,我们加入2个句柄字段:
DATABEGIN OF gt_list OCCURS 0 .
&&&INCLUDE
STRUCTURE SFLIGHT .
DATArowcolor(4) TYPE c .
DATAcellcolors TYPE lvc_t_scol .
DATAcarrid_handle TYPE int4 .
DATAconnid_handle TYPE int4 .
DATAEND OF gt_list .
第二:&建立一个超级链接内表,里面存放句柄所对应的超级链接.创建的时候注意,它参考的表类型,一定是"LVC_T_HYPE".
FORMprepare_hyperlinks_table CHANGING pt_hype TYPE
lvc_t_hype .
DATAls_hype TYPE lvc_s_hype .
&&ls_hype-handle = \'1\'
&&ls_hype-href =
\'/carrids/car1\' .
&&APPEND ls_hype TO
&&ls_hype-handle = \'2\'
&&ls_hype-href =
\'/carrids/car1\' .
&&APPEND ls_hype TO
&&ls_hype-handle = \'3\'
&&ls_hype-href =
\'/carrids/car1\' .
&&APPEND ls_hype TO
&&ls_hype-handle = \'4\'
&&ls_hype-href =
\'/connids/con11\' .
&&APPEND ls_hype TO
&&&&&ls_hype-handle=
&&&&&ls_hype-href=
\'/connids/con12\'&
&&&&&APPENDls_hype
TO pt_hype .
第三.通过字段目录FIELDCATLOG来指定相应的句柄字段.
&&&&对于CARRID的field
&&&&&&Ls_fieldcat-web_field
=&‘CARRID_HANDLE’.
&&&&对于CONNID的field
&&&&&&Ls_fieldcat-web_field
=&‘CONNID_HANDLE’.
在方法"SET_TABLE_FOR_FIRST_DISPLAY"中把句柄内表传给参数it_hyperlink。
第四:在数据显示的内表中,指定对应的句柄:
&LOOP AT gt_list.
&&IF gt_list-carrid
&Gt_list-carrid_handle
&IF gt_list-connid
&&Gt_list-connid_handle
功能七:把字段设置为下拉
&&&&&有时候我们可以把一些字段设置为下拉,比如一些类型,一些字段的值是比较固定的一些值,当然,我们也可以通过搜索帮助来做,这些只是看各自的爱好和需要了.
&&&&&设置为下拉,和上一篇设置超级链接是类似的,也是使用了一个内表存放了句柄和对应的值,这个表类型为"LVC_T_DROP".不过传递给ALV的方式有点区别.超级链接是通过方法"SET_TABLE_FOR_FIRST_DISPLAY"的参数来传递的,而下拉的内表传递需要使用方法"SET_DROP_DOWN_TABLE".
&&&&&&如果我们希望把这个列都设置为下拉,那么我们可以在字段目录中,把控制字段"DRDN_HNDL"指向对应的下拉内表的句柄就可以了.例如:
&&&&&ps_fcat-drdn_hndl
如果是某个单元格设置为下拉,那我们就需要在数据显示的内表中增加一个句柄字段(如果是有多个不同的字段需要设置下拉,可以增加多个字段),同时得在字段目录里设置"DRDN_FIELD".例如:
&&&&ps_fcat-drdn_field
= \'PTYP_DD_HNDL\' .
数据显示内表定义为:
DATABEGIN OF gt_list OCCURS 0 .
INCLUDESTRUCTURE SFLIGHT .
DATArowcolor(4) TYPE c .
DATAcellcolors TYPE lvc_t_scol .
DATAcarrid_handle TYPE int4 .
DATAconnid_handle TYPE int4 .
DATAptype_dd_hndl TYPE int4 .
DATAEND OF gt_list .
定义下拉的句柄内表:
FORMprepare_drilldown_values.
DATAlt_ddval TYPE lvc_t_drop .
DATAls_ddval TYPE lvc_s_drop .
&&ls_ddval-handle =
&&ls_ddval-value =
\'JFK-12\' .
&&APPEND ls_ddval TO
lt_ddval .
&&ls_ddval-handle =
&&ls_ddval-value =
\'JSF-44\' .
&&APPEND ls_ddval TO
lt_ddval .
&&ls_ddval-handle =
&&ls_ddval-value =
\'KMDA-53\' .
&&APPEND ls_ddval TO
lt_ddval .
&&ls_ddval-handle =
&&ls_ddval-value =
\'SS3O/N\' .
&&APPEND ls_ddval TO
lt_ddval .
CALLMETHOD
gr_alvgrid-&set_drop_down_table
&&EXPORTING
&&&&&it_drop_down
= lt_ddval .
ENDFORM." prepare_drilldown_values
准备好内表,以后,使用方法set_drop_down_table来传递给ALV.
功能八:基于事件的附加功能
&&&&&作为使用面向对象的方法开发的一个组件,ALVGRID控制器有很多响应用户交互的事件.这些事件经常被用来增强一些用户响应的功能.为实现这样的功能,我们必须在程序中创建一个类的实例来作为ALV
GRID实例的事件处理者.
&&&&&下表列出了一些ALV
GRID的事件,后面的HTML列用来说明是否在HTML形式SAP
GUI上支持.
用户定义文本输出:
EventApplication HTML
Print_end_of_listDefine output text to be printed at the
end of the entire list&√
Print_top_of_listDefine output text to be printed at begin
of the entire list&√
Print_top_of_pageDefine output text to be printed at begin
of each page&√
Print_end_of_pageDefine output text to be printed at the
end of each page&√
Subtotal_textDefine self-defined subtotal
ALVGRID的鼠标动作事件
EventApplication HTML
Button_clickQuery click on a push button in the ALV GRID
control&√
Double_clickQuery a double click on a cell of the ALV
Hotspot_clickQuery a hotspot click on columns defined for
this purpose in advance&√
ondragCollect information when elements of the ALV GRID
Control are
ondropProcess information when elements of the ALV GRID
Control are
ondropCompletePerform final actions after successful
drag&drop&&
ondropGetFlavorDistinguish between options for
behavior&&
自定义和标准功能实现
EventApplication HTML
Before_user_commandQuery self-defined and standard
functions&√
User_commandQuery self-defined function
After_user_commandQuery self-defined and standard
functions codes&√
自定义功能的定义(自定义按钮,菜单等等)
EventApplication HTML
Toolbar Change,delete or add gui elements on alv
Menu_buttonDefine menus for menu buttons in the
toolbar&√
Context_menu_requestChange context
Onf1Define self-defined f1
下面是一段代码,举例说明如果定义我们的事件处理类.
CLASlcl_event_handler DEFINITION.
&PUBLICSECTION.
*--在ALV的工具条上增加新的按钮
Handle_toolbarFOR EVENT toolbar OF
cl_gui_alv_grid
&&&IMPORTING
e_object e_interactive,
*--实现用户命令
Handle_user_command&
EVENT user_command OF cl_gui_alv_grid
&&&&&&IMPORTING
*--热点点击控制
Handle_hotspot_click
EVENT hotspot_click OF cl_gui_alv_grid
&&&&&&IMPORTING
e_row_id e_column_id es_row_no.
*--在用户命令触发之前
Handle_before_user_command
&&FOR EVENT
before_user_command OF cl_gui_alv_grid
&&&&&&&IMPORTING
*--在用户命令触发之后
Handle_after_user_command
&&FOR EVENT
after_user_command OF cl_gui_alv_grid
&&&&&&IMPORTING
*--在ALV可修改的情况下,控制数据修改
Handle_data_changed
&&FOR EVENT data_changed
OF cl_gui_alv_grid
&&&&&&&IMPORTING
er_data_changed.
*--在数据修改完成之后
&Handle_data_changed_finished
&&FOR EVENT
data_changed_finished OF cl_gui_alv_grid
&&&&&&&IMPORTING
e_modified.
*--管理菜单
Handle_menu_button
&&FOR EVENT menu_button
OF cl_gui_alv_grid
&&&&&&&IMPORTING
e_object e_ucomm.
*--管理按钮点击
Handle_button_click
&&FOR EVENT button_click
OF cl_gui_alv_grid
&&&&&&&IMPORTING
e_objec e_ucomm.
&PRIVATESECTION.
下面是类的实现的一些概要代码,参数可以从ALV的事件中直接获取出来:
CLASSlcl_event_handler IMPLEMENTATION.
&*--Handle toolbar
&METHODhandle_toolbar.
&&&PERFORM
handle_toolbar USIGN e_object e_interactive.
&ENDMETHOD.
&*--Handle hotspot click
&METHODhandle_hotspot_click.
&&&PERFORM
handle_hotspot_click USING e_row_id e_column_id
es_row_no.
&ENDMETHOD.
&*--Handle double click
&METHODhandle_double_click.
&&&PERFORM
handle_double_click USING e_row e_column es_row_no.
&ENDMETHOD.
&*--Handle after user command
&METHODhandle
_after_user_command.
&&&PERFORM
handle_after_user_command USING e_object.
&*--Handle before user command
&METHODhandle_before_user_command.
&&&PERFORM
handle_before_user_command.
&ENDMETHOD.
&*--Handledata changed
&METHODhandle_data_changed.
&&&PERFORM
handle_data_changed USING er_data_changed.
&ENDMEHTOD.
&METHODhandle_data_changed_finished.
&&&&PERFORM
handle_data_chaged USING e_modified.
&ENDMETHOD.
&METHODhandle_menu_button.
&&&&PERFORM
handle_menu_button USING e_object e_ucomm.
&ENDMEHTOD.
&MEHTODhandle_button_click.
&&&&PERFORM
handle_button_click USING e_objcet e_ucomm.
&ENDMETHOD.
光定义了这些还不够,我们需要把事件管理类注册到ALV
GRID的实例事件.
DATAgr_event_handler TYPE REF TO lcl_event_handler
*--Creatingan instance for the event handler
CREATEOBJECT gr_event_handler .
*--Registeringhandler methods to handle ALV Grid
SETHANDLER
gr_event_handler-&handle_user_command FOR gr_alvgrid
SETHANDLER gr_event_handler-&handle_toolbar
FOR gr_alvgrid .
SETHANDLER
gr_event_handler-&handle_menu_button FOR gr_alvgrid
SETHANDLER
gr_event_handler-&handle_double_click FOR gr_alvgrid
SETHANDLER
gr_event_handler-&handle_hotspot_click FOR
gr_alvgrid .
SETHANDLER
gr_event_handler-&handle_button_click FOR gr_alvgrid
SETHANDLER
gr_event_handler-&handle_before_user_command FOR
gr_alvgrid .
SETHANDLER
gr_event_handler-&handle_context_menu_request FOR
gr_alvgrid .
SETHANDLER
gr_event_handler-&handle_data_changed FOR gr_alvgrid
SETHANDLER
gr_event_handler-&handle_data_changed_finished FOR
gr_alvgrid .
3.4、ABAP-AVL-OO方法中的ALV的如何自己添加按钮及其响应
&&&&&SAP在做报表开发中,不同公司对报表的风格往往各异,为此经常在使用OO方法做ALV报表中需要去掉自带的工具栏而自行添加一些工具按钮,下面将简单介绍一下添加按钮及如何响应的实现方法:
步骤一:创建一个事件处理类
&&CLASS&lcl_event_receiver&DEFINITION.*&public&attributes&and&method&&PUBLIC&SECTION.&&&&METHODS:&&&&&handle_toolbar&&&&&FOR&EVENT&toolbar&OF&cl_gui_alv_grid&&&&&&&IMPORTING&&&&&&&&&e_object,&&&&&handle_user_command&FOR&EVENT&user_command&OF&cl_gui_alv_grid&&&&&&&IMPORTING&&&&&&&&&e_ucomm,ENDCLASS.&&&&&&&&&&&&&&&&&&&&"lcl_event_receiver&DEFINITION&
注意这个事件处理类中添加了两个方法,第一个方法负责往工具栏上添加按钮,第二个方法用来响应工具栏上按钮的动作
步骤二:类的实现
&&CLASS&lcl_event_receiver&IMPLEMENTATION.
*&method&toolbar&handler&&METHOD&handle_toolbar.&&&PERFORM&set_toolbar&CHANGING&e_object.&&ENDMETHOD.&&&&&&&&&&&&&&&&&&&&"handle_toolbar&
&&&METHOD&handle_user_command.*&&&Handle&own&functions&defined&in&the&toolbar&&&&CASE&e_ucomm.&&&&&&WHEN&'ADD'.&&&&&&&PERFORM&xyz.&“这里你想干嘛就可以干嘛&&&&ENDCASE.&&ENDMETHOD.&&&&&&&&&&&&&&&&&&&&"handle_user_command&
&&ENDCLASS.&&&&&&&&&&&&&&&&&&&&"lcl_event_receiver&IMPLEMENTATION&
步骤三:在FORM-----set_toolbar&中添加button
&&FORM&set_toolbar&
CHANGING&prf_object&TYPE&REF&TO&cl_alv_event_toolbar_set.&&CLEAR&prf_object-&mt_toolbar.&&CLEAR&&gs_toolbar.&&MOVE&&&'ADD'&&&&&&&&&&&&TO&&&gs_toolbar-function.&&MOVE&&&&&&&&&&&&&&&&&&&&TO&&&&&
gs_toolbar-quickinfo.&&MOVE&&&&&&&&&&&&&&&&&&&&TO&&&gs_toolbar-text.&&MOVE&&&'&'&&&&&&&&&&&&&&TO&&&gs_toolbar-disabled.&&INSERT&gs_toolbar&&&&&&&INTO&prf_object-&mt_toolbar&INDEX&1.ENDFORM.&&&&&&&&&&&&&&&&&&&&"&set_toolbar1&
步骤四:创建事件处理对象--这一步一般在&grf_grid-&set_table_for_first_display&之后
&&SET&HANDLER&grf_event_receiver-&handle_user_command&FOR&grf_grid.&&SET&HANDLER&grf_event_receiver-&handle_toolbar&FOR&grf_grid.&&CALL&METHOD&grf_grid-&set_toolbar_interactive.&
注意:STB_BUTTON结构包含的字段
FUNCTION&&&&&&&&UI_FUNC&&&
CHAR&70&0&Function
CodeICON&&&&&&&&&&&&ICONNAME&&
CHAR&30&0&Name
IconQUICKINFO&&&&&&&ICONQUICK&&CHAR&30&0&Quickinfo
iconBUTN_TYPE&&&&&&&
TB_BTYPE&&INT4&10&0&Toolbar
typeDISABLED&&&&&&&&CHAR&&&&&&&&&&&1&&0&DisabledTEXT&&&&&&&&&&&&TEXT40&&&&&CHAR&40&0&Text,
40Characters
LongCHECKED&&&&&&&&&CHAR&&&&&&&&&&&&1&0&Printed
TB_BTYPE&的可选择值
,主要用来决定按钮的类型&&&
0&Button(normal)1&Menu
and default
button2&Menu3&Separator4&Radio
button5&Checkbox6&Menu
详见“示例程序”部分:示例二(对象ALV添加自己的按钮)。
3.5、ABAP-AVL-如何去掉OO方法中的ALV的标准按钮
SAP在做报表开发中,不同公司对报表的风格往往各异,为此经常在使用OO方法做ALV报表中需要去掉自带的工具栏而自行添加一些工具按钮,下面将简单介绍一些其实现过程与原理:
&&DATA&:&gt_exclude&TYPE&ui_functions.&&&&&&&步骤二:写一个FORM将要去掉的按钮添加到上面定义的表(gt_exclude)&
&&&&&&&performexclude_tb_functions&&tables
gt_exclude
&&FORM&exclude_tb_functions&&TABLES&pt_exclude&TYPE&ui_functions&.&&DATA:&ls_exclude&TYPE&ui_func.&&ls_exclude&=&cl_gui_alv_grid=&mc_fc_maximum&.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_fc_minimum&.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_fc_subtot&.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_fc_sum&.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_fc_average&.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_mb_sum&.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_mb_subtot&.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_fc_sort_asc.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_fc_sort_dsc&.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_fc_find&.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_fc_filter&.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_fc_print&.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_fc_print_prev&.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_mb_export&.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_fc_graph&.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_mb_view&.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_fc_detail&.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_fc_help&.&&APPEND&ls_exclude&TO&pt_exclude.&&ls_exclude&=&cl_gui_alv_grid=&mc_fc_info&.&&APPEND&ls_exclude&TO&pt_exclude.
&&ls_exclude&=&cl_gui_alv_grid=&MC_MB_VARIANT.&&APPEND&ls_exclude&TO&pt_exclude.&ENDFORM.&&&&&&&&&&&&&&&&&&&&"&exclude_tb_functions&
&&CALL&METHOD&grf_grid1-&set_table_for_first_display&&&&EXPORTING&&&&&&is_variant&&&&&&&&&&&=&gs_variant&&&&&&i_save&&&&&&&&&&&&&&&=&'&'&&&&&&is_layout&&&&&&&&&&&&=&gs_layout&&&&&&it_toolbar_excluding&=&gt_exclude&&&&CHANGING&&&&&&it_outtab&&&&&&&&&&&&=&gt_result1[]&&&&&&it_fieldcatalog&&&&&&=&gt_fcat_lvc.&
3.6、对象ALV单元格编辑状态设计
ALV函数只能实现对整列的编辑状态控制,单元格的编辑状态控制只能通过ALV
1.单元格状态控制和单元格颜色控制类似,在LISTDATA
TABLE中定义一个字段cellstyle. TYPE
&lvc_t_styl
table中的cellstyle字段将被用来存储单元格样式信息,单元格编辑状态就是通过表中的内容来控制
2.根据相关条件调整list data
table中的cellstyle字段内容
3.设置样式输出控制结构的stylename字段内容为单元格状态控制字段名&&
3.7、cell&更新事件
&&ALV单元格设置为可输入后,通常我们需要对单元格输入的值做一个检查,一般来说用循环内表的方法可以实现上述操作,不过如果ALV中有大量数据,而我们只更新了少量的单元格数据,这样检查显得非常的麻烦,而且效率低下&&&在ALV&OO中我们可以通过DATA_CHANGE事件得到被修改的单元格的信息,利用这些信息我们可以很方便的对所填数据做检查,别且可以给用户相应的错误提示,以及自动修改单元格数据1.我们需要在处理事件的类中添加一个处理DATA_CHANGE事件的方法Eg:CLASS&lcl_alv_receiver&DEFINITION&DEFERRED.CLASS&lcl_alv_receiver&DEFINITION.&&PUBLIC&SECTION.&&&&……..&&&&METHODS:&&&&handle_data_changed&&&&&&&&FOR&EVENT&data_changed&OF&cl_gui_alv_grid&&&&&&&&&&&&IMPORTING&er_data_changed&e_onf4&e_onf4_before&e_onf4_after&e_ucomm.ENDCLASS.&&&&&&&&&&&&&&&&&&&&"lcl_event_receiver&DEFINITION2.初始化ALV后为lcl_alv_receiver类注册一个DATA_CHANGED事件&Eg:CALL&METHOD&g_grid-&set_table_for_first_display&&&&EXPORTING&&&&&&i_save&&&&&&&&&&=&x_save&&&&&&is_variant&&&&&&&=&ls_layout&&&&&&is_layout&&&&&&&&=&is_layout&&&&CHANGING&&&&&&it_fieldcatalog&&&=&it_fieldcat&&&&&&it_outtab&&&&&&&=&lt_zqsdmx[].SET&HANDLER&g_alv_application-&handle_data_changed&FOR&g_grid.CALL&METHOD&g_grid-&register_edit_event&&“注册更新事件&&&&EXPORTING&&&&&&i_event_id&=&cl_gui_alv_grid=&mc_evt_enter&.&其中i_event_id&=&cl_gui_alv_grid=&mc_evt_enter&表示在单元格修改后回车或者执行其他操作时触发事件,此类型可用于多个单元格修改后一起检查修改的值i_event_id&=&cl_gui_alv_grid=&mc_evt_modified&表示单光标焦点移开被修改单元格后既触发事件,此类型可用于每个每个单元个的实时更新检查&3.实现lcl_alv_receiver类的handle_data_changed方法,其中一些常用的一些属性方法我会在后附表列出Eg:CLASS&lcl_alv_receiver&IMPLEMENTATION.&&METHOD&handle_toolbar.&&&&METHOD&handle_data_changed.&&&&PERFORM.&handle_data_changed&USING&er_data_changed.&&ENDMETHOD.&&&&&&&&&&&&&&&&&&&&"handle_data_changedENDCLASS.&&&&&&&&&&&&&&&"lcl_ALV_event_receiver*&---------------------------------------------------------------------**&&&&&&&Form&&handle_data_changed*&---------------------------------------------------------------------**&&&&&&&text*----------------------------------------------------------------------**&&&&&&--&P_ER_DATA_CHANGED&&text*----------------------------------------------------------------------*FORM.&handle_data_changed&&USING&p_er_data_changed&TYPE&REF&TO&cl_alv_changed_data_protocol.*如果更新的reason字段长度小于10为则提示用户填入字符数不能低于10&&DATA:mod_data&TYPE&lvc_t_modi,&&&&&&&wa_mod_data&TYPE&lvc_s_modi.&&mod_data&=&p_er_data_changed-&mt_mod_cells.&&LOOP&AT&mod_data&INTO&wa_mod_data&Where&fieldname&=&'ZRESON'.&&&&IF&STRLEN(&wa_mod_data-value&)&&&10.&&&&&&CALL&METHOD&p_er_data_changed-&add_protocol_entry&&&&&&&&EXPORTING&&&&&&&&&&i_msgid&&&&&=&'00'&&&&&&&&&&i_msgty&&&&&=&'E'&&&&&&&&&&i_msgno&&&&&=&'001'&&&&&&&&&&i_msgv1&&&&&=&'长度必须大于10&'&&&&&&&&&&i_fieldname&=&wa_mod_data-fieldname.*如果长度小于10,则将字段内容更新为长都无法确定&&&&&&CALL&METHOD&p_er_data_changed-&modify_cell&&&&&&&&EXPORTING&&&&&&&&&&i_row_id&&&&=&wa_mod_data-row_id&&&&&&&&&&i_fieldname&=&wa_mod_data-fieldname.&&&&ENDIF.&&ENDLOOP.
四、注意事项
&1、在ALV中,需要注意所有添加的需要显示的列,都必须在相应的内表中有对应的字段,否则,只要使用合计或者分类汇总都会导致程序的崩溃。
ABAP程序中,字符串的大小写很重要,在单引号包围的字符串中,一般来说都应该用大写,特别是在调用一些系统的方法时传入字符串参数时,例如在ALV中,Call
Function&‘REUSE_ALV_GRID_DISPLAY’时,传入的下面的两个参数:i_callback_pf_status_set
=&‘SET_PF_STATUS’i_callback_user_command&
=&‘USER_COMMAND’&就必须使用大写字符串,否则就会出现Perform_not_found的系统错误。
3、另外,传入到ALV中的列对应的字段名称也必须使用大写字母,否则数据不会显示出来。
&4、使用宏定义可以减少代码量,并且尽可能实现代码的复用。
5、注意在FORM里定义的变量在离开FORM后,就会被系统释放掉,回收内存空间。
&6、注意LUW概念,即:数据库的更新回滚,如果是进行多个屏幕的操作,会导致数据库语句隐式的COMMIT,&从而导致数据的不一致,也无法做到数据的全部回滚,还有使用PERORM...
COMMIT等方式可以是暂时制止隐式的数据库提交,与标准程序使用的数据库表互锁(审批程序)(SAP的锁概念,是很有意思的。)&(再就是解释BDC其中DBCOMMIT选项的妙用,会跳过类似COMMIT的控件继续录屏,而不会终止当前录屏操作。
&7、给ALV的各个系统数据类型的数据对象的赋值时,单引号内的数据必须大写。
&8、标准ALV显示工具栏的属性是:slis_layout_alv-def_status。
五、附属信息
1、ALV快捷工具栏功能说明(如下图)
&&&&细节按钮,你首先必须选中列表中的一行,然后点击它的话,就会弹出一个窗口,显示选中行的细节内容。(另外:你双击你要选择的行,也可以显示细节)
&&&按升序排列,首先选中一列,然后再点击它,就可以看到该列是按照升序重新排列。
&&&按降序排列,首先选中一列,然后再点击它,就可以看到该列是按照降序重新排列。
&&&设置过滤器,通过设置它可以达到筛选的目的,以列名称作为筛选的筛选标准,填入过滤器相应的标准值,然后就可以筛选出满足自己条件的记录。
&&&打印预览,点击它之后,就可以预览一下将要打印内容的布局情况。
&&&Microsoft
Excel,调用MS的Excel到当前ALV的列表显示区域。(前提:必须安装了MS的Excel)
&&&字处理,字处理的相关设置。
&&&本地文件,将当前表单存储到本地机器上,有几种供选择的存储格式。
&&&邮件收件人,给系统内用户发邮件
&&&图形,点击它可以根据表单情况绘制相关图表。
&&&更改布局,点击它可以对表单中的列项目排列次序的互换,删减等。
&&&&选择布局,从以及保存的布局中选择自己满意的布局。
&&&保存布局,对于自己满意的布局,可以通过点击它来将布局保存起来。
&2、类型SLIS_FIELDCAT_ALV常用参数说明
&&(用来定义表单中的各个列的相关信息)
(赋值’’中内容必须为大写)&&fieldname&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&对应内表中哪个字段,必须
&&&Intlen&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&表示可以筛选的长度,如果不输得话有可能在筛选的时候显示不够
&&&emphasize(4)&&&带有颜色的高亮列
&&col_pos=n.&&&&&&&&&&&&&&&&&&输出列在ALV中的位置索引值&&
&&tabname=&‘FIELDNAME’.&&&&&&对应的内表字段名(标签名称)
&&seltext_s/m/l=&‘列名’.&&&&&输出列文本(_s:短文本&_l:长文本)必须
&&emphasize=&‘CX10’.&&&&带有颜色的高亮列(其中X=(1-7)颜色同format)
&&hotspot=&‘X’.&&&&&&&&&&&作为热点显示可触发鼠标触发事件
&&currency=&‘CURRKEY’.&&&表&TCURX&中的货币名称
&&quantity(3)&&&&&&&&&&&&计量单位
&&qfieldname&&&&&&&&&&参考计量单位的字段名称
n.&&&&&&&&&&&四舍五入至小数位数下n&位
&&exponent=
n.&&&&&&&&&浮点数的幂指数为n
&&key=&‘X’.&&&&&&&&&&&关键字段
&&icon=&‘X’.&&&&&&&&&&作为图标输出
&&symbol=&‘X’.&&&&&&&&输出作为符号
&&checkbox=&‘X’.&&&&&&作为复选框输出
&&just= SPACE, \'R\',
\'C\'.&&&对齐方式
&&lzero=&‘X’.&&&&&&&&&&输出前导零
&&no_sign=&‘X’.&&&&&&&&输出抑制符号
&&no_zero=&‘X’.&&&&&&&&为输出隐藏零
&&edit_mask= SPACE,
mask..&&输出为mask的模式(为输出编辑掩码)
&&fix_column=&‘X’.&&&&&&固定列
&&do_sum=&‘X’.&&&&&&&&总计列值总和
&&no_out=&‘X’.&&&&&&&&&列不输出
&&tech=&‘X’.&&&&&&&&&&&该字段为技术字段
&&outputlen=
n&&&&&&&&列的字符宽度为n
&&decimals_out=
n&&&&&能控制小数点的位数为n&&
&&datatype =
C,I,N…&&&&&&&&定义数据类型
&3、类型SLIS_T_SORTINFO_ALV常用参数说明
&&(排序)
&&&Fieldname&&&&&&&&字段名
&&&Up&&&&&&&&&&&&&&升序排列
&&&Down&&&&&&&&&&&&降序排列
&&&Subtot&&&&&&&&&&&
4、类型SLIS_LAYOUT_ALV常用参数说明
&&&(用于定义ALV表单的相关格式、属性)
&&&info_fieldname=
\'LINE_COLOR\'.&&设置特殊行颜色
(将LINE_COLOR增加到内表字段,写\'CX10\'到特殊行的LINE_COLOR,
X为颜色值)
&&&&&&&colwidth_optimize
=&‘X’.&&&优化列宽设置
&no_colhead=
\'X\'.&&&&&&&&&不显示列名
&no_vline=\'X\'.&&&&&&&&&&&&不显示列间竖线
&zebra&&&&&&&
&&&&&&&f2code
\'&ETA\'.&&&&设置触发弹出详细信息窗口的功能码,这里是双击
&no_vline&&&&&&&&&&&这个用来设置列间隔线&
detail_popup&&&&&&&&是否弹出详细信息窗口
&&&&&&&detail_titlebar&&&&&&&设置弹出窗口的标题栏
5、类型SLIS_T_EVENT常用参数说明
DATA:i_events TYPE slis_t_event WITH HEADER
&it_events&&&&
i_events[]&&&&
&i_callback_pf_status_set =
\'PF_STATUS_SET\'&&&&
&i_callback_user_command& =
\'USER_COMMAND\'&
&出口程序触发事件对应子程序:
&FORM PF_STATUS_SET USING rt_extab TYPE
slis_t_extab.&
&FORM user_command USING ucomm LIKE
sy-ucomm selfield TYPE slis_selfield.&
ALV标准按钮对应的函数功能码如下:
&功能代码:&&&&&&&&&&&&&&函数文本:&&&&&&&&&&&&&&&&&&&&&&&&&&图标名称:
&ETA&&&&&&&&&&&&&&&&&&&细节&&&&&&&&&&&&&&&&&&&&&&&ICON_SELECT_DETAIL
&EB9&&&&&&&&&&&&&&&&&调用报告...&&&&&&&&&&&&&&&&&&&&ICON_TABLE_SETTINGS
&REFRESH&&&&&&&&&&&&&&刷新&&&&&&&&&&&&&&&&&&&&&&&ICON_REFRESH
&ALL&&&&&&&&&&&&&&&&&全部选择&&&&&&&&&&&&&&&&&&&&&ICON_SELECT_ALL
&SAL&&&&&&&&&&&&&&&&&取消全选&&&&&&&&&&&&&&&&&&&&&ICON_DESELECT_ALL&
&OUP&&&&&&&&&&&&&&&&按升序排列&&&&&&&&&&&&&&&&&&&&ICON_SORT_UP
&ODN&&&&&&&&&&&&&&&&按降序排列&&&&&&&&&&&&&&&&&&&&ICON_SORT_DOWN&
&ILT&&&&&&&&&&&&&&&&&&设置过滤器&&&&&&&&&&&&&&&&&&&ICON_FILTER&
&UMC&&&&&&&&&&&&&&&&&&总计&&&&&&&&&&&&&&&&&&&&&&&&ICON_SUM&
&SUM&&&&&&&&&&&&&&&&&&小计...&&&&&&&&&&&&&&&&&&&&&ICON_INTERMEDIATE_SUM&
&RNT_PREV&&&&&&&&&&&打印预览&&&&&&&&&&&&&&&&&&&&&ICON_LAYOUT_CONTROL&
&VEXCEL&&&&&&&&&&&MicrosoftExcel&&&&&&&&&&&&&&&&&&ICON_XLS
&AQW&&&&&&&&&&&&&&&&字处理...&&&&&&&&&&&&&&&&&&&&&&ICON_WORD_PROCESSING&
%PC&&&&&&&&&&&&&&&&&&&本地文件&...&&&&&&&&&&&&&&&&&&ICON_EXPORT
%SL&&&&&&&&&&&&&&&&&&邮件收件人&&&&&&&&&&&&&&&&&&&&&ICON_MAIL
&ABC&&&&&&&&&&&&&&&&ABC&分析&&&&&&&&&&&&&&&&&&&&&ICON_ABC&
&GRAPH&&&&&&&&&&&&&&&&图形&&&&&&&&&&&&&&&&&&&&&&&&ICON_GRAPHICS&
&OL0&&&&&&&&&&&&&&&&&更改布局...&&&&&&&&&&&&&&&&&&&&&ICON_ALV_VARIANTS&
&OAD&&&&&&&&&&&&&&&&选择格式...&&&&&&&&&&&&&&&&ICON_ALV_VARIANT_CHOOSE&
&AVE&&&&&&&&&&&&&&&&&保存格式...&&&&&&&&&&&&&&&&&ICON_ALV_VARIANT_SAVE&
&INFO&&&&&&&&&&&&&&&&&&信息&&&&&&&&&&&&&&&&&&&&&ICON_INFORMATION&
6、结构LVC_S_FCAT参数说明(清单观察器控制的字段目录)
&1.字段目录&
[Field catalog]
&&&&&&&字段目录是用来控制ALV显示的网格中每个字段的属性的,比如字段的顺序,对齐方式,可编辑状态,颜色,等等.
&&&&&&&常用的控制字段如下:(下面的示例将说明这些字段的使用,参考STRUCTURE
LVC_S_FCAT)
ALV&控制:&输出行&(内部使用)& 
ALV&控制:&输出列
列的位置,第几列,例如1,2,…..
4FIELDNAME
ALV&控制:&内部表字段的字段名称
5TABNAME LVC&标签名称
表名,如果是内表,是1
ALV&控制:&货币单位
7CFIELDNAME
ALV&控制:&参考的当前单位的字段名称
ALV&控制:&计量单位
9QFIELDNAME
ALV&控制:&参考计量单位的字段名称
10IFIELDNAME
ALV&控制:&内部表字段的字段名称
11ROUND ALV&控制:
ROUND&值  
12EXPONENT ALV&控制:流动表示的指数
ALV&控制:&关键字段
关键字段,前面变蓝色
ALV&控制:&可以被隐藏的关键列
可以被隐藏的关键列
ALV&控制:&作为图标输出
此列作为图标输出
ALV&控制:&输出作为符号
17CHECKBOX
ALV&控制:&作为复选框输出
复选框输出
ALV&控制:&对齐
\'R\':right justified
\'L\':left justified
\'C\':centered
ALV&控制:&输出前导零&X\'
ALV&控制:输出抑制符号&X\',不输出符号
ALV&控制:&为输出隐藏零&X\',隐藏0
22NO_CONVEXT
ALV&控制:&不考虑输出的转换退出
23EDIT_MASK
ALV&控制:&为输出编辑掩码
24EMPHASIZE
ALV&控制:&带有颜色的高亮列
25FIX_COLUMN
ALV&控制:&固定列
ALV&控制:&总计列值&X\',合计
ALV_GRID介绍二(2)
ALV&控制:&没有总计列值&X\'
ALV&控制:&列没有输出&X\'
ALV&控制:&技术字段&X\'.也是隐藏,但是有点不一样
30OUTPUTLEN
ALV&控制:&列的字符宽度
输出的长度
31CONVEXIT&转换例程  
ALV&控制:&对话功能的列标识符
ALV&控制:&列抬头的工具提示
34ROLLNAME ALV&控制:
F1&帮助的数据元素  
35DATATYPE
ABAP&字典中的数据类型&ABAP&字典中的数据类型
ABAP&数据类型(C,D,N,...)
ABAP&数据类型(C,D,N,...)
37INTLEN&以字节计的内部长度
内容的长度
38LOWERCASE&允许/不允许小写字母&X\'&允许大小写
39REPTEXT&标题  
40HIER_LEVEL
ALV&控制:&内部使用
ALV&控制:&价值是补充/补充接口的选择标准 
42DOMNAME&定义域名  
43SP_GROUP&组代码  
ALV&控制:&单击敏感&X\',下面出现下划线,响应单击
45DFIELDNAME
ALV&控制:&数据库中列组的字段名称
ALV&控制:&列&ID& 
47F4AVAILABL&字段有输入帮助吗&X\'.此列有搜索帮助
48AUTO_VALUE
ALV&控制:&自动复制值
49CHECKTABLE&表名  
50VALEXI&固定值存在  
51WEB_FIELD
ALV&控制:&内部表字段的字段名称
52HREF_HNDL&自然数
热点连接的句柄
ALV&控制:&样式
下面有例子会介绍,比如PUSHBUTTION
ALV&控制:&样式
ALV&控制:&样式
ALV&控制:&样式
57DRDN_HNDL&自然数
下拉的句柄
58DRDN_FIELD
ALV&控制:&内部表字段的字段名称
下拉的字段
59NO_MERGING&字符字段长度&1&相同的值不合并
ALV&树控制:&功能类型&(总计,平均,最大.最小,
61COL_OPT&可选列优化的条目
62NO_INIT_CH&字符字段长度&1& 
63DRDN_ALIAS&字符字段长度&1& 
64REF_FIELD
ALV&控制:&内部表字段的参考字段名称
65REF_TABLE
ALV&控制:&内部表字段的参考表名称
66TXT_FIELD
ALV&控制:&内部表字段的字段名称
67ROUNDFIELD
ALV&控制:&带有&ROUND&说明的字段名称 
68DECIMALS_O
ALV&控制:&输出小数位的编号
69DECMLFIELD
ALV&控制:&带有&DECIMALS&说明的字段名称 
70DD_OUTLEN
ALV&控制:&输出字符长度
71DECIMALS&小数点后的位数
设置小数的位数
ALV&控制:&列标题
73SCRTEXT_L&长字段标签
74SCRTEXT_M&中字段标签
75SCRTEXT_S&短字段标签
76COLDDICTXT
ALV&控制:&确定&DDIC&文本参考 
77SELDDICTXT
ALV&控制:&确定&DDIC&文本参考 
78TIPDDICTXT
ALV&控制:&确定&DDIC&文本参考 
ALV&控制:&准备输入
输出状态.\'X\'可输入
80TECH_COL
ALV&控制:&内部使用
81TECH_FORM
ALV&控制:&内部使用
82TECH_COMP
ALV&控制:&内部使用
83HIER_CPOS
ALV&控制:&层次列位置
84H_COL_KEY&树控制:&列名称/项目名称
85H_SELECT&标识是否可以选择树控制中的列
86DD_ROLL&数据元素&(语义域)& 
87DRAGDROPID
ALV&控制:&拖&放处理拖放对象 
88MAC&字符字段长度&1& 
89INDX_FIELD&自然数
90INDX_CFIEL&自然数
91INDX_QFIEL&自然数
92INDX_IFIEL&自然数
93INDX_ROUND&自然数
94INDX_DECML&自然数
95GET_STYLE&字符字段长度&1& 
96MARK&字符字段长度&1& 
7、结构LVC_S_LAYO参数说明(ALV&控制:&布局结构)
&&&布局是用来控制整个ALV的一个布局,比如ALV的标题,是否可编辑,行颜色,列颜色。参照ALV的控制结构[LVC_S_LAYO],以后的例子我将详细介绍如何设置行颜色和列颜色.
&&&详细的结构说明
描述& Value range
CWIDTH_OPT&最优化宽度&SPACE,
SMALLTITLE&小标题,如果设置了这个字段,
则标题与列标题大小一样&SPACE,
GRID_TITLE&标题,在网格和工具条之间
最长70个字符
NO_HEADERS&如果被设置,列标题隐藏&SPACE,
NO_HGRIDLN&隐藏水平线&SPACE,
NO_MERGING&禁用单元格合并&SPACE,
NO_ROWMARK&如果被设置,选择列在选择模式
为D和A的时候隐藏&SPACE,\'X\'
NO_TOOLBAR&隐藏工具条&SPACE,
NO_VGRIDLN&隐藏垂直线&SPACE,
SEL_MODE&选择模式&SPACE,
\'A\',\'B\', \'C\', \'D\'
EXCP_CONDS&合计例外&SPACE,
EXCP_FNAME&字段名称带有例外编码
最长30个字符
EXCP_LED&例外作为&LED
SPACE, \'X\'
EXCP_ROLLN&例外文档的数据元素&SPACE,\'X\'
CTAB_FNAME&带有复杂单元格颜色编码的字段名称
最长30个字符
INFO_FNAME&带有简单行彩色代码的字段名称
最长30个字符
ZEBRA&可选行颜色,如果设置了,出现了间隔色带&SPACE,
NO_TOTLINE&没有总计&SPACE,
NUMC_TOTAL&可以对NUMC字段进行合计&SPACE,
TOTALS_BEF&总计输出在第一行,小计在新的值之前&SPACE,
STYLEFNAME&设置单元格,比如PUSHBUTTON&最长30个字符
8、打印的参数控制请参考结构&[LVC_S_PRNT]
&9、排序的参数控制请参考结构[LVC_S_SORT]
&10、过滤的参数控制请参考结构[LVC_S_FILT]
11、'REUSE_ALV_GRID_DISPLAY'函数常用参数
&&&CALLFUNCTION
\'REUSE_ALV_GRID_DISPLAY\'&
&&&&&&EXPORTING&
&&&&&&&&&&&i_interface_check&&&&&&&=\'\'&&&&&&&&&&&&&&&&&&&&&&接口一致性检查&
&&&&&&&&&&&i_callback_program&&&&&&=sy-repid&&&&&&&&&&&&&&&&当前程序名&
&&&&&&&&&&&is_layout&&&&&&&&&&&&&&&=layout&&&&&&&&&&&&&&&&&&输出样式&
&&&&&&&&&&&it_fieldcat&&&&&&&&&&&&&=fieldcat[]&&&&&&&&&&&&&&字段定义描述表&
&&&&&&&&&&&i_callback_pf_status_set=
\'PF_STATUS_SET\'&&&&&&&&&触发事件调用子程序&
&&&&&&&i_callback_user_command&=
\'USER_COMMAND\'&&&&&&&&&&鼠标事件操作子程序&
&&&&&&&&&&&it_events&&&&&&&&&&&&&&&=i_events[]&&&&&&&&&&&&&&出口程序触发事件&
&&&&&&&&&&&i_callback_html_top_of_page&=
\'ALV_TOP_OF_PAGE\'&&
ALV输出表头设置&
&&&&&&&&&&&i_grid_settings=wl_lvc_s_glay&&&&&&&&&&&&&&&&&&&&打印表头设置&
&&&&&&&&&&&it_sort=
sortable[]&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&排序设置&
&&&&&&&&t_outtab&&&&&&&&&&&&&&&&=
&&&&&EXCEPTIONS&
&&&&&&&&program_error&&&&&&&&&&&=
&&&&&&&&OTHERS&&&&&&&&&&&&&&&&&&=
&12、'REUSE_ALV_LIST_DISPLAY'函数常用参数
&13、方法"set_table_for_first_display"的参数说明
&&&_BUFFER_ACTIVE&如果方法调用是静态的,可以设置这个标记,这表示,如果每次显示ALV都是
相同的字段目录.既然这样,那么字段目录会被放到一个特殊的缓存里,
这样加速了ALV的显示
I_STRUCTURE_NAME&输出数据参考的数据字典的结构名,例如\'SFLIGHT\'.如果指定了这个参数,字段
目录会自动生成,下面的参数IT_FIELDCATALOG不需要传值.
IS_VARIANT&决定布局显示的变式
I_SAVE&决定用户是否可以保存变式:
\'X\'&只能保存全局变式
\'U\'&只能保存特定变式
\'A\'&都可以保存
SPACE&不可以保存变式
I_DEFAULT&决定用户是否可以定义默认的布局:
\'X\'&可以定义默认布局,这个参数是默认的
SPACE&不可以定义默认布局
IS_LAYOUT&布局参数,传递布局控制的一些信息
IS_PRINT&后台打印属性的参数
IT_SPECIAL_GROUPS&如果在字段目录中,一些字段通过SP_GROUP被分组在一起.我们就必须为这些
组传递一个组的文本内表进去
IT_TOOLBAR_EXCLUDING&需要隐藏的标准的按钮的内表
IT_HYPERLINK&为每个句柄分配了超连接的内表,LVC_S_HYPE中的HREF存放了超连接的地址,
HANDLE指定了句柄,使用这些句柄,你可以在GRID中使用超连接
IT_ALV_GRAPHICS&比较复杂,没有用过,意思好象是可以在图表中显示ALV.
IT_OUTTAB&输出数据存放的内表,数据都是存放在这个内表里
IT_FIELDCATALOG&字段目录
IT_SORT&排序的标准
IT_FILTER&过滤的标准
14、方法"REFRESH_TABLE_DISPLAY"的参数说明
IS_STABLE&刷新的稳定性,有2个参数,一个是行,一个是列.如果设置了相应的值,
那么对应的行,或者列,在刷新的时候,将会保持稳定,就是滚动条保持不动.
I_SOFT_REFRESH&这个参数只是在异常情况下被使用,如果设置了这个参数,任何创建的合计,
任何排序次序,任何为了显示数据而设置的过滤都将保持不变.这个是非常
有意义的.例如:当然你没有修改数据内表里的数据而想刷新ALV,仅仅只是
改变一下布局和字段目录.
六、ALV常见问题
&1、当为报表程序创建完TCODE后,如果新创建的报表程序没有激活的话,即使在命令域中输入了对应的TCODE,也无法导入到报表程序对应的运行界面,而应该先激活报表程序,这样TCODE才能起作用。
博客等级:
博客积分:0
博客访问:3,873
关注人气:0
荣誉徽章:}

我要回帖

更多关于 abap oo alv 可编辑 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信