【设置
SAP
打印机SET_PRINT_PARAMETERS】
根据画面输入的打印机名称,在打印窗口弹出后,把打印设备自动设置为打印机名称参数对应的打印设备
*&---------------------------------------------------------------------*
*& Form FRM_SET_PRINT_PARAMETERS
*&---------------------------------------------------------------------*
* 報嶞偺僷儔儊乕僞偺愝掕
*----------------------------------------------------------------------*
FORM. FRM_SET_PRINT_PARAMETERS.
DATA: LC_PDEST TYPE PRI_PARAMS-PDEST,
LSTR_TSP03L TYPE TSP03L.
* 在TSP03L设备表中找到打印机名称画面参数P_PRTID对应的打印设备PADEST
* SELECT SINGLE *
* INTO LSTR_TSP03L
* FROM TSP03L
* WHERE LNAME = P_PRTID.
* IF SY-SUBRC EQ 0.
* LC_PDEST = LSTR_TSP03L-PADEST.
* ENDIF.
* 把取道的打印设备PADEST设置到打印窗口项目中
CALL FUNCTION 'SET_PRINT_PARAMETERS'
EXPORTING
DESTINATION = LC_PDEST
IMMEDIATELY = CNS_X
.
ENDFORM. "FRM_SET_PRINT_PARAMETERS
【把内表以CSV文件格式输出】
* 通过文件保存对话框得到需要保存文件的全路径LC_FULLPATH
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
* EXPORTING
CHANGING
FILENAME = LC_FILENAME
PATH = LC_PATH
FULLPATH = LC_FULLPATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
others = 4
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF LC_FILENAME IS NOT INITIAL.
* 这个function是关键所在,可以把一个内表的一行的所有字段用‘;’分割,然后整合成一个string放到目标内表中LITAB_CON_LIST3
CALL FUNCTION 'SAP_CONVERT_TO_CSV_FORMAT'
EXPORTING
I_FIELD_SEPERATOR = CNS_COMMA
TABLES
I_TAB_SAP_DATA = GITAB_LIST3
CHANGING
I_TAB_CONVERTED_DATA = LITAB_CON_LIST3
EXCEPTIONS
CONVERSION_FAILED = 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.
* 可在此目标内表的头部加上必要的header
CONCATENATE TEXT-009 "姩掕壢栚
TEXT-010 "姩掕壢栚柤
TEXT-011 "婡擻椞堟柤
TEXT-012 "慜寧孞墇
TEXT-013 "庁曽嬥妟
TEXT-014 "戄曽嬥妟
TEXT-015 "梻寧孞墇
INTO LC_HEADER
SEPARATED BY CNS_COMMA.
INSERT LC_HEADER INTO LITAB_CON_LIST3 INDEX 1.
* 拿到全路径之后,直接download就ok
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = LC_FULLPATH
TABLES
DATA_TAB = LITAB_CON_LIST3
.
ENDIF.
ENDFORM. " FRM_FILE_DOWNLOAD
【如何动态指派数字字段名assign】
比如有12个字段,HSL01,HSL02,HSL03,HSL04,HSL05一直到HSL12
如果我在选择画面上指定要累加04~08之间的字段,那assign就可以派上用场了
由于和指针的作用类同,所以下面就叫它指针
1.定义指针
FIELD-SYMBOLS <FS> TYPE FAGLFLEXT-HSL01.
2.使用方法:定义另一个lc_p指针数据,通过do循环的sy-index进行一条条遍历
这里比较重要的是要严格控制好选择画面上low值和high值对lc_p指针的界限
DO.
IF S_MONAT-HIGH IS NOT INITIAL.
LC_P = S_MONAT-LOW + SY-INDEX - 1.
IF LC_P > S_MONAT-HIGH.
EXIT.
ENDIF.
ELSE.
LC_P = S_MONAT-LOW.
IF SY-INDEX = 2.
EXIT.
ENDIF.
ENDIF.
WRITE LC_P TO LC_NUM.
PERFORM. FRM_CONVERT_ALPHA_INPUT CHANGING LC_NUM.
CONCATENATE LC_NAME LC_NUM INTO LC_FIELD.
ASSIGN (LC_FIELD) TO <FS>.
IF LSTR_DATA3-DRCRK = CNS_S.
LC_SSUM = LC_SSUM + <FS>.
ENDIF.
IF LSTR_DATA3-DRCRK = CNS_H.
<FS> = <FS> * ( -1 ) .
LC_HSUM = LC_HSUM + <FS>.
ENDIF.
CLEAR LC_FIELD.
ENDDO.
【range table 的最新定义方法】
跟旧版本的ECC的range定义方法不同,现在改用如下的定义方法:
R_RACCT2 TYPE RANGE OF CHAR2,
R_RACCT3 TYPE RANGE OF CHAR3,
R_RACCT31 TYPE RANGE OF CHAR3,
LSTR_RACCT2 LIKE LINE OF R_RACCT2,
LSTR_RACCT3 LIKE LINE OF R_RACCT3,
LSTR_RACCT31 LIKE LINE OF R_RACCT31.
* 儗儞僕42乣49
LSTR_RACCT2-SIGN = CNS_I.
LSTR_RACCT2-OPTION = CNS_BT.
LSTR_RACCT2-LOW = CNS_42.
LSTR_RACCT2-HIGH = CNS_49.
APPEND LSTR_RACCT2 TO R_RACCT2.
* 儗儞僕000乣512
LSTR_RACCT3-SIGN = CNS_I.
LSTR_RACCT3-OPTION = CNS_BT.
LSTR_RACCT3-LOW = CNS_000.
LSTR_RACCT3-HIGH = CNS_512.
APPEND LSTR_RACCT3 TO R_RACCT3.
* 儗儞僕522乣999
LSTR_RACCT31-SIGN = CNS_I.
LSTR_RACCT31-OPTION = CNS_BT.
LSTR_RACCT31-LOW = CNS_522.
LSTR_RACCT31-HIGH = CNS_999.
APPEND LSTR_RACCT31 TO R_RACCT31.
【如何在标准一览画面上加上自己的系统按钮】
可以在top-of-page或者start-of-selection事件中定义:
SET PF-STATUS 'ZS01'.
这里的'ZS01'是自己定义的,双击它进去后就别有洞天了,可以自己定义系统按钮已经各种快捷键
如果要选择标准的一览出力画面,首先进入菜单:
補足->テンプレート调整
在弹出的窗口中选择“一览ステータス”
基本的关于一览的系统按钮都有了
然后自己添加需要的按钮,在GUI模块中,找一个空白的输入框中输入该按钮的parameter ID,这个ID是在程序中用到的。比如这里定义为“DOWN”。
单击回车后有各种关于该按钮 信息的输入框,填充完成就可以了
注意一定要选择一个快捷键,不然添加还是失败的。。
最终添加好后记得激活。
在程序中的使用:
在AT USER-COMMAND.事件中:catch发生的系统信息,如果catch到“DOWN”消息,也就是说刚刚定义的按钮被点击了。
CASE SY-UCOMM.
WHEN 'DOWN'.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = '幚峴妋擣'
TEXT_QUESTION = '堦棗撪梕傪僟僂儞儘乕僪偟傑偡丅傛傠偟偄偱偡偐丠'
TEXT_BUTTON_1 = '偼丂偄'
TEXT_BUTTON_2 = '偄 偄 偊'
DEFAULT_BUTTON = '1'
DISPLAY_CANCEL_BUTTON = ' '
IMPORTING
ANSWER = GC_ANSWER
.
IF GC_ANSWER = '1'.
* 乽偼丂偄乿偑墴壓偝傟偨応崌
PERFORM. FRM_FILE_DOWNLOAD.
ELSE.
* 乽偄偄偊乿偑墴壓偝傟偨応崌
MESSAGE S010.
ENDIF.
ENDCASE.
【如何实现选择第一个radio输入框为灰色非激活,选择第二个radio时该输入框激活】
在定义选择画面时,有2个重要点需要注意:
设定USER-COMMAND 和 MODIF ID
USER-COMMAND表示的意思是:哪个button改变时需要发出事件信息
MODIF ID表示:哪个画面元素需要修改
*----------------------------------------------------------------------*
*SELECTION SCREEN
*----------------------------------------------------------------------*
PARAMETERS:
P_1 TYPE C RADIOBUTTON GROUP DATE
DEFAULT 'X'
USER-COMMAND FLAG, “重要*
P_2 TYPE C RADIOBUTTON GROUP DATE.
SELECTION-SCREEN: BEGIN OF LINE,
COMMENT 6(10) TEXT-001.
PARAMETERS GP_IPDAT TYPE SY-DATUM MODIF ID BL1. “重要*
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN: BEGIN OF LINE,
COMMENT 8(60) TEXT-005, "乽捠忢峏怴乿
END OF LINE,
BEGIN OF LINE,
COMMENT 8(60) TEXT-006, "乽巜掕擔峏怴乿
END OF LINE.
在AT SELECTION-SCREEN中循环SCREEN系统变量,把需要修改的画面元素的属性进行相应的修改
*----------------------------------------------------------------------*
*AT SELECTION-SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF P_1 = CNS_X AND SCREEN-GROUP1 = CNS_BL1.
SCREEN-INPUT = '0'.
CLEAR GP_IPDAT.
ENDIF.
IF P_2 = CNS_X AND SCREEN-GROUP1 = CNS_BL1.
SCREEN-INPUT = '1'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
这里把输入框变成灰色,修改的属性是INPUT,设为0不可输入,设为1则可修改。
其他属性可以在se11的data type中输入screen研究。
【实现ALV的双击事件执行其他任务】
调用function “REUSE_ALV_GRID_DISPLAY”显示ALV,设置I_CALLBACK_USER_COMMAND为'USER_COMMAND',这里的'USER_COMMAND'需要另外定义一个form来接受双击事件。
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_USER_COMMAND = 'USER_COMMAND' * 重要
I_BACKGROUND_ID = 'SIWB_WALLPAPER'
IS_LAYOUT = L_WA_LAYOUT
IT_FIELDCAT = ITAB_FIELDCAT
I_DEFAULT = 'X'
I_SAVE = 'A'
IT_EVENTS = I_EVENTS
IT_EVENT_EXIT = I_EVENT_EXIT
TABLES
T_OUTTAB = ITAB_BSIK
EXCEPTIONS
PROGRAM_ERROR = 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.
ENDFORM. " FRM_ALV_REPORT
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
FORM. USER_COMMAND USING UCOMM LIKE SY-UCOMM
SELFIELD TYPE SLIS_SELFIELD.
IF UCOMM = '&IC1'. * 双击事件的ASCII码是'&IC1'
READ TABLE ITAB_BSIK INTO STR_BSIK INDEX SELFIELD-TABINDEX. *重要。。
*双击的当前行为SELFIELD-TABINDEX
*可以通过判断SELFIELD-TABINDEX不为空来决定下面的步骤是否进行。
* CHECK SY-SUBRC = 0.
* MESSAGE STR_BSIK-BUDAT TYPE 'I'.
SET PARAMETER ID: 'BLN' FIELD STR_BSIK-BELNR,
'BUK' FIELD P_BUKRS,
'GJR' FIELD STR_BSIK-BUDAT.
CALL TRANSACTION 'FB03'.
ENDIF.
ENDFORM. "USER_COMMAND
根据画面输入的打印机名称,在打印窗口弹出后,把打印设备自动设置为打印机名称参数对应的打印设备
*&---------------------------------------------------------------------*
*& Form FRM_SET_PRINT_PARAMETERS
*&---------------------------------------------------------------------*
* 報嶞偺僷儔儊乕僞偺愝掕
*----------------------------------------------------------------------*
FORM. FRM_SET_PRINT_PARAMETERS.
DATA: LC_PDEST TYPE PRI_PARAMS-PDEST,
LSTR_TSP03L TYPE TSP03L.
* 在TSP03L设备表中找到打印机名称画面参数P_PRTID对应的打印设备PADEST
* SELECT SINGLE *
* INTO LSTR_TSP03L
* FROM TSP03L
* WHERE LNAME = P_PRTID.
* IF SY-SUBRC EQ 0.
* LC_PDEST = LSTR_TSP03L-PADEST.
* ENDIF.
* 把取道的打印设备PADEST设置到打印窗口项目中
CALL FUNCTION 'SET_PRINT_PARAMETERS'
EXPORTING
DESTINATION = LC_PDEST
IMMEDIATELY = CNS_X
.
ENDFORM. "FRM_SET_PRINT_PARAMETERS
【把内表以CSV文件格式输出】
* 通过文件保存对话框得到需要保存文件的全路径LC_FULLPATH
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
* EXPORTING
CHANGING
FILENAME = LC_FILENAME
PATH = LC_PATH
FULLPATH = LC_FULLPATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
others = 4
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF LC_FILENAME IS NOT INITIAL.
* 这个function是关键所在,可以把一个内表的一行的所有字段用‘;’分割,然后整合成一个string放到目标内表中LITAB_CON_LIST3
CALL FUNCTION 'SAP_CONVERT_TO_CSV_FORMAT'
EXPORTING
I_FIELD_SEPERATOR = CNS_COMMA
TABLES
I_TAB_SAP_DATA = GITAB_LIST3
CHANGING
I_TAB_CONVERTED_DATA = LITAB_CON_LIST3
EXCEPTIONS
CONVERSION_FAILED = 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.
* 可在此目标内表的头部加上必要的header
CONCATENATE TEXT-009 "姩掕壢栚
TEXT-010 "姩掕壢栚柤
TEXT-011 "婡擻椞堟柤
TEXT-012 "慜寧孞墇
TEXT-013 "庁曽嬥妟
TEXT-014 "戄曽嬥妟
TEXT-015 "梻寧孞墇
INTO LC_HEADER
SEPARATED BY CNS_COMMA.
INSERT LC_HEADER INTO LITAB_CON_LIST3 INDEX 1.
* 拿到全路径之后,直接download就ok
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = LC_FULLPATH
TABLES
DATA_TAB = LITAB_CON_LIST3
.
ENDIF.
ENDFORM. " FRM_FILE_DOWNLOAD
【如何动态指派数字字段名assign】
比如有12个字段,HSL01,HSL02,HSL03,HSL04,HSL05一直到HSL12
如果我在选择画面上指定要累加04~08之间的字段,那assign就可以派上用场了
由于和指针的作用类同,所以下面就叫它指针
1.定义指针
FIELD-SYMBOLS <FS> TYPE FAGLFLEXT-HSL01.
2.使用方法:定义另一个lc_p指针数据,通过do循环的sy-index进行一条条遍历
这里比较重要的是要严格控制好选择画面上low值和high值对lc_p指针的界限
DO.
IF S_MONAT-HIGH IS NOT INITIAL.
LC_P = S_MONAT-LOW + SY-INDEX - 1.
IF LC_P > S_MONAT-HIGH.
EXIT.
ENDIF.
ELSE.
LC_P = S_MONAT-LOW.
IF SY-INDEX = 2.
EXIT.
ENDIF.
ENDIF.
WRITE LC_P TO LC_NUM.
PERFORM. FRM_CONVERT_ALPHA_INPUT CHANGING LC_NUM.
CONCATENATE LC_NAME LC_NUM INTO LC_FIELD.
ASSIGN (LC_FIELD) TO <FS>.
IF LSTR_DATA3-DRCRK = CNS_S.
LC_SSUM = LC_SSUM + <FS>.
ENDIF.
IF LSTR_DATA3-DRCRK = CNS_H.
<FS> = <FS> * ( -1 ) .
LC_HSUM = LC_HSUM + <FS>.
ENDIF.
CLEAR LC_FIELD.
ENDDO.
【range table 的最新定义方法】
跟旧版本的ECC的range定义方法不同,现在改用如下的定义方法:
R_RACCT2 TYPE RANGE OF CHAR2,
R_RACCT3 TYPE RANGE OF CHAR3,
R_RACCT31 TYPE RANGE OF CHAR3,
LSTR_RACCT2 LIKE LINE OF R_RACCT2,
LSTR_RACCT3 LIKE LINE OF R_RACCT3,
LSTR_RACCT31 LIKE LINE OF R_RACCT31.
* 儗儞僕42乣49
LSTR_RACCT2-SIGN = CNS_I.
LSTR_RACCT2-OPTION = CNS_BT.
LSTR_RACCT2-LOW = CNS_42.
LSTR_RACCT2-HIGH = CNS_49.
APPEND LSTR_RACCT2 TO R_RACCT2.
* 儗儞僕000乣512
LSTR_RACCT3-SIGN = CNS_I.
LSTR_RACCT3-OPTION = CNS_BT.
LSTR_RACCT3-LOW = CNS_000.
LSTR_RACCT3-HIGH = CNS_512.
APPEND LSTR_RACCT3 TO R_RACCT3.
* 儗儞僕522乣999
LSTR_RACCT31-SIGN = CNS_I.
LSTR_RACCT31-OPTION = CNS_BT.
LSTR_RACCT31-LOW = CNS_522.
LSTR_RACCT31-HIGH = CNS_999.
APPEND LSTR_RACCT31 TO R_RACCT31.
【如何在标准一览画面上加上自己的系统按钮】
可以在top-of-page或者start-of-selection事件中定义:
SET PF-STATUS 'ZS01'.
这里的'ZS01'是自己定义的,双击它进去后就别有洞天了,可以自己定义系统按钮已经各种快捷键
如果要选择标准的一览出力画面,首先进入菜单:
補足->テンプレート调整
在弹出的窗口中选择“一览ステータス”
基本的关于一览的系统按钮都有了
然后自己添加需要的按钮,在GUI模块中,找一个空白的输入框中输入该按钮的parameter ID,这个ID是在程序中用到的。比如这里定义为“DOWN”。
单击回车后有各种关于该按钮 信息的输入框,填充完成就可以了
注意一定要选择一个快捷键,不然添加还是失败的。。
最终添加好后记得激活。
在程序中的使用:
在AT USER-COMMAND.事件中:catch发生的系统信息,如果catch到“DOWN”消息,也就是说刚刚定义的按钮被点击了。
CASE SY-UCOMM.
WHEN 'DOWN'.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = '幚峴妋擣'
TEXT_QUESTION = '堦棗撪梕傪僟僂儞儘乕僪偟傑偡丅傛傠偟偄偱偡偐丠'
TEXT_BUTTON_1 = '偼丂偄'
TEXT_BUTTON_2 = '偄 偄 偊'
DEFAULT_BUTTON = '1'
DISPLAY_CANCEL_BUTTON = ' '
IMPORTING
ANSWER = GC_ANSWER
.
IF GC_ANSWER = '1'.
* 乽偼丂偄乿偑墴壓偝傟偨応崌
PERFORM. FRM_FILE_DOWNLOAD.
ELSE.
* 乽偄偄偊乿偑墴壓偝傟偨応崌
MESSAGE S010.
ENDIF.
ENDCASE.
【如何实现选择第一个radio输入框为灰色非激活,选择第二个radio时该输入框激活】
在定义选择画面时,有2个重要点需要注意:
设定USER-COMMAND 和 MODIF ID
USER-COMMAND表示的意思是:哪个button改变时需要发出事件信息
MODIF ID表示:哪个画面元素需要修改
*----------------------------------------------------------------------*
*SELECTION SCREEN
*----------------------------------------------------------------------*
PARAMETERS:
P_1 TYPE C RADIOBUTTON GROUP DATE
DEFAULT 'X'
USER-COMMAND FLAG, “重要*
P_2 TYPE C RADIOBUTTON GROUP DATE.
SELECTION-SCREEN: BEGIN OF LINE,
COMMENT 6(10) TEXT-001.
PARAMETERS GP_IPDAT TYPE SY-DATUM MODIF ID BL1. “重要*
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN: BEGIN OF LINE,
COMMENT 8(60) TEXT-005, "乽捠忢峏怴乿
END OF LINE,
BEGIN OF LINE,
COMMENT 8(60) TEXT-006, "乽巜掕擔峏怴乿
END OF LINE.
在AT SELECTION-SCREEN中循环SCREEN系统变量,把需要修改的画面元素的属性进行相应的修改
*----------------------------------------------------------------------*
*AT SELECTION-SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF P_1 = CNS_X AND SCREEN-GROUP1 = CNS_BL1.
SCREEN-INPUT = '0'.
CLEAR GP_IPDAT.
ENDIF.
IF P_2 = CNS_X AND SCREEN-GROUP1 = CNS_BL1.
SCREEN-INPUT = '1'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
这里把输入框变成灰色,修改的属性是INPUT,设为0不可输入,设为1则可修改。
其他属性可以在se11的data type中输入screen研究。
【实现ALV的双击事件执行其他任务】
调用function “REUSE_ALV_GRID_DISPLAY”显示ALV,设置I_CALLBACK_USER_COMMAND为'USER_COMMAND',这里的'USER_COMMAND'需要另外定义一个form来接受双击事件。
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_USER_COMMAND = 'USER_COMMAND' * 重要
I_BACKGROUND_ID = 'SIWB_WALLPAPER'
IS_LAYOUT = L_WA_LAYOUT
IT_FIELDCAT = ITAB_FIELDCAT
I_DEFAULT = 'X'
I_SAVE = 'A'
IT_EVENTS = I_EVENTS
IT_EVENT_EXIT = I_EVENT_EXIT
TABLES
T_OUTTAB = ITAB_BSIK
EXCEPTIONS
PROGRAM_ERROR = 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.
ENDFORM. " FRM_ALV_REPORT
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
FORM. USER_COMMAND USING UCOMM LIKE SY-UCOMM
SELFIELD TYPE SLIS_SELFIELD.
IF UCOMM = '&IC1'. * 双击事件的ASCII码是'&IC1'
READ TABLE ITAB_BSIK INTO STR_BSIK INDEX SELFIELD-TABINDEX. *重要。。
*双击的当前行为SELFIELD-TABINDEX
*可以通过判断SELFIELD-TABINDEX不为空来决定下面的步骤是否进行。
* CHECK SY-SUBRC = 0.
* MESSAGE STR_BSIK-BUDAT TYPE 'I'.
SET PARAMETER ID: 'BLN' FIELD STR_BSIK-BELNR,
'BUK' FIELD P_BUKRS,
'GJR' FIELD STR_BSIK-BUDAT.
CALL TRANSACTION 'FB03'.
ENDIF.
ENDFORM. "USER_COMMAND