UPSPL目录树转为ALV输出
UPSPL就是下图这样的,能按层级展开,各个级别分别存放不同的计划表单。
公司是按表单对用户做授权的,不同的ROLE看到的目录都不一样,那可想而知用PFCG做角色时,你要复制粘贴多少次。
有了这个程序,每个表单从根节点到表单本身,在一个界面都能看到,简直不能再方便了。
代码很通用,直接粘上来的,注意最深的层级是支持到9层,就是说你的表单最多放在第8级子目录下,否则就不能正常显示了(PS我们是到第6层)
*&---------------------------------------------------------------------*
*& Report ZBPS_FOLDER_LIST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZBPS_FOLDER_LIST.
TABLES:UPB_PS_NAME,UPB_PS_NAME_T.
TYPE-POOLS: slis.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv.
DATA: i_layout TYPE slis_layout_alv.
DATA: I_SORT TYPE SLIS_T_SORTINFO_ALV.
DATA GT_FOLDER TYPE TABLE OF UPB_PS_NAME .
FIELD-SYMBOLS <FS_FOLDER> LIKE LINE OF GT_FOLDER.
DATA GT_FOLDER1 TYPE TABLE OF UPB_PS_NAME .
FIELD-SYMBOLS <FS_FOLDER1> LIKE LINE OF GT_FOLDER1.
DATA: BEGIN OF GS_ALV,
LV TYPE I,
LV1 LIKE UPB_PS_NAME-NAME,
LV2 LIKE UPB_PS_NAME-NAME,
LV3 LIKE UPB_PS_NAME-NAME,
LV4 LIKE UPB_PS_NAME-NAME,
LV5 LIKE UPB_PS_NAME-NAME,
LV6 LIKE UPB_PS_NAME-NAME,
LV7 LIKE UPB_PS_NAME-NAME,
LV8 LIKE UPB_PS_NAME-NAME,
LV9 LIKE UPB_PS_NAME-NAME,
SN(18) TYPE C,
NAME TYPE UPB_PS_NAME-NAME,
TEXT TYPE UPB_Y_PS_NAMETXT,
SEL TYPE C,
TEXT1 TYPE UPB_Y_PS_NAMETXT,
TEXT2 TYPE UPB_Y_PS_NAMETXT,
TEXT3 TYPE UPB_Y_PS_NAMETXT,
TEXT4 TYPE UPB_Y_PS_NAMETXT,
TEXT5 TYPE UPB_Y_PS_NAMETXT,
TEXT6 TYPE UPB_Y_PS_NAMETXT,
TEXT7 TYPE UPB_Y_PS_NAMETXT,
TEXT8 TYPE UPB_Y_PS_NAMETXT,
TEXT9 TYPE UPB_Y_PS_NAMETXT,
END OF GS_ALV.
FIELD-SYMBOLS <FS_ALV> LIKE GS_ALV.
FIELD-SYMBOLS <FS_ALVTMP> LIKE GS_ALV.
DATA GT_ALV LIKE TABLE OF GS_ALV .
DATA GS_ALV_TMP LIKE GS_ALV.
DATA ALV1 LIKE TABLE OF GS_ALV .
DATA ALV2 LIKE TABLE OF GS_ALV .
DATA ALV3 LIKE TABLE OF GS_ALV .
DATA ALV4 LIKE TABLE OF GS_ALV .
DATA ALV5 LIKE TABLE OF GS_ALV .
DATA ALV6 LIKE TABLE OF GS_ALV .
DATA ALV7 LIKE TABLE OF GS_ALV .
DATA ALV8 LIKE TABLE OF GS_ALV .
DATA ALV9 LIKE TABLE OF GS_ALV .
DATA GS_ALV1 LIKE GS_ALV.
DATA GS_ALV2 LIKE GS_ALV.
DATA GS_ALV3 LIKE GS_ALV.
DATA GS_ALV4 LIKE GS_ALV.
DATA GS_ALV5 LIKE GS_ALV.
DATA GS_ALV6 LIKE GS_ALV.
DATA GS_ALV7 LIKE GS_ALV.
DATA GS_ALV8 LIKE GS_ALV.
DATA GS_ALV9 LIKE GS_ALV.
DATA lt_pm_name TYPE upb_yt_pm_name.
DATA GS_FOLDER LIKE LINE OF lt_pm_name.
FIELD-SYMBOLS <FS1> LIKE GS_FOLDER.
DATA FOLDER1 LIKE TABLE OF GS_FOLDER .
DATA FOLDER2 LIKE TABLE OF GS_FOLDER .
DATA FOLDER3 LIKE TABLE OF GS_FOLDER .
DATA FOLDER4 LIKE TABLE OF GS_FOLDER .
DATA FOLDER5 LIKE TABLE OF GS_FOLDER .
DATA FOLDER6 LIKE TABLE OF GS_FOLDER .
DATA FOLDER7 LIKE TABLE OF GS_FOLDER .
DATA FOLDER8 LIKE TABLE OF GS_FOLDER .
DATA FOLDER9 LIKE TABLE OF GS_FOLDER .
DATA: BEGIN OF STR,
S1 TYPE CHAR2 VALUE '00',
S2 TYPE CHAR2 VALUE '00',
S3 TYPE CHAR2 VALUE '00',
S4 TYPE CHAR2 VALUE '00',
S5 TYPE CHAR2 VALUE '00',
S6 TYPE CHAR2 VALUE '00',
S7 TYPE CHAR2 VALUE '00',
S8 TYPE CHAR2 VALUE '00',
S9 TYPE CHAR2 VALUE '00'.
DATA END OF STR.
DATA ZGET TYPE FLAG .
DATA ZLASTNAME TYPE UPB_Y_PS_NAME .
PARAMETERS P_ALV TYPE C RADIOBUTTON GROUP R1.
PARAMETERS P_TRE TYPE C RADIOBUTTON GROUP R1.
START-OF-SELECTION.
IF P_ALV = 'X'.
PERFORM PREPARE_ALV.
PERFORM show_data.
ENDIF.
IF P_TRE = 'X'.
CALL FUNCTION 'UPB_PM_MAIN'
EXPORTING
I_APPLC = 'UPS'
I_DISPLAY_ONLY = 'X'
* I_EXECUTE_ONLY =
* I_PM_NAME = '~P0022'
* I_USE_BSP =
* EXCEPTIONS
* INVALID_APPLC = 1
* NO_ENTRY = 2
* OTHERS = 3
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
FORM PREPARE_ALV.
CALL FUNCTION 'UPB_PM_GET_PLAN_MAPS'
EXPORTING
I_APPLC = 'UPS'
I_ONLY_MAIN_AREA = ''
I_GET_ALL = 'X'
IMPORTING
ET_PM_NAMES = lt_pm_name
EXCEPTIONS
NOENTRY = 1
INVALID_APPLC = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
ENDIF.
* BREAK-POINT.
SORT lt_pm_name BY PREVPM.
PERFORM SUB_FOLDERS_LV1.
PERFORM SUB_FOLDERS_LV TABLES FOLDER1 FOLDER2 ."
PERFORM SUB_FOLDERS_LV TABLES FOLDER2 FOLDER3 ."
PERFORM SUB_FOLDERS_LV TABLES FOLDER3 FOLDER4 ."
PERFORM SUB_FOLDERS_LV TABLES FOLDER4 FOLDER5 ."
PERFORM SUB_FOLDERS_LV TABLES FOLDER5 FOLDER6 ."
PERFORM SUB_FOLDERS_LV TABLES FOLDER6 FOLDER7 ."
PERFORM SUB_FOLDERS_LV TABLES FOLDER7 FOLDER8 ."
PERFORM SUB_FOLDERS_LV TABLES FOLDER8 FOLDER9 ."
DATA ZSN TYPE I VALUE 0 .
PERFORM SUB_ALV TABLES FOLDER1 ALV1 USING 1.
PERFORM SUB_ALV TABLES FOLDER2 ALV2 USING 2.
PERFORM SUB_ALV TABLES FOLDER3 ALV3 USING 3.
PERFORM SUB_ALV TABLES FOLDER4 ALV4 USING 4.
PERFORM SUB_ALV TABLES FOLDER5 ALV5 USING 5.
PERFORM SUB_ALV TABLES FOLDER6 ALV6 USING 6.
PERFORM SUB_ALV TABLES FOLDER7 ALV7 USING 7.
PERFORM SUB_ALV TABLES FOLDER8 ALV8 USING 8.
PERFORM SUB_ALV TABLES FOLDER9 ALV9 USING 9.
LOOP AT ALV1 INTO GS_ALV1.
STR+2(16) = ''.
PERFORM SUB_FILL2 CHANGING STR-S1 .
GS_ALV1-SN = STR.
APPEND GS_ALV1 TO GT_ALV.
LOOP AT ALV2 INTO GS_ALV2 WHERE LV1 = GS_ALV1-NAME.
STR+4(14) = ''.
PERFORM SUB_FILL2 CHANGING STR-S2 .
GS_ALV2-SN = STR.
APPEND GS_ALV2 TO GT_ALV.
LOOP AT ALV3 INTO GS_ALV3 WHERE LV2 = GS_ALV2-NAME.
STR+6(12) = ''.
PERFORM SUB_FILL2 CHANGING STR-S3 .
GS_ALV3-SN = STR.
APPEND GS_ALV3 TO GT_ALV.
LOOP AT ALV4 INTO GS_ALV4 WHERE LV3 = GS_ALV3-NAME.
STR+8(10) = ''.
PERFORM SUB_FILL2 CHANGING STR-S4 .
GS_ALV4-SN = STR.
APPEND GS_ALV4 TO GT_ALV.
LOOP AT ALV5 INTO GS_ALV5 WHERE LV4 = GS_ALV4-NAME.
STR+10(8) = ''.
PERFORM SUB_FILL2 CHANGING STR-S5 .
GS_ALV5-SN = STR.
APPEND GS_ALV5 TO GT_ALV.
LOOP AT ALV6 INTO GS_ALV6 WHERE LV5 = GS_ALV5-NAME.
STR+12(6) = ''.
PERFORM SUB_FILL2 CHANGING STR-S6 .
GS_ALV6-SN = STR.
APPEND GS_ALV6 TO GT_ALV.
LOOP AT ALV7 INTO GS_ALV7 WHERE LV6 = GS_ALV6-NAME.
STR+14(4) = ''.
PERFORM SUB_FILL2 CHANGING STR-S7 .
GS_ALV7-SN = STR.
APPEND GS_ALV7 TO GT_ALV.
LOOP AT ALV8 INTO GS_ALV8 WHERE LV7 = GS_ALV7-NAME.
STR+16(2) = ''.
PERFORM SUB_FILL2 CHANGING STR-S8 .
GS_ALV8-SN = STR.
APPEND GS_ALV8 TO GT_ALV.
LOOP AT ALV9 INTO GS_ALV9 WHERE LV8 = GS_ALV8-NAME.
PERFORM SUB_FILL2 CHANGING STR-S9 .
GS_ALV9-SN = STR.
APPEND GS_ALV9 TO GT_ALV.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDLOOP.
DATA ZINDEX LIKE SY-TABIX.
LOOP AT GT_ALV ASSIGNING <FS_ALV> WHERE LV = 3.
READ TABLE GT_ALV ASSIGNING <FS_ALVTMP> WITH KEY LV2 = <FS_ALV>-LV2 LV3 = '' .
<FS_ALV>-LV1 = <FS_ALVTMP>-LV1.
ENDLOOP.
LOOP AT GT_ALV ASSIGNING <FS_ALV> WHERE LV = 4.
READ TABLE GT_ALV ASSIGNING <FS_ALVTMP> WITH KEY LV3 = <FS_ALV>-LV3 LV4 = '' .
<FS_ALV>-LV1 = <FS_ALVTMP>-LV1.
<FS_ALV>-LV2 = <FS_ALVTMP>-LV2.
ENDLOOP.
LOOP AT GT_ALV ASSIGNING <FS_ALV> WHERE LV = 5.
READ TABLE GT_ALV ASSIGNING <FS_ALVTMP> WITH KEY LV4 = <FS_ALV>-LV4 LV5 = '' .
<FS_ALV>-LV1 = <FS_ALVTMP>-LV1.
<FS_ALV>-LV2 = <FS_ALVTMP>-LV2.
<FS_ALV>-LV3 = <FS_ALVTMP>-LV3.
ENDLOOP.
LOOP AT GT_ALV ASSIGNING <FS_ALV> WHERE LV = 6.
READ TABLE GT_ALV ASSIGNING <FS_ALVTMP> WITH KEY LV5 = <FS_ALV>-LV5 LV6 = '' .
<FS_ALV>-LV1 = <FS_ALVTMP>-LV1.
<FS_ALV>-LV2 = <FS_ALVTMP>-LV2.
<FS_ALV>-LV3 = <FS_ALVTMP>-LV3.
<FS_ALV>-LV4 = <FS_ALVTMP>-LV4.
ENDLOOP.
LOOP AT GT_ALV ASSIGNING <FS_ALV> WHERE LV = 7.
READ TABLE GT_ALV ASSIGNING <FS_ALVTMP> WITH KEY LV6 = <FS_ALV>-LV6 LV7 = '' .
<FS_ALV>-LV1 = <FS_ALVTMP>-LV1.
<FS_ALV>-LV2 = <FS_ALVTMP>-LV2.
<FS_ALV>-LV3 = <FS_ALVTMP>-LV3.
<FS_ALV>-LV4 = <FS_ALVTMP>-LV4.
<FS_ALV>-LV5 = <FS_ALVTMP>-LV5.
ENDLOOP.
LOOP AT GT_ALV ASSIGNING <FS_ALV> WHERE LV = 8.
READ TABLE GT_ALV ASSIGNING <FS_ALVTMP> WITH KEY LV7 = <FS_ALV>-LV7 LV8 = '' .
<FS_ALV>-LV1 = <FS_ALVTMP>-LV1.
<FS_ALV>-LV2 = <FS_ALVTMP>-LV2.
<FS_ALV>-LV3 = <FS_ALVTMP>-LV3.
<FS_ALV>-LV4 = <FS_ALVTMP>-LV4.
<FS_ALV>-LV5 = <FS_ALVTMP>-LV5.
<FS_ALV>-LV6 = <FS_ALVTMP>-LV6.
ENDLOOP.
LOOP AT GT_ALV ASSIGNING <FS_ALV> WHERE LV = 9.
READ TABLE GT_ALV ASSIGNING <FS_ALVTMP> WITH KEY LV8 = <FS_ALV>-LV8 LV9 = '' .
<FS_ALV>-LV1 = <FS_ALVTMP>-LV1.
<FS_ALV>-LV2 = <FS_ALVTMP>-LV2.
<FS_ALV>-LV3 = <FS_ALVTMP>-LV3.
<FS_ALV>-LV4 = <FS_ALVTMP>-LV4.
<FS_ALV>-LV5 = <FS_ALVTMP>-LV5.
<FS_ALV>-LV6 = <FS_ALVTMP>-LV6.
<FS_ALV>-LV7 = <FS_ALVTMP>-LV7.
ENDLOOP.
SORT lt_pm_name BY NAME.
LOOP AT GT_ALV ASSIGNING <FS_ALV>.
READ TABLE lt_pm_name ASSIGNING <FS1> BINARY SEARCH WITH KEY
NAME = <FS_ALV>-LV1.
IF SY-SUBRC = 0.
<FS_ALV>-TEXT1 = <FS1>-TEXT.
ENDIF.
READ TABLE lt_pm_name ASSIGNING <FS1> BINARY SEARCH WITH KEY
NAME = <FS_ALV>-LV2.
IF SY-SUBRC = 0.
<FS_ALV>-TEXT2 = <FS1>-TEXT.
ENDIF.
READ TABLE lt_pm_name ASSIGNING <FS1> BINARY SEARCH WITH KEY
NAME = <FS_ALV>-LV3.
IF SY-SUBRC = 0.
<FS_ALV>-TEXT3 = <FS1>-TEXT.
ENDIF.
READ TABLE lt_pm_name ASSIGNING <FS1> BINARY SEARCH WITH KEY
NAME = <FS_ALV>-LV4.
IF SY-SUBRC = 0.
<FS_ALV>-TEXT4 = <FS1>-TEXT.
ENDIF.
READ TABLE lt_pm_name ASSIGNING <FS1> BINARY SEARCH WITH KEY
NAME = <FS_ALV>-LV5.
IF SY-SUBRC = 0.
<FS_ALV>-TEXT5 = <FS1>-TEXT.
ENDIF.
READ TABLE lt_pm_name ASSIGNING <FS1> BINARY SEARCH WITH KEY
NAME = <FS_ALV>-LV6.
IF SY-SUBRC = 0.
<FS_ALV>-TEXT6 = <FS1>-TEXT.
ENDIF.
READ TABLE lt_pm_name ASSIGNING <FS1> BINARY SEARCH WITH KEY
NAME = <FS_ALV>-LV7.
IF SY-SUBRC = 0.
<FS_ALV>-TEXT7 = <FS1>-TEXT.
ENDIF.
READ TABLE lt_pm_name ASSIGNING <FS1> BINARY SEARCH WITH KEY
NAME = <FS_ALV>-LV8.
IF SY-SUBRC = 0.
<FS_ALV>-TEXT8 = <FS1>-TEXT.
ENDIF.
READ TABLE lt_pm_name ASSIGNING <FS1> BINARY SEARCH WITH KEY
NAME = <FS_ALV>-LV9.
IF SY-SUBRC = 0.
<FS_ALV>-TEXT9 = <FS1>-TEXT.
ENDIF.
ENDLOOP.
ENDFORM.
FORM SUB_ALV
TABLES FOLDERS STRUCTURE GS_FOLDER
ALV STRUCTURE GS_ALV
USING LEVEL .
* DATA ZTIMES TYPE I .
FIELD-SYMBOLS <COLNAME>.
FIELD-SYMBOLS <COLNAME1>.
FIELD-SYMBOLS <COLNAME2>.
DATA ZCOL TYPE I.
DATA ZCOL1 TYPE I.
DATA ZCOL2 TYPE I.
DATA ZLASTFOLDER TYPE UPB_Y_PS_NAME .
FIELD-SYMBOLS <F_CHAR2> TYPE CHAR2.
* ZTIMES = LEVEL - 1.
ZCOL1 = LEVEL .
ZCOL2 = LEVEL + 1 .
* ASSIGN COMPONENT ZCOL1 OF STRUCTURE STR TO <F_CHAR2>.
LOOP AT FOLDERS ASSIGNING <FS1>.
ASSIGN COMPONENT ZCOL2 OF STRUCTURE GS_ALV TO <COLNAME2>.
<COLNAME2> = <FS1>-NAME.
IF <COLNAME2>(2) = '~C'.
<COLNAME2>(2) = '~P'.
ENDIF.
IF LEVEL > 1.
ASSIGN COMPONENT ZCOL1 OF STRUCTURE GS_ALV TO <COLNAME1>.
<COLNAME1> = <FS1>-PREVPM.
IF <COLNAME1>(2) = '~C'.
<COLNAME1>(2) = '~P'.
ENDIF.
ZLASTFOLDER = <COLNAME1>.
IF <COLNAME1>(1) NE '~'.
<COLNAME1> = ZLASTFOLDER .
ENDIF.
ENDIF.
GS_ALV-LV = LEVEL .
GS_ALV-NAME = <FS1>-NAME .
GS_ALV-TEXT = <FS1>-TEXT .
* ADD 1 TO <F_CHAR2>.
* IF <F_CHAR2> = 99 .
* <F_CHAR2> = 00 .
* ENDIF.
* GS_ALV-SN = STR.
APPEND GS_ALV TO ALV .
CLEAR GS_ALV.
ENDLOOP.
* STR = '000000000000000000'.
ENDFORM.
FORM SUB_FOLDERS_LV1 .
READ TABLE lt_pm_name BINARY SEARCH ASSIGNING <FS1> WITH KEY PREVPM = ''.
IF SY-SUBRC = 0.
ZGET = 'X'.
ZLASTNAME = <FS1>-NAME.
APPEND <FS1> TO FOLDER1.
ELSE.
ZGET = ''.
ENDIF.
"依次取出第一层的所有子节点
WHILE ZGET = 'X'.
READ TABLE lt_pm_name BINARY SEARCH ASSIGNING <FS1> WITH KEY PREVPM = ZLASTNAME .
IF SY-SUBRC = 0.
ZGET = 'X'.
ZLASTNAME = <FS1>-NAME.
APPEND <FS1> TO FOLDER1.
ELSE.
ZGET = ''.
ENDIF.
ENDWHILE.
ENDFORM.
FORM SUB_FOLDERS_LV TABLES FARHER STRUCTURE GS_FOLDER SON STRUCTURE GS_FOLDER .
DATA GS_FOLDER_TMP LIKE GS_FOLDER.
DATA ZFATHER TYPE UPB_PS_NAME-NAME.
LOOP AT FARHER INTO GS_FOLDER WHERE NAME(2) = '~P' .
ZLASTNAME = GS_FOLDER-NAME.
ZLASTNAME(2) = '~C'.
ZFATHER = GS_FOLDER-NAME.
"首先取目录下第一个子节点
READ TABLE lt_pm_name BINARY SEARCH ASSIGNING <FS1> WITH KEY PREVPM = ZLASTNAME .
IF SY-SUBRC = 0.
ZGET = 'X'.
ZLASTNAME = <FS1>-NAME.
APPEND <FS1> TO SON.
ELSE.
ZGET = ''.
ENDIF.
"然后依次取第二个及以后的子节点
WHILE ZGET = 'X'.
READ TABLE lt_pm_name BINARY SEARCH ASSIGNING <FS1> WITH KEY PREVPM = ZLASTNAME .
IF SY-SUBRC = 0.
ZGET = 'X'.
ZLASTNAME = <FS1>-NAME.
GS_FOLDER_TMP = <FS1> .
GS_FOLDER_TMP-PREVPM = ZFATHER .
APPEND GS_FOLDER_TMP TO SON.
ELSE.
ZGET = ''.
ENDIF.
ENDWHILE.
ENDLOOP.
ENDFORM.
FORM show_data .
PERFORM build_fieldcat.
PERFORM build_layout.
PERFORM build_sort.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-cprog
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'FRM_USER_COMMAND'
is_layout = i_layout
it_fieldcat = it_fieldcat
IT_SORT = I_SORT
TABLES
t_outtab = GT_ALV[]
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.
FORM build_fieldcat .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'SN' 'SN' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'LV' 'LV' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'NAME' 'NAME' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'TEXT' 'TEXT' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'LV1' 'LV1' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'TEXT1' 'TEXT1' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'LV2' 'LV2' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'TEXT2' 'TEXT2' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'LV3' 'LV3' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'TEXT3' 'TEXT3' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'LV4' 'LV4' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'TEXT4' 'TEXT4' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'LV5' 'LV5' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'TEXT5' 'TEXT5' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'LV6' 'LV6' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'TEXT6' 'TEXT6' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'LV7' 'LV7' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'TEXT7' 'TEXT7' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'LV8' 'LV8' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'TEXT8' 'TEXT8' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'LV9' 'LV9' '' 'L' .
PERFORM sub_fill_fieldcat_alv TABLES it_fieldcat USING '' '' 'TEXT9' 'TEXT9' '' 'L' .
ENDFORM.
FORM build_layout .
i_layout-zebra = 'X'.
i_layout-colwidth_optimize = 'X'.
i_layout-detail_popup = 'X'.
i_layout-detail_initial_lines = 'X'.
i_layout-box_fieldname = 'SEL'.
ENDFORM.
FORM sub_fill_fieldcat_alv TABLES lt_fieldcat TYPE slis_t_fieldcat_alv
USING ref_tabname ref_fieldname fieldname fieldlabel p_hotspot p_just.
DATA: ws_fieldcat TYPE slis_fieldcat_alv .
DATA: w_col_pos TYPE i.
* ws_fieldcat-tabname = 'GT_ALV'.
w_col_pos = w_col_pos + 1.
CLEAR ws_fieldcat.
IF ref_tabname <> space.
ws_fieldcat-ref_tabname = ref_tabname.
ENDIF.
IF ref_fieldname <> space.
ws_fieldcat-ref_fieldname = ref_fieldname.
ENDIF.
ws_fieldcat-fieldname = fieldname.
IF fieldlabel <> space.
ws_fieldcat-seltext_l = fieldlabel.
ws_fieldcat-seltext_m = fieldlabel.
ws_fieldcat-seltext_s = fieldlabel.
ws_fieldcat-ddictxt = 'M'.
ws_fieldcat-reptext_ddic = fieldlabel.
ENDIF.
ws_fieldcat-key = space.
ws_fieldcat-do_sum = space.
ws_fieldcat-col_pos = w_col_pos.
ws_fieldcat-no_out = space.
ws_fieldcat-hotspot = p_hotspot.
ws_fieldcat-just = p_just.
APPEND ws_fieldcat TO lt_fieldcat .
ENDFORM. " sub_fill_fieldcat_alv
FORM set_pf_status USING extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD_FULLSCREEN' .
ENDFORM. "SET_PF_STATUS
FORM frm_user_command USING r_ucomm LIKE sy-ucomm
selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN '&F03' OR '&F15' OR '&F12'.
WHEN OTHERS.
ENDCASE.
***&刷新
* selfield-refresh = 'X'.
ENDFORM.
FORM BUILD_SORT .
DATA L_SORT TYPE slis_sortinfo_alv .
* L_SORT-spos = 0 .
*
* ADD 1 TO L_SORT-spos .
* L_SORT-fieldname = 'BNAME' .
* APPEND L_SORT TO I_SORT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SUB_FILL2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_STR_S1 text
*----------------------------------------------------------------------*
FORM SUB_FILL2 CHANGING S.
ADD 1 TO S .
IF S <= 9.
CONCATENATE '0' S INTO S.
ENDIF.
ENDFORM. " SUB_FILL2