REUSEALVGRIDDISPLAYLVC超详细讲解.doc

上传人:文库蛋蛋多 文档编号:4239931 上传时间:2023-04-10 格式:DOC 页数:29 大小:360KB
返回 下载 相关 举报
REUSEALVGRIDDISPLAYLVC超详细讲解.doc_第1页
第1页 / 共29页
REUSEALVGRIDDISPLAYLVC超详细讲解.doc_第2页
第2页 / 共29页
REUSEALVGRIDDISPLAYLVC超详细讲解.doc_第3页
第3页 / 共29页
REUSEALVGRIDDISPLAYLVC超详细讲解.doc_第4页
第4页 / 共29页
REUSEALVGRIDDISPLAYLVC超详细讲解.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《REUSEALVGRIDDISPLAYLVC超详细讲解.doc》由会员分享,可在线阅读,更多相关《REUSEALVGRIDDISPLAYLVC超详细讲解.doc(29页珍藏版)》请在三一办公上搜索。

1、ALV总结作者:张志昂2008.07.08ALV开发流程:1. 将得到并整理好的数据以ALV的形式显示出来41.1. 在子FORM(这里如:F_FIELDS)指定需要显示的字段41.2. 在子FORM(这里如:F_BUILD_LAYOUT)里设置ALV的全局属性41.3. 在子FORM(这里如:F_DISPLAY)里将内表中的数据进行显示51.4. 为ALV程序添加表头标题(这里以添加HTML表头标题为主)51.4.1. 在显示ALV的函数(REUSE_ALV_GRID_DISPLAY_LVC)里添加一个参数51.4.2. 在子FORM(F_TOP_OF_PAGE)里定义好需要的变量51.4.

2、3. 准备好所需数据,如登录用户的描述、制表日期等61.4.4. 将表头数据输出62. 函数“REUSE_ALV_GRID_DISPLAY_LVC”中输入参数的应用72.1. 排序72.1.1. 在显示ALV的子FORM里定义排序用到的变量72.1.2. 设置好需要排序的字段82.1.3. 在显示ALV的函数的输入参数里添加排序的属性82.2. 隐藏不必要的标准按钮82.2.1. 先在显示ALV的子FORM里定义隐藏按钮用到的变量82.2.2. 得到需要隐藏的标准按钮的“FCODE”82.3. 自定义“工具栏”92.3.1. 在显示ALV的函数的输入参数里指定自定义按钮的子FORM93. 热点

3、链接、用户动作的捕捉、调用其他程序或标准事务程序113.1在显示ALV的函数的输入参数里指定捕捉用户动作的子FORM113.2在“字段和列名”的子FORM(F_FIELDS)里,对需要链接的列添加“热点”属性113.3. 操作代码113.4. 显示具体细节123.5. 调用其他事务143.6. 打开并选择文件:144. 关于设置字段和列名的子FORM(F_FIELDS)的参数设置:154.1. 单列优化宽度154.2. 单列求和或者取消求和,添加属性154.3. 对其方式154.4. 作为图标输出164.5. 固定列和关键列164.6. 列的字符宽度165. 单元格的F1、F4帮助:175.1

4、. F1帮助:175.2. F4帮助:176. 输入并保存、回调修改内表(输入时的小数位错位的问题、指定数据类型、小说位数)177. 界面颜色的更改187.1. 更改单元格(字体)的前景、背景颜色197.2. 更改行的颜色和列的颜色:197.3. 利用设置字段和列名子的FORM(F_FIELDS)里来设置列的颜色208. ALV自带的最左端复选框按钮和自定义复选框按钮208.1. ALV自带的复选框按钮:208.2. 自定义复选框按钮209. 按照上传的模板格式导出为本地文件219.1. 定义导出为EXCEL用到的数据变量219.2. 上传模板219.3 代码2210. 为ALV标题添加图片2

5、610.1. 上传图片2610.2. 在子FORM(F_TOP_OF_PAGE2)里的代码27ALV:ABAP LIST VIEW,一种比较美观的报表显示工具REUSE_ALV_LIST_DISPLAYGrid的是Excel单元格的格式,而list不是 REUSE_ALV_GRID_DISPLAY 可以控制某一行 某一列,甚至某一格(CELL)的读写 ALV用到的函数,目前我们有2个:REUSE_ALV_GRID_DISPLAY、REUSE_ALV_GRID_DISPLAY_LVC;两个函数都可以将数据用ALV的形式显示出来,只是在一些小的地方有些不同。其中这两个函数都用到的全局变量为:1个类

