ALV中自定义按钮

合集下载

ALV自定义按钮

ALV自定义按钮

ALV自定义按钮Demo程序:ZTMP_CL003FM 的ALV需要自己添加按钮的话需要拷贝标准的STATUS状态栏在上面添加按钮。

STATUS 决定了如下图所示的部分。

首先进入T-CODE:SE38,点击如图所示的按钮展开对象的全部清单。

STANDARD_FULLSCREEN就是我们需要拷贝的状态栏。

右键拷贝状态栏。

、拷贝至我们的demo程序。

这时我们的demo程序ZTMP_CL003的GUI状态中就出现了我们拷贝的STATUS.下面的重点就是在这个STATUS里新加一个按钮,并在ALV中调用这个STATUS. 我试着添加一个功能码为&BDC的按钮。

在如图所示的位置添加,直接输入你想要的功能码。

输入完成后双击你设置的功能码就填出如图的窗口。

输入函数文本,信息文本,图标名称。

设置快捷按钮。

点勾即完成按钮的添加,下面就要在ALV中调用这个STATUS了。

调用ALV的FM中添加3个参数分别表示ALV回调程序,调用的FORM,一个是相应按钮一个设置状态。

DA TA g_repid TYPE sy-repid.g_repid = syst-repid.CALL FUNCTION'REUSE_ALV_GRID_DISPLAY'EXPORTING* I_INTERF ACE_CHECK = ' '* I_BYP ASSING_BUFFER = ' '* I_BUFFER_ACTIVE = ' 'i_callback_program = g_repidi_callback_user_command = 'F_USER_COMMAND'i_callback_pf_status_set = 'F_SETSTATUS'* I_CALLBACK_TOP_OF_P AGE = ' '* I_CALLBACK_HTML_TOP_OF_P AGE = ' '。

alv各种设置

alv各种设置

目录1.将得到并整理好的数据以ALV的形式显示出来 (4)1.1.在子FORM(这里如:F_FIELDS)指定需要显示的字段 (4)1.2.在子FORM(这里如:F_BUILD_LAYOUT)里设置ALV的全局属性 (5)1.3.在子FORM(这里如:F_DISPLAY)里将内表中的数据进行显示 (5)1.4.为ALV程序添加表头标题(这里以添加HTML表头标题为主) (6)1.4.1.在显示ALV的函数(REUSE_ALV_GRID_DISPLAY_LVC)里添加一个参数 (6)1.4.2.在子FORM(F_TOP_OF_PAGE)里定义好需要的变量 (6)1.4.3.准备好所需数据,如登录用户的描述、制表日期等 (6)1.4.4.将表头数据输出 (7)2.函数“REUSE_ALV_GRID_DISPLAY_LVC”中输入参数的应用 (8)2.1.排序 (8)2.1.1.在显示ALV的子FORM里定义排序用到的变量 (8)2.1.2.设置好需要排序的字段 (8)2.1.3.在显示ALV的函数的输入参数里添加排序的属性 (9)2.2.隐藏不必要的标准按钮 (9)2.2.1.先在显示ALV的子FORM里定义隐藏按钮用到的变量 (9)2.2.2.得到需要隐藏的标准按钮的“FCODE” (9)2.3.自定义“工具栏” (10)2.3.1.在显示ALV的函数的输入参数里指定自定义按钮的子FORM (10)3.热点链接、用户动作的捕捉、调用其他程序或标准事务程序 (11)3.1.在显示ALV的函数的输入参数里指定捕捉用户动作的子FORM (11)3.2.在“字段和列名”的子FORM(F_FIELDS)里,对需要链接的列添加“热点”属性 (11)3.3.操作代码 (12)3.4.显示具体细节 (13)3.5.调用其他事务 (15)3.6.打开并选择文件: (15)4.关于设置字段和列名的子FORM(F_FIELDS)的参数设置: (16)4.1.单列优化宽度 (16)4.2.单列求和或者取消求和,添加属性 (16)4.3.对其方式 (17)4.4.作为图标输出 (17)4.5.固定列和关键列 (17)4.6.列的字符宽度 (17)5.单元格的F1、F4帮助: (18)5.1.F1帮助: (18)5.2.F4帮助: (18)6.输入并保存、回调修改内表(输入时的小数位错位的问题、指定数据类型、小说位数) (18)7.界面颜色的更改 (20)7.1.更改单元格(字体)的前景、背景颜色 (20)7.2.更改行的颜色和列的颜色: (20)7.3.利用设置字段和列名子的FORM(F_FIELDS)里来设置列的颜色 (21)8.ALV自带的最左端复选框按钮和自定义复选框按钮 (21)8.1.ALV自带的复选框按钮: (21)8.2.自定义复选框按钮 (22)9.按照上传的模板格式导出为本地文件 (22)9.1.定义导出为EXCEL用到的数据变量 (22)9.2.上传模板 (22)9.3.代码 (23)10.为ALV标题添加图片 (28)10.1.上传图片 (28)10.2.在子FORM(F_TOP_OF_PAGE2)里的代码 (28)ALV:SAP LIST VIEW,一种比较美观的报表显示工具ALV用到的函数,目前我们有2个:REUSE_ALV_GRID_DISPLAY、REUSE_ALV_GRID_DISPLAY_LVC;两个函数都可以将数据用ALV的形式显示出来,只是方在一些小的地方有些不同。

