abap

  • 格式:doc
  • 大小:229.00 KB
  • 文档页数:17

ALV知识一、AL V相关概念ALV――ABAP LIST VIEWER,这里我姑且称之为ABAP表单浏览器,用它可以标准化,简单化R/3系统中的表单,它可以提供给用户一个统一的表单格式以及用户接口。

ALV即能显示简单表单(SIMPLE LIST)又能显示有序表单(SEQUENTIAL LIST):●简单表单(SIMPLE LIST)包含一系列不分层次的(NON-HIERARCHICAL),用户自定义的列。

●层次表(即有序表SEQUENTIAL LIST)包含列表头以及它的子行,一个列表头的关键行能带出它下面的一些列项目(我们自己理解的时候可以想到BOM表的层次结构)。

●我们还可以在简单表单以及关联表单中显示小计和总计二、结合一个具体的实例来看AL V的功能首先我们看下图中的这个ALV的布局(这是一般ALV程序表单的典型布局):根据上面对ALV的直观形象,下面讲屏幕上的区域划分成几块,分别来解释它的作用:1.快捷工具栏(如下图)细节按钮,你首先必须选中列表中的一行,然后点击它的话,就会弹出一个窗口,显示选中行的细节内容。

(另外:你双击你要选择的行,也可以显示细节)按升序排列,首先选中一列,然后再点击它,就可以看到该列是按照升序重新排列。

按降序排列,首先选中一列,然后再点击它,就可以看到该列是按照降序重新排列。

设置过滤器,通过设置它可以达到筛选的目的,以列名称作为筛选的筛选标准,填入过滤器相应的标准值,然后就可以筛选出满足自己条件的记录。

打印预览,点击它之后,就可以预览一下将要打印内容的布局情况。

Microsoft Excel,调用MS的Excel到当前ALV的列表显示区域。

(前提:必须安装了MS的Excel)字处理,字处理的相关设置。

本地文件,将当前表单存储到本地机器上,有几种供选择的存储格式。

邮件收件人,给系统内用户发邮件图形,点击它可以根据表单情况绘制相关图表。

更改布局,点击它可以对表单中的列项目排列次序的互换,删减等。

选择布局,从以及保存的布局中选择自己满意的布局。

保存布局,对于自己满意的布局,可以通过点击它来将布局保存起来。

2.表单标题区这个区域主要是用来显示一些抬头信息(总揽信息),类似于WORD中的页眉。

我们在使用的时候根据需要来进行相关填写。

3.表单显示区这个区域主要使用来显示我们通过代码写筛选出来的数据,相关的操作在下面的程序编写部分详细介绍。

三、程序的编写1.在我们写ALV程序的时候,有一个类型组是肯定要用到的:TYPE-POOLS:SLIS.在这个类型组中有很多ALV的自定义数据类型以及结构化数据类型(通过TYPE来定义的),我们在写ALV表单的时候需要调用的。

我们常用的几个有(蓝色部分):data: i_fieldcat_alv type slis_t_fieldcat_alv with header line.“用来存储我们将要在表单显示区域显示出来的表单的列名,每个列名对应的字段名以及列表头其他相关属性信息的数据类型i_layout type slis_layout_alv. “ALV的格式i_list_comments type slis_t_listheader.“用来填充表单标题区域的数据类型“下面这三个数据类型的使用视情况而定i_events type slis_t_event,i_event_exit type slis_t_event_exit,i_excluding type slis_t_extab.2.写一个ALV程序的基本流程(主要包括ALV相关的那部分,后面会附上一个ALV源程序的代码):第一步:定义将要用到的表,即TALBES定义部分,然后定义TYPE-POOLS: SLIS.第二步:定义“1”中提到的这些数据类型或者内表的实体对象第三步:定义一些需要用到的变量,比如我们常定义的有:Data:w_repid like sy-repid,“ABAP程序,我们一般取当前程序//w_callback_ucomm type slis_formname, "字符型,功能w_print type slis_print_alv, "类型组w_layout type slis_layout_alv, "类型组w_html_top_of_page type slis_formname, "字符型w_fieldcat_alv like line of i_fieldcat_alv, “从上面的数据结构类型引用过来的 w_excluding like line of i_excluding, “同上w_events like line of i_events, “同上w_event_exit like line of i_event_exit, “同上w_list_comments like line of i_list_comments.“同上第四步:定义自己的选择屏幕第五步:定义INITIALIZA TION部分,在这个部分往往要指定w_repid的值,w_repid = sy-repid。

第六步:start-of-selection部分○1用一个子函数完成对ALV表单标题区域的赋值(i_list_comments)。

