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-POOLSslis.
DATAit_fieldcat    TYPE slis_t_fieldcat_alv.
DATAi_layout       TYPE slis_layout_alv.
DATAI_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.

DATABEGIN 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(18TYPE 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 .

    DATABEGIN 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 RADIOBUTTON GROUP R1.
PARAMETERS P_TRE TYPE 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 VALUE .

  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 + .

*    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>(1NE '~'.
          <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.
  DATAws_fieldcat TYPE slis_fieldcat_alv .
  DATAw_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 TO .
  IF S <= 9.
    CONCATENATE '0' INTO S.
  ENDIF.
ENDFORM.                    " SUB_FILL2