ABAP 修改ALV 工具条--添加、移除按钮

ABAP 修改ALV 工具条--添加、移除按钮

ABAP 修改ALV 工具条--添加、移除按钮以下针对于FM:REUSE_ALV_GRID_DISPLAY的ALV,以添加一个按钮为例,修改OO ALV工具条的方式大致相同。

1、创建一个GUI status首先在程序中创建一个工具条,一般是希望在标准工具条基础上进行修改,可以到函数组SALV中copy标准GUI status到自己的程序下,假如copy过来名字改为0100.根据需要,添加自定义按钮、相应ICON和功能码BUTTON1,也可删除某些按钮不需要的按钮,保存激活。

2、在call function REUSE_ALV_GRID_DISPLAY时,传入参数I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS''SET_PF_STATUS'是一个Form的名字,可以任意写,然后在程序中添加'SET_PF_STATUS'这个Form,这其实是PBO过程,代码很简单,如下*&--------------------------------------------------------------------**& Form set_pf_status*&--------------------------------------------------------------------** text*---------------------------------------------------------------------*FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.SET PF-STATUS '0100' .ENDFORM. "set_pf_status其实如果在第一步,没有删除按钮,而又不想显示出来的话,还可以在这个form中写代码滤掉,如下意思是不显示排序的两个按钮。

ooalv自定义按钮、单击、双击、列编辑切换的事件

ooalv自定义按钮、单击、双击、列编辑切换的事件
83.
84.gs_toolbar-function ='B_LIST'."为按钮分配功能码
85.gs_toolbar-quickinfo = '自定义下拉菜单'.
86.gs_toolbar-icon=icon_biw_report_view."为按钮分配图标
87.gs_toolbar-text='下拉菜单'."为按钮分配文本
35.CLASS alv_event_receiver DEFINITION DEFERRED. "声明类对象
36.*----------------------------------------------------------------------*
37.*CLASS alv_event_receiver DEFINITION
127.MESSAGE '请至少选择一行数据区打印!' TYPE 'E'. "E类型消息会转化为A类型,很蛋疼,求破!
128.ELSE.
129.PERFORM frm_print_data."这个没具体写。
130.ENDIF.
131.WHEN 'B_EDIT'.
132.IF grid->is_ready_for_input( ) EQ 0.
66.*&---------------------------------------------------------------------*
67.*Text
68.*----------------------------------------------------------------------*

ALV_GRID添加自定义的按钮和响应命令

ALV_GRID添加自定义的按钮和响应命令

