*&---------------------------------------------------------------------*
*& Form FRM_ALV_USER_COMMAN
*&---------------------------------------------------------------------*
FORM frm_alv_user_command USING p_ucomm TYPE sy-ucomm
p_rs_selfield TYPE slis_selfield.
CASE p_ucomm.
WHEN '&IC1' . " 判断用户的动作
"读取用户点击的当前行的一行内容
READ TABLE i_tab INTO wa_tab INDEX p_rs_selfield-tabindex .
IF p_rs_selfield-fieldname EQ 'CITYFROM'.
"判断用户点击的是哪一列
IF NOT wa_tab-cityfrom IS INITIAL .
PERFORM frm_show_detail USING p_rs_selfield . " 显示明细
ENDIF.
ELSEIF p_rs_selfield-fieldname EQ 'TCODE' .
IF NOT wa_tab-tcode IS INITIAL .
PERFORM frm_call_tran USING p_rs_selfield . " 调用其他事务
ENDIF .
ELSEIF p_rs_selfield-fieldname EQ 'ICON_FOLDER' .
PERFORM frm_open_folder USING p_rs_selfield . " 打开文件
ENDIF.
CLEAR wa_tab.
WHEN '&SAVE_DATA' .
PERFORM frm_save_data . " 保存数据
WHEN 'PRINT' .
PERFORM frm_print_data. " 打印数据
WHEN 'EXCEL' .
PERFORM frm_export . " 导出数据
&--------------------------------------------------------------------- *& Form FRM_ALV_USER_COMMAND &--------------------------------------------------------------------- FORM frm_alv_user_command USING p_ucomm TYPE sy-ucomm p_rs_selfield TYPE slis_selfield . CASE p_ucomm.
WHEN '&IC1' . "判断用户的动作
"读取用户点击的当前行的一行内容
READ TABLE i_tab INTO wa_tab INDEX p_rs_selfield-tabindex .
IF p_rs_selfield-fieldname EQ 'MATNR'. " 判断用户点击的是哪一列
IF NOT wa_tab-matnr IS INITIAL .
………
ENDIF.
ELSEIF p_rs_selfield-fieldname EQ 'TCODE' .
IF NOT wa_tab-tcode IS INITIAL .
PERFORM frm_call_tran USING p_rs_selfield. " 调用其他事务
ENDIF .
ENDIF.
CLEAR wa_tab.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PA_UCOMM text
* -->PS_SELFIELD text
*----------------------------------------------------------------------*
FORM frm_alv_user_command USING pa_ucomm TYPE sy-ucomm
ps_selfield TYPE slis_selfield.
CASE pa_ucomm. WHEN ‘&IC1’. "双击 pa_ucomm = ‘&ETA’. "查看明细 ENDCASE.
ENDFORM. " FRM_ALV_USER_COMMAND
3.3 调用其他事务
*&---------------------------------------------------------------------*
*& Form frm_alv_call_tran
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_RS_SELFIELD text
*----------------------------------------------------------------------*
FORM frm_alv_call_tran USING p_rs_selfield TYPE slis_selfield .
SET PARAMETER ID ‘LIB’ FIELD p_rs_selfield-value.
CALL TRANSACTION ‘SE37’ AND SKIP FIRST SCREEN.
ENDFORM. " frm_alv_call_tran
其中,”LIB“是指:参数ID(PARAMETER ID)。
查找方法:
01). 用一个事务码进入屏幕界面,在输入框内按 F1;
02). 在弹出来的界面中点击”技术信息”按钮,在字段数据的最后一行,即为参数ID;
“SE37″ 是指我们要调用的事务代码,AND SKIP FIRST SCREEN 表示跳过第一屏屏幕;
*&---------------------------------------------------------------------*
*& Form frm_html_top_of_page
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_CL_DD text
*----------------------------------------------------------------------*
FORM frm_html_top_of_page USING p_cl_dd TYPE REF TO cl_dd_document.
*&---------------------------------------------------------------------*
*& Form frm_html_top_of_page
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_html_top_of_page USING p_cl_dd TYPE REF TO cl_dd_document.
" 定义登录用户的描述 DATA: l_name TYPE string , name_first LIKE adrp-name_first , name_last LIKE adrp-name_last . " 定义登录日期 DATA: l_date TYPE string .
" 定义缓冲区变量 DATA: m_p TYPE i , m_buffer TYPE string .
" 得到登录用户的描述 SELECT SINGLE adrp~name_first adrp~name_last INTO (name_first,name_last) FROM adrp INNER JOIN usr21 ON adrp~persnumber = usr21~persnumber WHERE usr21~bname = sy-uname .
* Header table for top of page
TYPES: BEGIN OF slis_listheader,
typ(1) TYPE C, " H = Header, S = Selection, A = Action
key(20) TYPE C,
info TYPE slis_entry,
END OF slis_listheader.
TYPES: slis_t_listheader TYPE slis_listheader OCCURS 1.
02). I_LOGO(可选):图片/Logo 的 Object ID
03). I_END_OF_LIST_GRID(可选):用于页脚的信息
04). I_ALV_FORM(可选):是否用于 ALV 的FORM中,默认为:Space
接下来,看下示例:
*&---------------------------------------------------------------------*
*& Form frm_top_of_page
*&---------------------------------------------------------------------*
* ALV 标题
*----------------------------------------------------------------------*
FORM frm_top_of_page.
DATA: i_header TYPE slis_t_listheader, wa_header TYPE slis_listheader.
定义登录用户的描述 DATA: l_name TYPE string , name_first LIKE adrp-name_first , name_last LIKE adrp-name_last .
定义登录日期 DATA: l_date TYPE string .
得到登录用户的描述 SELECT SINGLE adrp~name_first adrp~name_last INTO (name_first,name_last) FROM adrp INNER JOIN usr21 ON adrp~persnumber = usr21~persnumber WHERE usr21~bname = sy-uname .
IF sy-subrc = 0 . CONCATENATE name_last name_first INTO l_name . ELSE . l_name = sy-uname . ENDIF.
CLEAR name_first. CLEAR name_last.
拼接制表日期 CONCATENATE sy-datum+0(4) ‘.’ sy-datum+4(2) ‘.’ sy-datum+6(2) INTO l_date.
CONCATENATE ‘制表人:’ l_name INTO l_name . CONCATENATE ‘制表日期:’ l_date INTO l_date .
* 1) Logos & wallpapers can be found in table BDS_CONN05
* 2) Transaction OAER can be used to create PICTURES.
* Run transaction OAER with class Class type = OT,
* and Object key with whatever name you want to create. In the
* next screen, right clicking on screen and import
Steps for uploading Logo :-:
1. Goto the transaction OAER
2. Enter the class name as ‘PICTURES’
3. Enter the class type as ‘OT’
4. Enter the object key as the name of the logo you wish to give
5. Execute
6. Then in the new screen select Standard doc. types in bottom window
Click on the Screen icon
Now, it will ask for the file path where you have to upload the logo
7. Now you can use this logo in REUSE_ALV_COMMENTARY_WRITE
or
Import Logo and Background Picture for Reporting
In this step, you can import a customer-specific logo and a background picture into the R/3 System.
These will be displayed in the header area of reports in HR Funds and Position Management.
From the SPRO:
HR Funds and Position Management –> Dialog Control –> Customize Reporting Interface –> Import Logo and Background Picture for Reporting.
Activities
1. Enter the Name of your logo/background picture as an object key in the initial screen.
2. Make sure that the class name is PICTURES, and the class type is OT.
3. Choose Execute.
4. Double-click the document type Picture on the Create tab page.
A dialog box will appear in which you can enter the path in which the logo/background picture can be found.
5. Enter the path and choose Open. The logo will be uploaded into the current R/3 System.
If the logo/background picture is to be transported into other systems as well, choose Transport.
6. Return to the initial screen and repeat the procedure after having entered the Name of your background picture as an object key.
Please note that the logo/background picture can only be displayed in ALV-based reports with an HTML header.
Manually programmed reports such as business distribution plans are not based on the ALV.
If you have selected several initial objects, ALV-based reports in HR Funds and Position Management will automatically use a hiearchical-sequential display.
A logo is not displayed here either. Note also that the logo cannot be printed (see print preview in program).
Make sure that the logo does not exceed a height of 100 pixels because it would mean that the header of the report will be scrollable.
TYPES: BEGIN OF slis_sortinfo_alv,
spos LIKE alvdynp-sortpos, “ 排序顺序序号
fieldname TYPE slis_fieldname, “ 排序内表字段名称
tabname TYPE slis_fieldname, “ 排序内表名称
up LIKE alvdynp-sortup, “ 升序
down LIKE alvdynp-sortdown, “ 降序
group LIKE alvdynp-grouplevel,“
subtot LIKE alvdynp-subtotals, “ 输出小计
comp(1) TYPE c,
expa(1) TYPE c,
obligatory(1) TYPE c,
ENF OF slis_sortinfo_alv.
示例代码如下:
* 定义排序变量
DATA: wa_sort_lvc TYPE lvc_s_sort ,
it_sort_lvc TYPE lvc_t_sort .
*--- Structure for event handling
TYPES: BEGIN OF slis_alv_event,
name(30),
form(30),
END OF slis_alv_event.
TYPES: slis_t_event TYPE slis_alv_event OCCURS 0.
&--------------------------------------------------------------------- *& Form FRM_GET_EVENT &--------------------------------------------------------------------- FORM frm_get_event.
DATA formname_top_of_page TYPE slis_formname VALUE ‘FRM_TOP_OF_PAGE’. DATA lw_events TYPE LINE OF slis_t_event.
CALL FUNCTION ‘REUSE_ALV_EVENTS_GET’ EXPORTING i_list_type = 0 IMPORTING et_events = gt_events EXCEPTIONS list_type_wrong = 1 OTHERS = 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.
修改TOP_OF_PAGE以加入表头,设置处理子程序为’FRM_TOP_OF_PAGE’ CLEAR gv_index. CLEAR lw_events. READ TABLE gt_events INTO lw_events WITH KEY name = slis_ev_top_of_page.
IF sy-subrc = 0.
gv_index = sy-tabix. MOVE ‘FRM_TOP_OF_PAGE’ TO lw_events-form. MODIFY gt_events FROM lw_events INDEX gv_index.
ELSE.
lw_events-form = ‘FRM_TOP_OF_PAGE’. lw_events-name = slis_ev_top_of_page. APPEND lw_events TO gt_events.
ENDIF.
lw_events-name = ‘CALLER_EXIT’. lw_events-form = ‘FRM_BUTTON’. APPEND lw_events TO gt_events.
ENDFORM. " FRM_GET_EVENT
&--------------------------------------------------------------------- *& Form frm_button &---------------------------------------------------------------------
text
---------------------------------------------------------------------- FORM frm_button USING e_grid TYPE slis_data_caller_exit.