○2用一个子函数完成自己所需要数据的抓取○3用一个子函数完成要显示列表的列名行(第一行)的相关赋值(i_fieldcat_alv)以及设置○4用一个子函数完成输出格式的设置(i_layout),比如双击一条记录是否弹出对话框啊?是用哪个功能键触发等等○5用一个子函数FORM DISPLAY_DATA来显示上面我们已经分别封装好的数据,需要调用两个常用的FUNCTION MODULE:FUNCTION 'REUSE_ALV_GRID_DISPLAY' “用来显示表单数据FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' “用来显示表单标题附件:示例程序源代码*----------------------------------------------------------------------* Program: ZZ_ALV_REPORT_STUB* Author : Clayton Mergen* Date :** Purpose: Report using ALV function** Notes:* 1) Logos & wallpapers can be found in table BDS_CONN05* with class = PICTURES** 2) Transaction OAER can be used to create PICTURES.* Run transaction OAER with class name = PICTURES, Class type = OT,* and Object key with whatever name you want to create. In the* next screen, right clicking on screen and import**----------------------------------------------------------------------* Revisions*----------------------------------------------------------------------* Name :* Date :* Comments:*---------------------------------------------------------------------- report zflex004no standard page headingline-size 200line-count 65message-id zz.*--------------------------------* Tables*--------------------------------tables:ekpo,mara,trdir.*--------------------------------* Global Types*--------------------------------type-pools: slis.*--------------------------------* Global Internal Tables*--------------------------------data:i_fieldcat_alv type slis_t_fieldcat_alv,i_events type slis_t_event,i_event_exit type slis_t_event_exit,i_list_comments type slis_t_listheader,i_excluding type slis_t_extab.* Display datadata: begin of i_data occurs 0,matnr like mara-matnr,mtart like mara-mtart,end of i_data.*--------------------------------* Global Variables*--------------------------------data:w_variant like disvariant, "显示变式结构wx_variant like disvariant,w_variant_save(1) type c,w_exit(1) type c,w_repid like sy-repid, "abap程序,当前主程序 w_user_specific(1) type c,w_callback_ucomm type slis_formname, "字符型w_print type slis_print_alv, "类型组w_layout type slis_layout_alv, "类型组w_html_top_of_page type slis_formname, "字符型w_fieldcat_alv like line of i_fieldcat_alv,w_excluding like line of i_excluding,w_events like line of i_events,w_event_exit like line of i_event_exit,w_list_comments like line of i_list_comments.*--------------------------------* Global Constants*--------------------------------*constants:* Selection Screen*--------------------------------selection-screen begin of block blk_criteria with frame title text-f01. select-options:s_name for trdir-name. "程序名selection-screen end of block blk_criteria.selection-screen begin of block blk_params with frame title text-f02. parameters:p_vari like disvariant-variant. "格式selection-screen skip 1.parameters:p_grid radiobutton group rb01 default 'X',p_html as checkbox.selection-screen skip 1.parameters:p_list radiobutton group rb01.selection-screen end of block blk_params.*--------------------------------* Initialization*--------------------------------initialization.perform init_variant. "初始化perform variant_default using p_vari.clear: s_name[].s_name-sign = 'I'.s_name-option = 'CP'.s_name-low = 'Z*'.append s_name.*--------------------------------* At Selection Screen PBO*--------------------------------at selection-screen output.*----------------------------------* At Selection Screen Value Request*----------------------------------at selection-screen on value-request for p_vari.perform variant_f4 using p_vari. "不管* At Selection Screen*--------------------------------at selection-screen.perform variant_fill. "不管*--------------------------------* Start of Selection*--------------------------------start-of-selection.perform get_data. "从表mara中取相应字段到i_data end-of-selection.perform fieldcat_build.perform event_build.perform event_exit_build.perform exclude_build.perform print_build.perform layout_build.perform display_data.*--------------------------------* Top of Page*--------------------------------top-of-page.*--------------------------------* Top of Page During Line Sel*--------------------------------top-of-page during line-selection.*--------------------------------* At User Command*--------------------------------at user-command.*--------------------------------* At Line Selection*--------------------------------at line-selection.*--------------------------------* Macros*--------------------------------define skip_1.write: /001 sy-vline,at sy-linsz sy-vline.end-of-definition.*---------------------------------------------------------------------- * Forms*---------------------------------------------------------------------- *&---------------------------------------------------------------------* *& Form variant_f4*&---------------------------------------------------------------------* form variant_f4 using p_variant.call function 'LVC_VARIANT_F4'exportingis_variant = w_varianti_save = w_variant_saveimportinge_exit = w_exites_variant = wx_variantexceptionsnot_found = 1program_error = 2others = 3.if sy-subrc <> 0.message i000(zz) with text-g01.endif.if w_exit is initial.w_variant-variant = wx_variant-variant.p_variant = wx_variant-variant.endif.endform.*&---------------------------------------------------------------------* *& Form init_variant*&---------------------------------------------------------------------* form init_variant.clear: w_variant.w_repid = sy-repid.w_variant-report = w_repid.w_variant-username = sy-uname.w_variant_save = 'A'. "All typesendform.*&---------------------------------------------------------------------* *& Form variant_default*&---------------------------------------------------------------------* form variant_default using p_variant.wx_variant = w_variant.if not p_variant is initial.wx_variant-variant = p_variant.endif.call function 'LVC_VARIANT_DEFAULT_GET'exportingi_save = w_variant_savechangingcs_variant = wx_variantexceptionswrong_input = 1not_found = 2program_error = 3others = 4.case sy-subrc.when 0.p_variant = wx_variant-variant.when 2.clear: p_variant.endcase.endform.*&---------------------------------------------------------------------* *& Form variant_fill*&---------------------------------------------------------------------* form variant_fill.clear: w_variant.if p_vari is initial.w_variant-variant = 'STANDARD'.w_variant-report = w_repid.else.w_variant-variant = p_vari.w_variant-report = w_repid.call function 'LVC_VARIANT_EXISTENCE_CHECK'exportingi_save = w_variant_savechangingcs_variant = w_variantexceptionsothers = 01.if sy-subrc ne 0.message i000(zz) with text-g02.endif.endif.endform.*&---------------------------------------------------------------------* *& Form fieldcat_build*&---------------------------------------------------------------------* form fieldcat_build.call function 'REUSE_ALV_FIELDCATALOG_MERGE'exportingi_program_name = w_repid* i_structure_name = 'TRDIR'i_internal_tabname = 'I_DATA'i_inclname = w_repidchangingct_fieldcat = i_fieldcat_alv.* Modify displayed fieldsloop at i_fieldcat_alv into w_fieldcat_alv.case w_fieldcat_alv-fieldname.when 'NAME'.w_fieldcat_alv-hotspot = 'X'.when 'MYFIELD'.w_fieldcat_alv-checkbox = 'X'.w_fieldcat_alv-seltext_s = 'MyChkBox'.when others.endcase.modify i_fieldcat_alv from w_fieldcat_alv.endloop.endform.*&---------------------------------------------------------------------* *& Form display_data*&---------------------------------------------------------------------* form display_data.w_callback_ucomm = 'CALLBACK_UCOMM'.case 'X'.when p_grid.if p_html = 'X'.w_html_top_of_page = 'HTML_TOP_OF_PAGE'.endif.call function 'REUSE_ALV_GRID_DISPLAY'exporting* i_background_id = 'SIWB_WALLPAPER'i_background_id = 'SIWB_WALLPAPER'i_callback_program = w_repidi_callback_html_top_of_page = w_html_top_of_page* i_structure_name = 'TRDIR'i_default = 'X'i_save = 'A'is_variant = w_variantis_layout = w_layouti_callback_user_command = w_callback_ucommit_fieldcat = i_fieldcat_alvit_events = i_eventsit_event_exit = i_event_exitit_excluding = i_excludingis_print = w_print* i_screen_start_column = 1* i_screen_start_line = 1* i_screen_end_column = 70* i_screen_end_line = 30tablest_outtab = i_data.when p_list.call function 'REUSE_ALV_LIST_DISPLAY'exportingi_background_id = 'ALV_BACKGROUND'i_callback_program = w_repidi_default = 'X'i_save = 'A'is_variant = w_variantis_layout = w_layouti_callback_user_command = w_callback_ucommit_fieldcat = i_fieldcat_alvit_events = i_eventsit_event_exit = i_event_exitis_print = w_printtablest_outtab = i_data.endcase.endform.*---------------------------------------------------------------------* * FORM user_command * *---------------------------------------------------------------------* form callback_ucomm using r_ucomm like sy-ucommrs_selfield type slis_selfield.message i000(zz) with r_ucomm.case r_ucomm.when '&IC1'.set parameter id 'RID' field rs_selfield-value.call transaction 'SE38'.when others.endcase.endform.*&---------------------------------------------------------------------* *& Form get_data*&---------------------------------------------------------------------* form get_data.select * from marainto corresponding fields of table i_data.endform.*---------------------------------------------------------------------* * FORM ALV_TOP_OF_PAGE * *---------------------------------------------------------------------* form alv_top_of_page.clear: i_list_comments[].w_list_comments-typ = 'H'. "H=Header, S=Selection, A=Actionw_list_comments-key = ''.w_list_comments-info = 'Info 1'.append w_list_comments to i_list_comments.w_list_comments-typ = 'A'. " H = Header, S = Selection, A = Actionw_list_comments-key = ''.w_list_comments-info = 'Begin of list'.append w_list_comments to i_list_comments.call function 'REUSE_ALV_COMMENTARY_WRITE'exportingi_logo = 'ENJOYSAP_LOGO'it_list_commentary = i_list_comments.endform.*&---------------------------------------------------------------------* *& Form event_build*&---------------------------------------------------------------------* form event_build.call function 'REUSE_ALV_EVENTS_GET'exportingi_list_type = 0importinget_events = i_events.read table i_eventswith key name = slis_ev_top_of_pageinto w_events.if sy-subrc = 0.move 'ALV_TOP_OF_PAGE' to w_events-form.modify i_events from w_events index sy-tabix.endif.read table i_eventswith key name = slis_ev_end_of_listinto w_events.if sy-subrc = 0.move 'ALV_END_OF_LIST' to w_events-form.modify i_events from w_events index sy-tabix.endif.read table i_eventswith key name = slis_ev_end_of_pageinto w_events.if sy-subrc = 0.move 'ALV_END_OF_PAGE' to w_events-form.modify i_events from w_events index sy-tabix.endif.endform.*---------------------------------------------------------------------* * FORM alv_end_of_list * *---------------------------------------------------------------------* form alv_end_of_list.clear: i_list_comments[].w_list_comments-typ = 'A'. "H = Header, S = Selection, A = Actionw_list_comments-key = ''.w_list_comments-info = 'End of list'.append w_list_comments to i_list_comments.call function 'REUSE_ALV_COMMENTARY_WRITE'exportingit_list_commentary = i_list_commentsi_logo = 'ZMYOBJECTKEY'i_end_of_list_grid = 'X'.endform.*---------------------------------------------------------------------* * FORM alv_end_of_page * *---------------------------------------------------------------------* form alv_end_of_page.endform.*&---------------------------------------------------------------------* *& Form print_build*&---------------------------------------------------------------------* form print_build.w_print-no_print_listinfos = 'X'.endform.*&---------------------------------------------------------------------* *& Form layout_build*&---------------------------------------------------------------------* form layout_build.w_layout-zebra = 'X'.w_layout-no_vline = 'X'.w_layout-colwidth_optimize = 'X'.w_layout-detail_popup = 'X'.w_layout-detail_initial_lines = 'X'.w_layout-detail_titlebar = 'Detail Title Bar'.endform.*&---------------------------------------------------------------------* *& Form event_exit_build*&---------------------------------------------------------------------* form event_exit_build.clear: i_event_exit[].* Pickw_event_exit-ucomm = '&ETA'.w_event_exit-before = ' '.w_event_exit-after = 'X'.append w_event_exit to i_event_exit.endform.*---------------------------------------------------------------------* * FORM HTML_TOP_OF_PAGE * *---------------------------------------------------------------------* form html_top_of_page using r_top type ref to cl_dd_document.data:text type sdydo_text_element,s_table type ref to cl_dd_table_element,col_key type ref to cl_dd_area,col_info type ref to cl_dd_area,a_logo type ref to cl_dd_area.* Split TOP-Documentcall method r_top->vertical_splitexporting split_area = r_topsplit_width = '30%'importing right_area = a_logo.* Fill TOP-Documentexporting text = 'Example of a Heading'sap_style = 'HEADING'.call method r_top->new_line.call method r_top->new_line.call method r_top->add_tableexporting no_of_columns = 2with_heading = ' 'border = '1'importing table = s_table.call method s_table->add_column importing column = col_key. call method s_table->add_column importing column = col_info.text = 'A key value marked'.call method col_key->add_textexporting text = textsap_emphasis = 'Strong'.call method col_info->add_gap exporting width = 6.text = '600' .call method col_info->add_textexporting text = textsap_style = 'Key'.call method col_info->add_gap exporting width = 3.text = 'Block brick units'.call method col_info->add_text exporting text = text.call method s_table->new_row.text = 'Storage Bin'.call method col_key->add_textexporting text = textsap_emphasis = 'Strong'.call method col_info->add_gap exporting width = 7.text = 'C-A-004'.call method col_info->add_text exporting text = text.text = 'Warehouse number' .call method col_key->add_textexporting text = textsap_emphasis = 'Strong'.call method col_info->add_gap exporting width = 6.text = '200' .call method col_info->add_textexporting text = textsap_style = 'Success'.call method col_info->add_gap exporting width = 3.text = 'marked success'.call method col_info->add_text exporting text = text.call method s_table->new_row.call method r_top->new_line.text = 'This last line is a comment in italics.'.call method r_top->add_textexporting text = textsap_emphasis = 'EMPHASIS'.call method r_top->new_line.call method a_logo->add_picture* exporting picture_id = 'ZZTESTBMP'.exporting picture_id = 'ENJOYSAP_LOGO'.endform.*&---------------------------------------------------------------------* *& Form exclude_build*&---------------------------------------------------------------------* form exclude_build.w_excluding = '&GRAPH'. "Graphicappend w_excluding to i_excluding.endform. " exclude_build。