在上面的代码例子里,我们增加了一个常规的按钮和一个含有菜单的按钮.通过把按钮的类型设置为1或者2,我们可以增加一个含有菜单的按钮,在事件menu_button还可以实现子菜单:FORM handle_menu_button USING i_object TYPE REF TO cl_ctmenuI_ucomm TYPE syucomm..CASE i_ucomm.WHEN ‘EXCH’.CALL METHOD i_object->add_functionEXPORTINGFcode = ‘EU’Text = ‘Euro’.CALL METHOD i_object->add_functionEXPORTINGFcode = ‘TRL’Text = ‘Turkish Lira’.ENDCASE.ENDFORM.为了实现这些自定义的按钮的功能,我们使用USER_COMMAND事件来处理.FORM handle_user_command USING i_ucomm TYPE syucomm.DATA lt_selected_rows TYPE lvc_t_rowid.DATA ls_selected_row TYPE lvc_s_roid.CALL METHOD gr_alvgrid->get_selected_rowsIMPORTINGEt_row_no = lt_selected_rows.READ TABLE lt_selected_rows INTO ls_selected_row INDEX 1.If sy-subrc ne 0.MESSAGE S000(su) WITH 'Select a row'(203).ENDIF.CASE i_ucomm.WHEN 'CAR'.READ TABLE gt_list INDEX ls_selected_row-row_id.IF sy-subrc = 0.CALL FUNCTION 'ZDISPLAY_CARRIER_INFO'EXPORTING carrid = gt_list-carridEXCEPTIONS carrier_not_found = 1Oters = 2.ENDIF.WHEN 'EU'.READ TABLE gt_list INDEX ls_selected_row-row_id.IF sy-subrc = 0.CALL FUNCTION 'ZPOPUP_CONV_CURR_ADD_DISPLAY'EXPORTING monun = 'EU'Quant = gt_list-paymentsum.ENDIF.ENDCASE.ENDFORM.我们通过方法get_selected_rows来获取选择的行.功能EXCH有2个子功能,所以我们不需要实现它.为了能显示ALV附加的一些功能,可以在ALV实例创建的时候调用set_toolbar_interactive方法.CALL METHOD gr_alv_grid->set_toolbar_interactive.(二)在alv_lst中加入按钮Add Button to ALV Toolbar with REUSE_ALV_LIST_DISPLAYHow to add button to ALV toolbar using REUSE_ALV_LIST_DISPLAY?In the program which calls ALV using REUSE_ALV_LIST_DISPLAY,I have to add a new button.I saw the demo program BCALV_GRID_08, which is written using ABAP-Controls.In that example, the button is added using TOOLBAR event of cl_gui_alv_grid.Could you help me to implement the same logic using REUSE_ALV_LIST_DISPLAY parameters.you should copy the 'STANDARD' GUI status from program SAPLKKBL using transaction SE90-->Programming SubObjects--> Gui Status.Execute this transaction to get to next screen. select status using checkbox. click on GUI Status -->Copy.Enter your Z program name and the name you what for this status - you can keep it as'STANDARD' to be simple.Then you can edit the new status to add or delete buttons. This will also bring in the standard SAPALV functionality such as sorting/subtotaling etc...When you call 'REUSE_ALV_GRID_DISPLAY' make sure you pass it the new status name.an example of one of mine:call function 'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_callback_program = 'ZSDBOLST_REPORT'i_callback_pf_status_set = 'STANDARD' <---------i_callback_user_command = 'USER_COMMAND'i_structure_name = 'I_BOLACT'i_grid_title = 'BOL Action Report'(031)is_layout = gs_layoutit_fieldcat = gt_fieldcat[]i_save = 'A'is_variant = v_variantTABLESt_outtab = i_bolactEXCEPTIONSprogram_error = 1others = 2.I just tried the same procedure ,but my entire application toolbar disappeared and a lock iconappears next to the application toolbar in my copied pf-status.Could you advice what might have gone wrong ?As identified with the FM's help you can do the following.1). Using SE80 (I think) you can copy a GUI status from one program to another. It mentions whichone in the FM's help.2). Create a form named like so:Code:****************************************************************** Form Set_pf_status* Notes: Called by FM REUSE_ALV_GRID_DISPLAY*****************************************************************FORM set_pf_status USING rt_extab TYPE slis_t_extab.SET PF-STATUS 'ZSTANDARD'.ENDFORM. "Set_pf_statusIn the above case the GUI status copied was named ZSTANDARD and adjusted accordingly, adding and removing the desired buttons. A button was added called '%DELETE'.3). Create the following report:Code:****************************************************************** Form User_command* Notes: Called by FM REUSE_ALV_GRID_DISPLAY* Detects whether the icon/button for* 'Return Tag Deletion' has been pressed. If it has then* detect whether any rows have been highlighted and then* set the delete flag.*****************************************************************FORM user_command USING r_ucomm LIKE sy-ucommrs_selfield TYPE slis_selfield.DATA: li_count TYPE I.IF r_ucomm EQ '%DELETE'.LOOP AT %g00 WHERE mark EQ 'X'.ADD 1 TO li_count.ENDLOOP.IF li_count GT 0.gc_delete_flag = 'X'.r_ucomm = '&F03'. "Back arraowELSE.MESSAGE W000 WITH 'Please highlight the rows to be deleted!'.ENDIF.ENDIF.ENDFORM. "User_commandAs I've added an extra button to indicate which records should be deleted I need to identify a form to be called to process when this button is chosen.Then when you call the ALV function you to specify the following extra details:Code:call function 'REUSE_ALV_GRID_DISPLAY'exporting i_callback_program = gc_repidI_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'I_CALLBACK_USER_COMMAND = 'USER_COMMAND'i_grid_title = lc_grid_titleis_layout = lc_layoutit_fieldcat = gt_fieldcatit_sort = sorti_save = l_saveis_reprep_id = l_bbs_idis_variant = l_varianttables t_outtab = %g00exceptions program_error = 1others = 2.The parameters in capitals are the extra ones that need to be added。

自定义ALV工具条

自定义ALV工具条