6、型池SLIS和一个指定列数的变量DATA:v_pos TYPEi.指定第几列 pos表示列第1个函数用到的全局变量如下:都是slis类型池中的类型,结尾都是alv(表示他们用于alv)DATA:wa_fieldcatTYPEslis_fieldcat_alv,相当于工作区 i_fieldcatTYPEslis_t_fieldcat_alv,存放列名的内表 i_layoutTYPEslis_layout_alv.负责整个ALV的全局属性第2个函数用到的全局变量:DATA: wa_fieldcatTYPElvc_s_fcat,相当于工作区 i_fieldcat_lvcTYPElvc_t_fcat,

7、存放列名的内表 i_layout_lvcTYPElvc_s_layo.负责整个ALV的全局属性下面以第2个函数(REUSE_ALV_GRID_DISPLAY_LVC)来介绍ALV的用法;1.将得到并整理好的数据以ALV的形式显示出来1.1.在子FORM(这里如:F_FIELDS)指定需要显示的字段 wa_fieldcat 工作区,可以赋值v_pos=v_pos+1. 初始值是零wa_fieldcat-col_pos=v_pos.指定列数wa_fieldcat-fieldname=PSPID.需要输出的内表的字段名wa_fieldcat-scrtext_l=项目定义.字段的描述-长字段标签 sc

8、reen text longwa_fieldcat-scrtext_m =项目定义.字段描述-中字段标签wa_fieldcat-scrtext_s=项目定义.字段描述-短字段标签wa_fieldcat-fix_column=X.是否是固定列 column klm列APPEND wa_fieldcat TO i_fieldcat_lvc.CLEAR wa_fieldcat.这样逐步的将需要显示的字段都添加到内表i_fieldcat中;1.2.在子FORM(这里如:F_BUILD_LAYOUT)里设置ALV的全局属性i_layout_lvc-zebra=X.使ALV界面呈现颜色交替i_layout

9、_lvc-sel_mode =A.选择模式,“A”在最左端有选择按钮i_layout_lvc-cwidth_opt =X.自动优化列宽i_layout_lvc-detailinit =X.是否出现细节屏幕i_layout_lvc-detailtitl =详细内容.细节屏幕标题1.3.在子FORM(这里如:F_DISPLAY)里将内表中的数据进行显示 CALLFUNCTIONREUSE_ALV_GRID_DISPLAY_LVCEXPORTINGi_callback_program=sy-repid当前程序is_layout_lvc=i_layout_lvc属性内表it_fieldcat_lvc=

10、i_fieldcat_lvc列明内表i_save=X是否保存布局TABLESt_outtab=i_tab数据内表EXCEPTIONSprogram_error=1OTHERS =2.通过这一步后,一个基本的ALV程序就完成了;下面是对ALV程序的优化和扩展。1.4.为ALV程序添加表头标题(这里以添加HTML表头标题为主)1.4.1.在显示ALV的函数(REUSE_ALV_GRID_DISPLAY_LVC)里添加一个参数i_callback_html_top_of_page=F_TOP_OF_PAGE其中“F_TOP_OF_PAGE”是书写ALV表头标题的子FORM,只是在这里使用,没有明显的

11、“PERFORM”调用,如下:FORMf_top_of_pageUSINGp_cl_ddTYPEREFTOcl_dd_document.1.4.2.在子FORM(F_TOP_OF_PAGE)里定义好需要的变量定义登录用户的描述DATA:l_nameTYPEstring,name_firstLIKEadrp-name_first,name_lastLIKEadrp-name_last.定义登录日期DATA:l_dateTYPEstring.定义缓冲区变量DATA:m_pTYPEi,m_bufferTYPEstring.1.4.3.准备好所需数据,如登录用户的描述、制表日期等得到登录用户的描述SE