⾃定义ALV⼯具条默认输出的ALV已供了很多标准的按钮了:⾃定义ALV⼯具栏有两种⽅式:第⼀处是⾃已创建⼀个GUI Status(通常作法是从SLVC_FULLSCREEN函数组中的拷贝STANDARD_ FULLSCREENGui Status,再在此基础之上新增按钮即可);第⼆种是调⽤系统已定义好的标准ALV⼯具栏;系统已定义好的标准ALV GUI Status 在程序SAPLKKBL中,可以通过SET PF-STATUS … OF PROGRAM语句直接来调⽤,如:SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL'.SAPLKKBL程序中定义的系统标准的ALV GUI Status有以下⼏种:l STDPOPBX_FULLSCREENl STDPOPUP_FULLSCREENl STANDARD_FULLSCREEN 与SLVC_FULLSCREEN函数组中的STANDARD_FULLSCREEN是⼀样的,都是标准的(函数组SA LV中的STANDARDstatus也是标准的)l STDPOPBX_FULLSCREENl STDPOPUP_FULLSCREENl STANDARD_FULLSCR_HRl STDPOPBX_FS_LIGHTl STDPOPUP_FS_LIGHTl STD_LIGHT_FULLSCREEN这些⼯具条中的按钮都已经设置了Function Code,且都是保留字,这些Funcode都已经在ALV Guid控件中实现,不需得新分配Funcod e功能代码,按钮默认功能码:ALV中⾃定义⼯具栏需要通过REUSE_ALV_GRID_DISPLAY函数的I_CALLBACK_PF_STATUS_SET参数,传递设置GUI Status的For m的名称,在此Form使⽤SET PF-STATUS语句来重新定义ALV⼯具栏,该Form接⼝如下:FORM set_pf_status USING rt_extab TYPE slis_t_extabrt_extab是要排除掉的按钮,根据Funcode来排除。

ALV功能总结

ALV功能总结

ALV功能总结一.关于FUNCTION 'REUSE_ALV_GRID_DISPLAY'常用参数说明及用法REPORT Z_ALV_TEST01NO STANDARD PAGE HEADINGMESSAGE-ID ZX.*** Global Data declearINCLUDE Z_ALV_TEST01TOP.INCLUDE Z_ALV_TEST01F01.*** initial dataINITIALIZATION.*** prepare report dataSTART-OF-SELECTION.perform get_data.perform alv_show.*** output reportEND-OF-SELECTION.*&---------------------------------------------------------------------**& Include Z_ALV_TEST01TOP*&---------------------------------------------------------------------*TABLES:MARA,MBEW,EKPO,MAKT.SELECT-OPTIONS:S_MATNR FOR MARA-MATNR.DATA:BEGIN OF IT_MATNR OCCURS 0,BOX TYPE C,"用来控制输出画面左测的可选择该行,如果选中某行,则该栏位值为‘X’ MATKL LIKE MARA-MATKL,MATNR LIKE MARA-MATNR,MTART LIKE MARA-MTART,MAKTX LIKE MAKT-MAKTX,MEINS LIKE MARA-MEINS,MBRSH LIKE MARA-MBRSH,MENGE LIKE EKPO-MENGE,END OF IT_MATNR.TYPES:BEGIN OF WA_MATNR,MATKL LIKE MARA-MATKL,MATNR LIKE MARA-MATNR,MTART LIKE MARA-MTART,MAKTX LIKE MAKT-MAKTX,MEINS LIKE MARA-MEINS,MBRSH LIKE MARA-MBRSH,MENGE LIKE EKPO-MENGE,END OF WA_MATNR.DATA:IT_MATNR_OLD LIKE IT_MATNR OCCURS 0 WITH HEADER LINE.FIELD-SYMBOLS <MATNR> TYPE WA_MATNR.TYPE-POOLS: slis.DATA: it_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,lt_sort TYPE slis_t_sortinfo_alv WITH HEADER LINE,it_events TYPE slis_t_event,lt_event_exit TYPE slis_t_event_exit,ls_event_exit TYPE slis_event_exit,pt_top_of_page TYPE slis_t_listheader,gs_print TYPE slis_print_alv,gs_layout TYPE slis_layout_alv .*&-------------------------------------------------------------------*& Include Z_ALV_TEST01F01*&-------------------------------------------------------------------*& Form get_data*&-------------------------------------------------------------------FORM get_data .SELECT *INTO CORRESPONDING FIELDS OF TABLE IT_MATNRFROM MARAWHERE MATNR IN S_MATNR.LOOP AT IT_MATNR.SELECT SINGLE MENGEINTO IT_MATNR-MENGEFROM EKPOWHERE MATNR = IT_MATNR-MATNR.SELECT SINGLE MAKTXINTO IT_MATNR-MAKTXFROM MAKTWHERE MATNR = IT_MATNR-MATNRAND SPRAS = 'M'.MODIFY IT_MATNR.ENDLOOP.IT_MATNR_OLD[] = IT_MATNR[].ENDFORM. " get_data*&-------------------------------------------------------------------*& Form set_pf_status*&-------------------------------------------------------------------FORM set_pf_status USING rt_extab TYPE slis_t_extab.SET PF-STATUS 'ALV_PF_STATUS'.ENDFORM. "Set_pf_status此FORM的作用是在标准的ALV工具栏上添加自定义的按钮该名称必须和FUNCTION 参数I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'对应起来,即FORM的名称和变量名称要一样.GUI STATUS 'ALV_PF_STATUS'是自己定义的,因为自定义后会把标准的ALV工具栏覆盖,所以还要把标准工具栏复制过来.方法如下:T-CODE :SE90 Program Library-- GUI Statusprogram name:SAPLKKBL GUI Status:STANDARD_FULLSCREEN 标准的ALV工具栏名称,F8运行,选择菜单栏GUI Status---COPY,最后输入你的程序名以及你自定义的GUI Status名,此例即为ALV_PF_STATUS,再添加按钮.*&-------------------------------------------------------------------*& Form ALV_USER_COMMAND*&-------------------------------------------------------------------* -->R_UCOMM text* -->RS_SELFIELD text*----------------------------------------------------------------------*form ALV_USER_COMMAND using r_ucomm like sy-ucommrs_selfield type slis_selfield. "响应ALV点击自定义按钮之后的事件case r_ucomm.when 'EXIT2'. "在set pf-status '9100'.的屏幕状态里面自定义的按钮名称LEAVE TO SCREEN 0.WHEN '&DATA_SAVE'. "修改屏幕字段物料描述MAKTX,此时的&DATA_SAVE是标准GUI的参数,I_CALLBACK_PF_STATUS_SET 不要进行设置LOOP AT IT_MATNR.READ TABLE IT_MATNR_OLD ASSIGNING <MATNR>WITH KEY MATNR = IT_MATNR-MATNR.CHECK IT_MATNR-MAKTX <> <matnr>-MAKTX.UPDATE MAKT SET MAKTX = IT_MATNR-MAKTX WHERE MATNR = IT_MATNR -MATNRAND SPRAS = 'M'.ENDLOOP.WHEN '&IC1'."表示双击CHECK rs_selfield-tabindex > 0.READ TABLE IT_MATNR INDEX rs_selfield-tabindex.SET PARAMETER ID : 'MAT' FIELD IT_MATNR-MATNR.CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.endcase.rs_selfield-fieldname表示双击的字段名,有时候有用.endform. "ALV_USER_COMMAND*&---------------------------------------------------------------------**& Form alv_show*&---------------------------------------------------------------------*FORM alv_show .PERFORM prepare_alv_field. "设置屏幕输出拦位的描述和格式PERFORM eventtab_build USING it_events[]."触发ALV事件,比如TOP_OF_PAGE, ALV_END_OF_LIST, ALV_END_OF_PAGEPERFORM build_sortcat. "设置排序和分类汇总PERFORM build_layout. "设置输出格式PERFORM build_eventexit."设置ALV按钮增强功能CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_callback_program = sy-cprog/SY-REPID "程式名称i_background_id = 'ALV_BACKGROUND'I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'"如果ALV使用自定义的工具栏,如果使用系统工具栏则忽略该行I_CALLBACK_USER_COMMAND = 'ALV_USER_COMMAND' "自定义工具栏的事件* I_CALLBACK_TOP_OF_PAGE = GT_LIST_TOP_OF_PAGE[] I_CALLBACK_HTML_TOP_OF_PAGE = 'ALV_TOP_OF_PAGE'"自定义ALV 表头使用HTML语言对表头的输出格式进行控制,包括输出文字的大小,字体及颜色等,总之在HTML语言中能实现的在这里都能实现.具体实现见FORM ALV_TOP_OF_PAGE 当I_CALLBACK_TOP_OF_PAGE和I_CALLBACK_HTML_TOP_OF_PAGE同时设置时,只有I_CALLBACK_HTML_TOP_OF_PAGE起作用.it_fieldcat = it_fieldcat[]"必须要设置的参数,设定输出目录it_events = it_events[] "如果有事件触发* i_structure_name = 'it_matnr'i_save = 'A' "保存样式is_layout = gs_layout "对输出样式的设定is_print = gs_printit_sort = lt_sort[]"如果有排序和分类汇总,需要该行TABLESt_outtab = it_matnr"ALV输出的内表EXCEPTIONSprogram_error = 1OTHERS = 2.ENDFORM. " alv_show*&---------------------------------------------------------------------**& Form prepare_alv_field*&---------------------------------------------------------------------*FORM prepare_alv_field.DEFINE m_fieldcat.it_fieldcat-fieldname = &1. "输出字段名,注意一定要是大写it_fieldcat-reptext_ddic = &2. "输出显示的文字说明* it_fieldcat-col_pos = &3. "输出的位置,即第几列* it_fieldcat-outputlen = &4. "该显示文字所占的字长it_fieldcat-emphasize = &3. "设置输出的颜色it_fieldcat-edit = &4. "设置为可编辑字段,可进行修改append it_fieldcat.END-OF-DEFINITION.m_fieldcat 'MATKL' '物料群組' 'C110' ''.m_fieldcat 'MATNR' '物料' 'C210' ''.m_fieldcat 'MTART' '物料类型' 'C310' ''.m_fieldcat 'MBRSH' '行业领域' 'C410' ''.m_fieldcat 'MEINS' '基本计量单位' 'C510' ''.m_fieldcat 'MENGE' '数量' 'C610' ''.m_fieldcat 'MAKTX' '物料描述' '' 'X'.ENDFORM. " prepare_alv_field*&---------------------------------------------------------------------**& Form 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 = '<html>'.CALL METHOD cl_dd->html_insertEXPORTINGcontents = m_buffCHANGINGposition = m_p.*m_buff = '<left><H2>配件报废品种汇总表</H2></left>'.m_buff = '<H4>配件报废品种汇总</H4>'.CALL METHOD CL_DD->HTML_INSERTEXPORTINGCONTENTS = m_buffCHANGINGPOSITION = m_p.m_buff = sy-datum.CALL METHOD CL_DD->HTML_INSERTEXPORTINGCONTENTS = m_buffCHANGINGPOSITION = m_p.m_buff = '</html>'.CALL METHOD cl_dd->html_insertEXPORTINGcontents = m_buffCHANGINGposition = m_p.ENDFORM.*&---------------------------------------------------------------------**& Form build_sortcat*&---------------------------------------------------------------------*FORM build_sortcat .CLEAR lt_sort. "此部分用于排序和分类汇总MOVE 1 TO lt_sort-spos.lt_sort-fieldname = 'MATKL'. "表示按照该栏位名来汇总lt_sort-up = 'X'. "表示按照上面栏位升序排列lt_sort-subtot = 'X'.APPEND lt_sort.CLEAR lt_sort.lt_sort-spos = 1.lt_sort-fieldname = 'MATNR'.lt_sort-down = 'X'.lt_sort-subtot = 'X'.APPEND lt_sort.ENDFORM. " build_sortcat*&---------------------------------------------------------------------**& Form build_layout*&---------------------------------------------------------------------*FORM build_layout .gs_layout-totals_text = 'totals'.gs_layout-zebra = 'X'.gs_layout-no_vline = 'X'.gs_layout-colwidth_optimize = 'X'."自动设置宽度gs_layout-detail_popup = 'X'.gs_layout-detail_initial_lines = 'X'.gs_layout-detail_titlebar = 'Detail Title Bar'.gs_layout-box_fieldname = 'BOX'. "用来控制输出画面左测的可选择该行,如果选中某行,则该栏位值为‘X’ENDFORM. " build_layout*&---------------------------------------------------------------------**& Form TOP_OF_PAGE*&---------------------------------------------------------------------*FORM TOP_OF_PAGE.DATA: ls_line TYPE slis_listheader.CLEAR pt_top_of_page[].CLEAR ls_line.ls_line-typ = 'H'.SELECT SINGLE butxt INTO ls_line-infoFROM t001WHERE bukrs = '3000'.APPEND ls_line TO pt_top_of_page.CLEAR ls_line.ls_line-typ = 'S'.ls_line-key = 'TITLE'.ls_line-info = sy-title.APPEND ls_line TO pt_top_of_page.CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'EXPORTINGit_list_commentary = pt_top_of_page.ENDFORM.*---------------------------------------------------------------------** FORM alv_end_of_list **---------------------------------------------------------------------*form alv_end_of_list.data:i_list_comments TYPE slis_t_listheader.data:w_list_comments TYPE slis_listheader.clear: i_list_comments.w_list_comments-typ = 'H'. "H = Header, S = Selection, A = Actionw_list_comments-key = 'TITLE'.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_comments.endform.*---------------------------------------------------------------------** FORM ALV_END_OF_PAGE **---------------------------------------------------------------------*FORM ALV_END_OF_PAGE.ENDFORM.*&---------------------------------------------------------------------**& Form build_eventexit*&---------------------------------------------------------------------*FORM build_eventexit .DATA c_refresh TYPE syucomm VALUE '&REFRESH'.CLEAR ls_event_exit.ls_event_exit-ucomm = c_refresh. " Refreshls_event_exit-after = 'X'.APPEND ls_event_exit TO lt_event_exit.ENDFORM. " build_eventexit二.关于FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'分层显示常用参数说明及用法REPORT Z_DAVID_ALVTEST.TABLES : ekko,ekpo.SELECT-OPTIONS: s_ebeln FOR ekko-ebeln.TYPE-POOLS: slis.DATA: BEGIN OF headertab OCCURS 0,ebeln LIKE ekko-ebeln,bstyp LIKE ekko-bstyp,bsart LIKE ekko-bsart,statu LIKE ekko-statu,expand TYPE xfeld,"用于设置是否可扩展,在这里必须要定义此字段END OF headertab.DATA: BEGIN OF itemtab OCCURS 0,ebeln LIKE ekpo-ebeln,ebelp LIKE ekpo-ebelp,matnr LIKE ekpo-matnr,werks LIKE ekpo-werks,menge LIKE ekpo-menge,netpr LIKE ekpo-netpr,peinh LIKE ekpo-peinh,netwr LIKE ekpo-netwr,END OF itemtab.DATA: ls_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,ls_sort TYPE slis_t_sortinfo_alv WITH HEADER LINE,ls_keyinfo TYPE slis_keyinfo_alv,ls_layout TYPE slis_layout_alv.START-OF-SELECTION.PERFORM readdata.PERFORM build_fieldcat.PERFORM build_sortcat.PERFORM build_layout.PERFORM build_keyinfo.PERFORM display_alv.*&---------------------------------------------------------------------**& Form readdata*&---------------------------------------------------------------------*FORM readdata .SELECT ebeln bstyp bsart statuINTO TABLE headertabFROM ekkoWHERE ebeln IN s_ebeln.IF NOT headertab[] IS INITIAL.SELECT ebeln ebelp matnr werks menge netpr peinh netwrINTO TABLE itemtabFROM ekpoFOR ALL ENTRIES IN headertabWHERE ebeln = headertab-ebeln.ENDIF.ENDFORM. " readdata*&---------------------------------------------------------------------**& Form build_fieldcat*&---------------------------------------------------------------------*FORM build_fieldcat .DEFINE alv_fieldcat.ls_fieldcat-tabname = &1.ls_fieldcat-fieldname = &2.ls_fieldcat-ref_tabname = &3.append ls_fieldcat.END-OF-DEFINITION.alv_fieldcat 'headertab' 'EBELN' 'EKKO'.alv_fieldcat 'headertab' 'BSTYP' 'EKKO'.alv_fieldcat 'headertab' 'BSART' 'EKKO'.alv_fieldcat 'headertab' 'STATU' 'EKKO'.alv_fieldcat 'itemtab' 'EBELN' 'EKPO'.alv_fieldcat 'itemtab' 'EBELP' 'EKPO'.alv_fieldcat 'itemtab' 'MATNR' 'EKPO'.alv_fieldcat 'itemtab' 'WERKS' 'EKPO'.alv_fieldcat 'itemtab' 'MENGE' 'EKPO'.alv_fieldcat 'itemtab' 'NETPR' 'EKPO'.alv_fieldcat 'itemtab' 'PEINH' 'EKPO'.alv_fieldcat 'itemtab' 'NETWR' 'EKPO'.ENDFORM. " build_fieldcat*&---------------------------------------------------------------------**& Form build_sortcat*&---------------------------------------------------------------------*FORM build_sortcat .DEFINE m_sort.ls_sort-tabname = &1.ls_sort-fieldname = &2.ls_sort-up = &3.append ls_sort.END-OF-DEFINITION.m_sort 'headertab' 'EBELN' 'X'.m_sort 'itemtab' 'EBELP' 'X'.ENDFORM. " build_sortcat*&---------------------------------------------------------------------**& Form build_keyinfo*&---------------------------------------------------------------------*FORM build_keyinfo .ls_keyinfo-header01 = 'EBELN'.ls_keyinfo-item01 = 'EBELN'.ls_keyinfo-item02 = 'EBELP'.ENDFORM. " build_keyinfo*&---------------------------------------------------------------------**& Form build_layout*&---------------------------------------------------------------------*FORM build_layout .ls_layout-group_change_edit = 'X'.ls_layout-colwidth_optimize = 'X'.ls_layout-zebra = 'X'.ls_layout-detail_popup = 'X'.ls_layout-get_selinfos = 'X'.ls_layout-expand_fieldname = 'EXPAND'.ENDFORM. " build_layout*&---------------------------------------------------------------------**& Form display_alv*&---------------------------------------------------------------------*FORM display_alv .CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'EXPORTINGi_callback_program = sy-cprog* i_callback_user_command = 'USER_COMMAND'is_layout = ls_layoutit_fieldcat = ls_fieldcat[]it_sort = ls_sort[]i_tabname_header = 'headertab'i_tabname_item = 'itemtab'is_keyinfo = ls_keyinfoi_save = 'A'TABLESt_outtab_header = headertabt_outtab_item = itemtabEXCEPTIONSprogram_error = 1OTHERS = 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.ENDFORM. " display_alv。