12、LECTSINGLEadrpname_firstadrpname_lastINTO(name_first,name_last)FROMadrpINNERJOINusr21ONadrppersnumber=usr21persnumberWHEREusr21bname=sy-uname.IFsy-subrc=0.CONCATENATEname_lastname_firstINTOl_name.ELSE.l_name=sy-uname.ENDIF.CLEARname_first.CLEARname_last.拼接制表日期CONCATENATEsy-datum+0(4).sy-datum+4(2).s

13、y-datum+6(2).INTOl_date.1.4.4.将表头数据输出开始输出表头标题m_buffer=ALV测试.CALLMETHODp_cl_dd-html_insertEXPORTINGcontents=m_bufferCHANGINGposition=m_p.输出制表人和制表日期CONCATENATE出表人:l_name出表日期:l_dateINTOm_buffer.CALLMETHODp_cl_dd-html_insertEXPORTINGcontents=m_bufferCHANGINGposition=m_p.现将需要显示的表头数据放到变量“M_BUFFER”中,然后调用方法

14、“P_CL_DD-HEML_INSERT”将数据插入到HTML页面中显示,至此显示表头数据完成;2.函数“REUSE_ALV_GRID_DISPLAY_LVC”中输入参数的应用2.1.排序排序之前,如果同一列有相同的数据,则排好序以后,在该列会自动将相同的数据合并为一行显示,不再出现多行重复的情况(但是若该ALV中有字段设置了“可编辑”,合并这一现象会失效),步骤如下:2.1.1.在显示ALV的子FORM里定义排序用到的变量定义排序变量DATA:wa_sort_lvcTYPElvc_s_sort, strutureit_sort_lvcTYPElvc_t_sort. table2.1.2.设置

15、好需要排序的字段设置排序参数wa_sort_lvc-spos=1.排序顺序wa_sort_lvc-fieldname=CITYFROM.排序字段wa_sort_lvc-up=X.升序APPENDwa_sort_lvcTOit_sort_lvc.CLEARwa_sort_lvc.wa_sort_lvc-spos=2.排序顺序wa_sort_lvc-fieldname=CITYTO.排序字段wa_sort_lvc-up=X.升序APPENDwa_sort_lvcTOit_sort_lvc.CLEARwa_sort_lvc.2.1.3.在显示ALV的函数的输入参数里添加排序的属性it_sort_lv

16、c=it_sort_lvc 2.2.隐藏不必要的标准按钮2.2.1.先在显示ALV的子FORM里定义隐藏按钮用到的变量定义隐藏标准按钮的变量DATA:wa_excludingTYPEslis_t_extab,it_excludingTYPEslis_extab.2.2.2.得到需要隐藏的标准按钮的“FCODE”首先用事务码“SE24”进入SAP的“类别制作器”,在“Object type”后面输入ALV的类“CL_GUI_ALV_GRID”,点击“Display”进入显示界面,点击“Attributes”选项卡,找到自己需要的“属性”和“初始值”,这个初始值就是我们要找的标准按钮的“FCODE

17、”(注意:每一个标准按钮代表的FCODE是靠经验积累而 掌握的);1 、设将需要隐藏的标准按钮的“FCODE”添加到内表IT_EXCLUDING中,代码如下:设置要隐藏的按钮的“FCODE”wa_excluding-fcode=&ABC.APPENDwa_excludingTOit_excluding.2 、在显示ALV的函数的输入参数里添加隐藏按钮的属性参数:it_excluding=it_excluding1、 ALV标题,定义标题变量并赋值,然后在显示ALV的函数的输入参数里添加“小标题”的参数,代码如下:小标题DATA:i_grid_titleTYPElvc_title.i_grid_

18、title=小标题 .* i_grid_title=i_grid_title2.3.自定义“工具栏”2.3.1.在显示ALV的函数的输入参数里指定自定义按钮的子FORMi_callback_pf_status_set=F_SET_STATUS当然该子FORM和产生表头的子FORM一样,也不显式的调用,代码如下:FORMf_set_statusUSINGp_extabTYPEslis_t_extab.SETPF-STATUSZ_ALV_STATUS.ENDFORM.f_set_status 双击其中的“Z_ALV_STATUS”,进入创建工具栏的界面,输入名字后进入最终的界面在界面右侧,点击“应