在LabVIEW中自定义控件

在LabVIEW中自定义控件
地址:北京市海淀区中关村东路 18 号财智国际大厦 A 座 9 层 电话:(010)82600055 传真:(010)62628056
布尔值为真 时
布尔值为假 时
同样也可以对文本的位置以及控件的底板的大小进行修正,修正之后的控件如下图所示 这样制定出来的控件的特点是: 1, 即使点在图片上,也能更改布尔按钮的状态。 2, 真假布尔值状态下,该图片不能进行变换。
布尔值为真 时
布尔值为假 时
这种方法做出来的控件的特点是: 1, 背景透明,但是实际控件大小为所选择的图片的大小。一般是一个规则的正方形或者长方形。
前文提到为什么要用新式按钮呢? 先来说一下按钮的图片项,每个布尔按钮在自定义模式下,是有若干图片项的,而新式按钮与 系统型的按钮的图片项是不同的。图片项的查看方式为:将控件窗口置为自定义状态下,在控件上 右键选择图片项即可看到该控件所拥有的图片项。
地址:北京市海淀区中关村东路 18 号财智国际大厦 A 座 9 层 电话:(010)82600055 传真:(010)62628056
二 自定义其他控件
在自定义按钮的第三种方法中,我们采取的是复制系统按钮的图片至剪贴板中。我们可以做一 个小的实验,当系统风格变换之后,控件的风格也会变成相应的风格。 那么根据这点提示,我们就可以进行其它控件的自定义了。比如说一直让大家都很头疼的物理通道 控件,长的太丑了,又没有系统风格的。下边就介绍创建系统风格的物理通道控件的步骤。 1, 打开 LabVIEW 开发环境,在前面板上放置下拉列表以及物理通道控件。
地址:北京市海淀区中关村东路 18 号财智国际大厦 A 座 9 层 电话:(010)82600055 传真:(010)62628056
9, 到物理通道控件的自定义模式下,替换组合框按钮的图片。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ALV中自定义按钮
----李宝勋
使用alv的时候,我们经常性需要添加自定义按钮,实现用户单击事件调用,这里介绍通过GUI状态增加按钮。