19、用工具条”后面的展开符号,在“项目”后面的白色方框内输入“自定义按钮”的代码后回车,选择静态文本回车,在“函数文本”后面输入想要显示的按钮的名称,在“图标名称”后面选择相应的图标(可选),回车在这一界面选择一个“快捷键”(必填)后回车,这样一个自定义按钮就做好了,也可以修改,记住刚刚创建的按钮的代码,在下面的捕捉用户的动作的自FORM(F_USER_COMMAND)会根据刚才的代码来进行相应的操作;1、 点开“功能键”后面的展开符号,进入功能键的设置,下图是各个动作对应的代码:2、 没有自定义按钮时候,函数里的“i_callback_pf_status_set=F_SET_STATUS”这个参

20、数可以不要,这时会显示ALV标准的按钮,当然这些按钮可以部分隐藏(见三、2);3、 当我们使用自定义按钮后,ALV自带的标准按钮,就会失效,这时我们需要将一些用户要求我们必须显示的按钮一一地在“应用工具条”后面补上,如下图:其中“分隔符”的插入方法为:在需要插入分隔符的方框内选择菜单“Edit”“Insert”“Separator line”即可插入分隔符;下面是上图中的标准工具的名称、代码、图标名称、快捷键名称代码图标名称快捷键刷新REFRESHICON_REFRESHF8(可随便更改)导出为EXCEL表格EXCEL无Shift-F8(可随便更改)ABC 分析&ABCICON_ABCCtrl

21、-F1按升序排列&OUPICON_SORT_UPCtrl-F4设置过滤器&ILTICON_FILTERCtrl-F5总计&UMCICON_SUMCtrl-F6邮件查收件%SLICON_MAILCtrl-F7更改布局&OL0ICON_ALV_VARIANTSCtrl-F8选择布局&OADICON_ALV_VARIANT_CHOOSECtrl-F9保存布局&AVEICON_ALV_VARIANT_SAVECtrl-F10信息&INFOICON_INFORMATIONCtrl-F12明细&ETAICON_SELECT_DETAILCtrl-Shift-F3按降序排列&ODNICON_SORT_DOW

22、NCtrl-Shift-F4删除过滤器&ILDICON_FILTER_UNDOCtrl-Shift-F5小计&SUMICON_INTERMEDIATE_SUMCtrl-Shift-F6Microsof&VEXCELICON_XLSCtrl-Shift-F7字处理&AQWICON_WORD_PROCESSINGCtrl-Shift-F8本地文件%PCICON_EXPORTCtrl-Shift-F9打印预览&RNT_PREVICON_LAYOUT_CONTROLCtrl-Shift-F10图形&GRAPHICON_GRAPHICSCtrl-Shift-F11上表中红色的属于自定义按钮,自定义按钮可

23、以使用标准的图标名称,也可以不适用图标;3.热点链接、用户动作的捕捉、调用其他程序或标准事务程序3.1在显示ALV的函数的输入参数里指定捕捉用户动作的子FORMFORMf_user_commandUSINGp_ucommTYPEsy-ucommp_rs_selfieldTYPEslis_selfield.当然该子FORM和产生表头的子FORM一样,也不显式的调用;3.2在“字段和列名”的子FORM(F_FIELDS)里,对需要链接的列添加“热点”属性v_pos=v_pos+1.wa_fieldcat-col_pos=v_pos.wa_fieldcat-fieldname=CITYFROM.wa

24、_fieldcat-scrtext_l=起飞城市.wa_fieldcat-fix_column=X.wa_fieldcat-hotspot=X.热点,链接用APPENDwa_fieldcatTOi_fieldcat.CLEARwa_fieldcat.这样在显式界面上“起飞城市”所代表的字段“CITYFROM”的下面就会出现一条下划线,同时当鼠标移动到该列时,就会变成“等待”的手势,当用户单击每一条时,就会触动子FORM(F_USER_COMMAND)中的动作,进而引起某些操作;3.3.操作代码对于热点链接,所对应的动作码为“&IC1”,在子FORM(F_USER_COMMAND)中捕捉用户的动