假如你定义了报表程序ZMMR3009,里面已经编写好了alv的实现函数:如下:CALL FUNCTION'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM=W_REPID"当前程序
I_SAVE=''
IS_LAYOUT=I_LAYOUT"子函数layout_build填充的格式定义
IT_FIELDCAT=I_FIELDCAT_ALV[]"子函数fields填充的各列
TABLES
T_OUTTAB=IT_BLNTD
EXCEPTIONS
PROGRAM_ERROR=1
OTHERS=2.
在你的程序里找到函数:‘REUSE_ALV_GRID_DISPLAY’,双击这个函数名,打开这个函数代码窗口:如下图:
点击工具栏上的‘Dispaly Object List’按钮,打开对象浏览器窗口,如下图:
展开函数组:SLVC_FULLSCREEN,并选中GUI状态下的:STANDARD_FULLSCREEN 项,如下图:
右键单击,选择copy选项,在打开的窗体中设置如下,将alv的gui状态复制到你的程序里,程序:ZMMR3009是的目标程序,状态:STANDARD_004是你新建的gui名称,如下图:
然后点击'Copy',直到弹出的窗体全部消失,然后在你的程序里添加如下代码:
CONSTANTS CNS_PF_STATUS TYPE SLIS_FORMNAME VALUE
'ALV_PF_STATUS'."alv自定义按钮
CONSTANTS CNS_USER_COMMAND TYPE SLIS_FORMNAME VALUE
'ALV_USER_COMMAND'."alv自定义按钮响应事件
上面代码写到alv变量定义的代码下面,下面添加设置GUI状态代码:FORM alv_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS'STANDARD_004'EXCLUDING rt_extab.
ENDFORM.
创建按钮开始:
双击'STANDARD_004',打开如下界面,找个空白的单元格先添加个'|',如下图:
然后在下个单元格输入名称:print,,双击这个名称弹出界面如下图:
确定后,在界面里设置按钮文本和图标等信息,如下图:
确定后,如下图
选择功能键后,确定后,如下图
输入图标文字信息,单击确定,然后点击保存按钮、编译,没有问题后,激活程序。