25、作,并进行相应的操作,代码如下:FORMf_user_commandUSINGp_ucommTYPEsy-ucommp_rs_selfieldTYPEslis_selfield.CASEp_ucomm.WHEN&IC1.判断用户的动作读取用户点击的当前行的一行内容READTABLEi_tabINTOwa_tabINDEXp_rs_selfield-tabindex.IFp_rs_selfield-fieldnameEQCITYFROM.判断用户点击的是哪一列IFNOTwa_tab-cityfromISINITIAL.PERFORMf_show_detailUSINGp_rs_selfield.

26、显示具体细节ENDIF.ELSEIFp_rs_selfield-fieldnameEQTCODE.IFNOTwa_tab-tcodeISINITIAL.PERFORMf_call_tranUSINGp_rs_selfield.调用其他事务ENDIF.ELSEIFp_rs_selfield-fieldnameEQICON_FOLDER.PERFORMf_open_folderUSINGp_rs_selfield.打开文件ENDIF.CLEARwa_tab.WHEN&SAVE_DATA.PERFORMf_save_data.保存数据WHENPRINT.PERFORMf_print_data.打印数

27、据WHENEXCEL.PERFORMf_export.导出数据ENDCASE.p_rs_selfield-refresh=X.当用户在显式界面上对数据进行修改时,同时内表中的数据也随之刷新ENDFORM.f_user_command3.4.显示具体细节1 、先定义一个存放具体内容的内表并整理好相关数据;2 、调用 一个指定大小的屏幕来显示具体的内容,代码如下:CALLSCREEN0100STARTINGAT1212ENDINGAT13724.3 、双击该屏幕号码“0100”创建该屏幕,在“属性”卡输入该屏幕的描述,在“逻辑流”卡里将系统默认注释掉的PBO、PAI事件的模块取消注释并产生这两个模

28、块(双击并确定);4 、在“屏幕制作器”界面点击进入“屏幕制作器”的图形界面,开始绘制我们需要的屏幕元素,这里我们需要一个“表控制”(最左边从下数第四个元素),该表格的属性设置为:名称:起始行列和高宽上图表示“列标题”为“具体内容”,可以水平或垂直的调节大小,有水平和垂直的分隔符,只能同时选中一行一列,带选择列(DE_BOX),最左端两列固定不滚动;5 、接下来给单元格和列标题名称并给单元格指定内表的字段,6 、屏幕的PBO、PAI事件的代码如下:PROCESSBEFOREOUTPUT.MODULEstatus_0100.LOOPATi_detailINTOwa_detailWITHCONTR

29、OLvs_detailCURSORi_detail-current_line.ENDLOOP.*PROCESSAFTERINPUT.LOOPATi_detail.ENDLOOP.MODULEuser_command_0100.7 、需要在定义变量的时候声明一下表控制和动作的接受者(OK_CODE)如下:*表控制IS_MATNRCONTROLSvs_detailTYPETABLEVIEWUSINGSCREEN0100.利用同名传递原理,来接受细节屏幕上的元素“ok_code”的值DATA:ok_codeTYPEsy-ucomm.8 “MODULEstatus_0100.”的代码如下:MODULE

30、status_0100OUTPUT.SETPF-STATUS0100.DESCRIBETABLEi_detailLINESvs_detail-current_line.ENDMODULE.status_0100OUTPUT在“0100”的工具栏里,只设置即可满足需求;“MODULEuser_command_0100.”的代码如下:MODULEuser_command_0100INPUT.CASEok_code.WHENBACK.SETSCREEN0.返回主屏幕ENDCASE.ENDMODULE.user_command_0100INPUT完成调用细节屏幕;注意:在显示细节屏幕的字段的类型上,当

31、内表中有数据为货币类型的时候,要在“格式”里指明该字段是货币类型的数据,如下图:3.5.调用其他事务FORMf_call_tranUSINGp_rs_selfieldTYPEslis_selfield.SETPARAMETERIDLIBFIELDp_rs_selfield-value.CALLTRANSACTIONSE37.ANDSKIPFIRSTSCREEN.ENDFORM.f_call_tran“LIB”是指参数ID,查找方法:用一个事务码进入事务界面,在输入框内按F1,在弹出来的界面中点击,新界面中的就是参数ID;“SE37”是指我们要调用的事务代码,“ANDSKIPFIRSTSCREE

32、N”表示跳过第一屏屏幕;3.6.打开并选择文件:1 、现则内表中定义好存放文件路径的字段(这里是FILE_PATH),当用户点击界面上设置好的打开文件图标时,就会触发子FORM(F_USER_COMMAND)里的打开文件的子FORM(F_OPEN_FOLDER);2 子FORM(F_OPEN_FOLDER)的代码如下:FORMf_open_folderUSINGp_rs_selfieldTYPEslis_selfield.DATA:l_file_pathLIKErlgrap-filename.CALLFUNCTIONWS_FILENAME_GETEXPORTINGmode=Otitle=选择文

33、件IMPORTINGfilename=l_file_pathEXCEPTIONSinv_winsys=1no_batch=2selection_cancel=3selection_error=4OTHERS=5.IFsy-subrc=0.wa_tab-file_path=l_file_path.将得到的文件的路径赋给当前行的路径MODIFYi_tabINDEXwa_tab-numerFROMwa_tabTRANSPORTINGfile_path.CLEARl_file_path.ELSE.MESSAGEs000WITH没有选择文件.ENDIF.ENDFORM.f_open_folder4.关于

34、设置字段和列名的子FORM(F_FIELDS)的参数设置:4.1.单列优化宽度当在子FORM(F_BUILD_LAYOUT)里没有指明全局优化列宽的时候,在需要指定优化的字段的属性里指定下列属性就可以单列优化了,wa_fieldcat-col_opt=X.4.2.单列求和或者取消求和,添加属性wa_fieldcat-do_sum=X.求和wa_fieldcat-no_sum=X.取消求和如果此时在子FORM(F_BUILD_LAYOUT)里添加下列属性,则求和后的行就会在第一行出现:i_layout-totals_bef =X.4.3.对其方式wa_fieldcat-just=L.左对齐wa_

35、fieldcat-just=C.居中对齐wa_fieldcat-just=R.右对齐当然,在不指明对其方式的前提下,ABAP的各种数据类型优默认的对其方式,其中字符串是默认为左对齐,而货币、数量默认为右对齐;4.4.作为图标输出1 、首先在开始包含进一个包括,如下:包含图标等在内的一些信息INCLUDE .2 、然后在内表中定义一个代表图标的字段(这里如ICON_FOLDER),在整理数据的时候,需要将代表图标的代码赋给给字段,如下图标wa_banfn-icon_folder=icon_object_folder.3 、接着在子FORM(F_FIELDS)里给需要图标显示的列添加下列属性:v_

36、pos=v_pos+1.wa_fieldcat-col_pos=v_pos.wa_fieldcat-fieldname=ICON_FOLDER.wa_fieldcat-scrtext_l=ICON.wa_fieldcat-icon=X.图标wa_fieldcat-hotspot=X.APPENDwa_fieldcatTOi_fieldcat.CLEARwa_fieldcat.这样图标就可以在ALV界面中显示了,其中添加“热点”的目的是为了当用户点击该图标的时候,可以触发一系列的操作,如文件的选择等等;注意:图标的名称用事务码“ICON”进入后左边第二列就是图标代码,根据需要进行选择;4.5.固

37、定列和关键列两者都可以使具有该属性的列固定不滚动,但是前者不改变该列的颜色,而后者会将该列的颜色弄成一色,不容易确认,但它具有其他的功能,代码如下:wa_fieldcat-fix_column=X.固定列wa_fieldcat-key=X.关键列4.6.列的字符宽度可以明显地指明该列的输出宽度,属性代码如下:wa_fieldcat-outputlen= 10 . 输出宽度列抬头的工具提示,在列的属性添加下列参数,当用户将鼠标放到列名上时,可以显示“提示”2字,代码如下:wa_fieldcat-tooltip=提示.5.单元格的F1、F4帮助:5.1.F1帮助:1 、在子FORM(F_FIELDS)里列的属性添加“数据元素”这一属性,代码如下:wa_fieldcat-rollname=PS_PSPID.指定数据元素就可以在ALV的显示界面将鼠标放到该字段的位置后按F1会弹出该字段的说明;2 、指定数据元素之后,可以不指明字段的描述(如SCRTEXT_L、SCRTEXT_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号