到此按钮创建完毕。

创建按钮结束。

接下来进行在alv中进行设置自定义按钮,在alv函数:‘REUSE_ALV_GRID_DISPLAY’中添加下面的红色代码部分:
CALL FUNCTION'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM=W_REPID"当前程序
I_CALLBACK_PF_STATUS_SET=CNS_PF_STATUS"设置alv的自定义按钮GUI
I_CALLBACK_USER_COMMAND=CNS_USER_COMMAND"设置alv自定义按钮响应事件
I_SAVE=''
IS_LAYOUT=I_LAYOUT"子函数layout_build填充的格式定义
IT_FIELDCAT=I_FIELDCAT_ALV[]"子函数fields填充的各列
TABLES
T_OUTTAB=IT_BLNTD
EXCEPTIONS
PROGRAM_ERROR=1
OTHERS=2.
编写自定义按钮响应事件:
FORM ALV_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN'PRINT'.
PERFORM PRINT_FORM."调用打印程序
WHEN OTHERS.
...
ENDCASE.
到此alv自定义按钮设置完毕,如果你想添加多个按钮,只需将创建按钮开始到创建按钮结束部分重复就行了,在按钮响应事件里根据你设定的功能代码键值进行不同按钮的区别。

创建好的程序运行如下:。

相关文档
最新文档