*&---------------------------------------------------------------------*
*& プログラムID :ZAXYT_TOOL_01
*& プログラム名称:プログラムのステップ数カウント
*& 処 理 概 要:PGMのSTEP数をカウントしALVに出力する
*& 作 成 者 :SAPDMOT
*& 作 成 日 :2023/08/08
*&---------------------------------------------------------------------*
*& 変 更 番 号:
*& 変 更 者 :
*& 変 更 日 :
*& 変 更 内 容:
*&---------------------------------------------------------------------*
REPORT Z1OTR0050 NO STANDARD PAGE HEADING
MESSAGE-ID YMSG
LINE-SIZE 255
LINE-COUNT 65.
************************************************************************
* TABLES
************************************************************************
************************************************************************
* INCLUDE
************************************************************************
************************************************************************
* TYPES(内部テーブル構造)
************************************************************************
*--- ALV
TYPE-POOLS: SLIS.
*--- ソース格納
TYPES: BEGIN OF TYP_PGM,
SORCE TYPE C LENGTH 300,
END OF TYP_PGM.
*--- プログラム名
TYPES: BEGIN OF TYP_NAME,
FUNCNAME TYPE TFDIR-FUNCNAME,
NAME TYPE PROGNAME,
DEVCLASS TYPE TADIR-DEVCLASS,
END OF TYP_NAME.
*--- レポート表題
TYPES: BEGIN OF TYP_REP1,
NAME TYPE PROGNAME,
TEXT TYPE C LENGTH 100,
END OF TYP_REP1.
*--- ALV OUTPUT
TYPES: BEGIN OF TYP_ALV,
DEVCLASS TYPE TADIR-DEVCLASS, "パッケージ
NAME TYPE PROGDIR-NAME, "PGM名/汎用モジュール
INCLUDE TYPE D010INC-INCLUDE, "INCLUDE
TEXT TYPE TRDIRT-TEXT, "テキスト
COUNT TYPE P LENGTH 16, "件数
FLG_ERR TYPE C LENGTH 1, "エラーフラグ
ERR_MSG TYPE C LENGTH 100, "エラーメッセージ
END OF TYP_ALV.
*&---------------------------------------------------------------------*
* DATA (内部テーブル定義)
*&---------------------------------------------------------------------*
DATA:
TADIR TYPE TADIR, "リポジトリオブジェクトのディレクトリ
PROGDIR TYPE PROGDIR, "REPOSRCのビュー
APPL_PROG TYPE APPL_PROG, "D010SINF TADIRによる結合
TRDIRT TYPE TRDIRT, "プログラムの表題テキスト
TDEVCT TYPE TDEVCT. "パッケージのテキスト
*--- ソース格納
DATA: TAB_PGM TYPE TABLE OF TYP_PGM,
REC_PGM TYPE TYP_PGM.
*--- プログラム名
DATA: TAB_NAME TYPE TABLE OF TYP_NAME,
REC_NAME TYPE TYP_NAME.
*--- 「TADIR」取得用
DATA: TAB_TADIR TYPE STANDARD TABLE OF TADIR,
REC_TADIR TYPE TADIR.
*--- 「D010INC」取得用
DATA: TAB_INCL TYPE STANDARD TABLE OF D010INC,
REC_INCL TYPE D010INC,
TAB_INCL_SAVE TYPE STANDARD TABLE OF D010INC.
*--- レポート表題
DATA: TAB_REP1 TYPE TABLE OF TYP_REP1,
REC_REP1 TYPE TYP_REP1.
*--- 処理対象INCLUDEレンジテーブル
DATA: RG_INCL TYPE RANGE OF D010INC-INCLUDE.
*[ALV出力用]
*--- ALVデータ
DATA: TAB_ALV TYPE STANDARD TABLE OF TYP_ALV,
REC_ALV TYPE TYP_ALV,
*--- ALVデータ編集用
TAB_EDIT TYPE STANDARD TABLE OF TYP_ALV,
REC_EDIT TYPE TYP_ALV.
*--- 項目カタログ設定用
DATA: TAB_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
REC_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
*--- 初期ソート設定用
DATA: TAB_SORT TYPE SLIS_T_SORTINFO_ALV,
REC_SORT TYPE SLIS_SORTINFO_ALV.
* レイアウト
DATA: REC_LAYOUT TYPE SLIS_LAYOUT_ALV.
************************************************************************
* CONSTANTS
************************************************************************
CONSTANTS: C_FLG_ON TYPE C LENGTH 1 VALUE 'X'.
************************************************************************
* PARAMETERS & SELECTION-SCREEN
************************************************************************
*--- オブジェクト属性
SELECTION-SCREEN: BEGIN OF BLOCK A WITH FRAME TITLE C_TEXT01,
*--- 汎用モジュール
BEGIN OF LINE,
COMMENT 01(12) C_TEXT02 FOR FIELD P_FM,
POSITION 15.
PARAMETERS: P_FM TYPE C RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN: END OF LINE,
*--- その他
BEGIN OF LINE,
COMMENT 01(06) C_TEXT03 FOR FIELD P_PGM,
POSITION 15.
PARAMETERS P_PGM TYPE C RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN: END OF LINE,
END OF BLOCK A,
*--- パッケージ
BEGIN OF LINE,
COMMENT 01(10) C_TEXT04 FOR FIELD S_DEVCL,
POSITION 20.
SELECT-OPTIONS S_DEVCL FOR TADIR-DEVCLASS.
SELECTION-SCREEN: END OF LINE,
*--- プログラムID
BEGIN OF LINE,
COMMENT 01(16) C_TEXT05 FOR FIELD s_PGM,
POSITION 23.
SELECT-OPTIONS S_PGM FOR TADIR-OBJ_NAME.
SELECTION-SCREEN: END OF LINE,
SKIP 1,
*--- コメント行カウント(X:コメント含む,SPACE:コメントなし)
BEGIN OF LINE,
COMMENT 01(16) C_TEXT06 FOR FIELD P_COMM,
POSITION 23.
PARAMETERS P_COMM AS CHECKBOX DEFAULT SPACE.
SELECTION-SCREEN: END OF LINE,
*--- 詳細レコード出力
BEGIN OF LINE,
COMMENT 01(16) C_TEXT07 FOR FIELD P_DETAIL,
POSITION 23.
PARAMETERS P_DETAIL AS CHECKBOX DEFAULT SPACE.
SELECTION-SCREEN END OF LINE.
************************************************************************
INITIALIZATION.
************************************************************************
*--- 選択テキストセット
PERFORM F_SELECTION_TEXT_SET.
************************************************************************
AT SELECTION-SCREEN.
************************************************************************
IF S_PGM[] IS INITIAL
AND S_DEVCL[] IS INITIAL.
SET CURSOR FIELD 'S_DEVCL-LOW'.
MESSAGE E000(YMSG) WITH 'プログラム名 または パッケージ' 'を入力してください' .
ENDIF.
************************************************************************
START-OF-SELECTION.
************************************************************************
PERFORM F_MAIN.
************************************************************************
TOP-OF-PAGE.
************************************************************************
*&---------------------------------------------------------------------*
*& Form F_SELECTION_TEXT_SET
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM F_SELECTION_TEXT_SET .
MOVE:
'オブジェクト' TO C_TEXT01,
'汎用モジュール' TO C_TEXT02,
'その他' TO C_TEXT03,
'パッケージ' TO C_TEXT04,
'プログラムID' TO C_TEXT05,
'コメント行カウント' TO C_TEXT06,
'詳細レコード出力' TO C_TEXT07.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_MAIN
*&---------------------------------------------------------------------*
*& 処理
*&---------------------------------------------------------------------*
FORM F_MAIN .
*--- 変数の初期化
PERFORM F_INITIALIZE.
*--- 対象データ取得
PERFORM F_GET_DATA.
*--- 対象データチェック/出力データ格納
PERFORM F_PGM_CHECK.
*--- データ件数サマリ
PERFORM F_SUM_COUNT.
*--- ALV出力処理
PERFORM F_OUTPUT_ALV.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_INITIALIZE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM F_INITIALIZE .
*--- ローカル変数定義
DATA L_REC_INCL LIKE LINE OF RG_INCL.
CLEAR: TAB_TADIR, TAB_NAME, RG_INCL, TAB_EDIT, TAB_ALV,
TAB_FIELDCAT, TAB_SORT, REC_LAYOUT.
*--- 処理対象INCLUDE設定
MOVE:
'I' TO L_REC_INCL-SIGN,
'CP' TO L_REC_INCL-OPTION.
*--- 汎用モジュール用
IF P_FM = C_FLG_ON.
MOVE 'L*' TO L_REC_INCL-LOW.
ELSE.
MOVE: 'M*' TO L_REC_INCL-LOW.
ENDIF.
APPEND L_REC_INCL TO RG_INCL.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_GET_DATA
*&---------------------------------------------------------------------*
*& 対象データ取得
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM F_GET_DATA .
*--- 「TADIR」所得
PERFORM F_GET_TADIR.
LOOP AT TAB_TADIR INTO REC_TADIR.
CLEAR: REC_NAME.
*--- 属性:汎用モジュール
IF P_FM = C_FLG_ON.
PERFORM F_GET_TFDIR.
*--- 属性:その他
ELSE.
PERFORM F_PROGDIR_SELECT.
ENDIF.
ENDLOOP.
IF TAB_NAME[] IS INITIAL.
MESSAGE S000(YMSG) WITH '対象データが存在しません' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
SORT TAB_NAME ASCENDING BY FUNCNAME NAME.
*--- 重複データ削除
DELETE ADJACENT DUPLICATES FROM TAB_NAME
COMPARING FUNCNAME NAME.
*--- テキスト取得
PERFORM F_GET_TEXT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_GET_TEXT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM F_GET_TEXT .
CLEAR TAB_REP1.
IF P_FM = C_FLG_ON.
SELECT FUNCNAME
STEXT
INTO TABLE TAB_REP1
FROM TFTIT
WHERE SPRAS = SY-LANGU "言語キー
AND FUNCNAME IN S_PGM. "汎用モジュール
ELSE.
SELECT
NAME
TEXT
FROM TRDIRT
INTO TABLE TAB_REP1
WHERE NAME IN S_PGM
AND SPRSL = SY-LANGU.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_PGM_CHECK
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM F_PGM_CHECK .
LOOP AT TAB_NAME INTO REC_NAME.
PERFORM F_GET_D010INC.
PERFORM F_GET_PGM_INFO USING REC_NAME-NAME
C_FLG_ON.
LOOP AT TAB_INCL INTO REC_INCL.
PERFORM F_GET_PGM_INFO USING REC_INCL-INCLUDE
SPACE.
IF P_FM IS INITIAL.
CLEAR REC_INCL-MASTER.
APPEND REC_INCL TO TAB_INCL_SAVE.
ENDIF.
ENDLOOP.
ENDLOOP.
IF TAB_EDIT[] IS INITIAL.
MESSAGE S000(YMSG) DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_SUM_COUNNT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM F_SUM_COUNT .
DATA: L_FLG_NEW TYPE C LENGTH 1,
L_FLG_END TYPE C LENGTH 1,
L_TOT_CNT TYPE P LENGTH 16.
SORT TAB_EDIT BY DEVCLASS NAME INCLUDE ASCENDING.
SORT TAB_INCL_SAVE BY INCLUDE ASCENDING.
DELETE ADJACENT DUPLICATES FROM TAB_INCL_SAVE COMPARING INCLUDE.
LOOP AT TAB_INCL_SAVE INTO REC_INCL.
DELETE TAB_EDIT WHERE NAME = REC_INCL-INCLUDE.
ENDLOOP.
IF P_DETAIL = C_FLG_ON.
APPEND LINES OF TAB_EDIT TO TAB_ALV.
ENDIF.
LOOP AT TAB_EDIT INTO REC_EDIT.
AT NEW NAME.
MOVE C_FLG_ON TO L_FLG_NEW.
ENDAT.
IF L_FLG_NEW = C_FLG_ON.
CLEAR: L_TOT_CNT, REC_ALV, L_FLG_NEW.
MOVE REC_EDIT TO REC_ALV.
ENDIF.
L_TOT_CNT = L_TOT_CNT + REC_EDIT-COUNT.
IF REC_EDIT-FLG_ERR IS NOT INITIAL.
MOVE REC_EDIT-FLG_ERR TO REC_ALV-FLG_ERR.
ENDIF.
IF REC_EDIT-ERR_MSG IS NOT INITIAL.
MOVE REC_EDIT-ERR_MSG TO REC_ALV-ERR_MSG.
ENDIF.
AT END OF NAME.
MOVE C_FLG_ON TO L_FLG_END.
ENDAT.
IF L_FLG_END = C_FLG_ON.
MOVE L_TOT_CNT TO REC_ALV-COUNT.
APPEND REC_ALV TO TAB_ALV.
CLEAR: L_FLG_END, L_TOT_CNT, REC_ALV.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_PROGDIR_SELECT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM F_PROGDIR_SELECT .
SELECT SINGLE NAME
FROM PROGDIR
INTO REC_NAME-NAME
WHERE NAME = REC_TADIR-OBJ_NAME "プログラム名
AND STATE = 'A'. "ステータス有効
IF SY-SUBRC = 0.
MOVE REC_TADIR-DEVCLASS TO REC_NAME-DEVCLASS.
APPEND REC_NAME TO TAB_NAME.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_GET_D010INC
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM F_GET_D010INC .
CLEAR: TAB_INCL.
SELECT *
INTO TABLE TAB_INCL
FROM D010INC
WHERE MASTER = REC_NAME-NAME
AND INCLUDE IN RG_INCL.
ENDFORM.
FORM F_EDIT.
DATA L_OFFSET TYPE I.
DELETE TAB_PGM WHERE SORCE IS INITIAL.
DELETE TAB_PGM
WHERE SORCE+0(1) = '*'.
DELETE TAB_PGM
WHERE SORCE+0(1) = '"'.
LOOP AT TAB_PGM INTO REC_PGM.
FIND '"' IN REC_PGM-SORCE MATCH OFFSET L_OFFSET.
IF SY-SUBRC = 0.
IF L_OFFSET > 1.
L_OFFSET = L_OFFSET - 1.
ENDIF.
IF REC_PGM-SORCE+0(L_OFFSET) IS INITIAL.
DELETE TAB_PGM.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_GET_TFDIR
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM F_GET_TFDIR .
DATA L_PNAME TYPE TFDIR-PNAME.
IF REC_TADIR-OBJ_NAME IS INITIAL.
EXIT.
ENDIF.
CONCATENATE 'SAPL' REC_TADIR-OBJ_NAME INTO L_PNAME.
SELECT
FUNCNAME
PNAME
UP TO 1 ROWS
FROM TFDIR
INTO (REC_NAME-FUNCNAME, REC_NAME-NAME)
WHERE FUNCNAME IN S_PGM
AND PNAME LIKE L_PNAME.
EXIT.
ENDSELECT.
IF SY-SUBRC = 0.
MOVE REC_TADIR-DEVCLASS TO REC_NAME-DEVCLASS.
APPEND REC_NAME TO TAB_NAME.
ENDIF.
ENDFORM.
FORM F_GET_TADIR.
DATA: L_PGMID TYPE TADIR-PGMID VALUE 'R3TR',
L_OBJECT TYPE TADIR-OBJECT,
L_FG TYPE TADIR-OBJECT VALUE 'FUGR',
L_PGM TYPE TADIR-OBJECT VALUE 'PROG'.
IF P_FM = C_FLG_ON.
MOVE L_FG TO L_OBJECT.
SELECT *
INTO TABLE TAB_TADIR
FROM TADIR
WHERE PGMID = L_PGMID
AND OBJECT = L_OBJECT
AND DEVCLASS IN S_DEVCL.
ELSE.
MOVE L_PGM TO L_OBJECT.
SELECT *
INTO TABLE TAB_TADIR
FROM TADIR
WHERE PGMID = L_PGMID
AND OBJECT = L_OBJECT
AND OBJ_NAME IN S_PGM
AND DEVCLASS IN S_DEVCL.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_GET_PGM_INFO
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> REC_NAME_NAME
*& --> C_FLG_ON
*&---------------------------------------------------------------------*
FORM F_GET_PGM_INFO USING VALUE(L_P_NAME)
VALUE(L_P_FLG).
CLEAR REC_EDIT.
IF P_FM = C_FLG_ON.
MOVE REC_NAME-FUNCNAME TO REC_EDIT-NAME.
ELSE.
MOVE REC_NAME-NAME TO REC_EDIT-NAME.
ENDIF.
IF L_P_NAME = C_FLG_ON.
CLEAR REC_REP1.
READ TABLE TAB_REP1 INTO REC_REP1
WITH KEY NAME = REC_EDIT-NAME.
ELSE.
MOVE L_P_NAME TO REC_EDIT-INCLUDE.
ENDIF.
MOVE: REC_REP1-TEXT TO REC_EDIT-TEXT,
REC_NAME-DEVCLASS TO REC_EDIT-DEVCLASS.
TRY .
READ REPORT L_P_NAME INTO TAB_PGM.
CATCH CX_SY_READ_SRC_LINE_TOO_LONG.
MOVE C_FLG_ON TO REC_EDIT-FLG_ERR.
MESSAGE S000(YMSG) WITH 'SOURCE IS OVER 3000BITE..'
INTO REC_EDIT-ERR_MSG.
APPEND REC_EDIT TO TAB_EDIT.
ENDTRY.
IF SY-SUBRC = 0.
IF P_COMM IS INITIAL.
PERFORM F_EDIT.
ENDIF.
*--- GET SOURCE LINE
DESCRIBE TABLE TAB_PGM LINES REC_EDIT-COUNT.
ELSE.
MOVE C_FLG_ON TO REC_EDIT-FLG_ERR.
MESSAGE S000(YMSG) WITH 'PGM' L_P_NAME 'は存在しません'
INTO REC_EDIT-ERR_MSG.
ENDIF.
APPEND REC_EDIT TO TAB_EDIT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_OUTPUT_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM F_OUTPUT_ALV .
PERFORM F_SET_FIELDCAT.
PERFORM F_SET_SORT.
PERFORM F_CALL_ALV_GRID_DISPLAY.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM F_SET_FIELDCAT .
PERFORM F_SET_FIELDCAT_ITEMS USING '1'
'DEVCLASS'
'パッケージ'.
PERFORM F_SET_FIELDCAT_ITEMS USING '2'
'NAME'
'PROGRAM ID'.
PERFORM F_SET_FIELDCAT_ITEMS USING '3'
'DEVCLASS'
'PGM NAME'.
PERFORM F_SET_FIELDCAT_ITEMS USING '4'
'INCLUDE'
'INCLUDE'.
PERFORM F_SET_FIELDCAT_ITEMS USING '5'
'COUNT'
'プログラムステップ数'.
PERFORM F_SET_FIELDCAT_ITEMS USING '6'
'FLG_ERR'
'FLG_ERR'.
PERFORM F_SET_FIELDCAT_ITEMS USING '7'
'ERR_MSG'
'ERR_MSG'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_SET_FIELDCAT_ITEMS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_
*& --> P_
*& --> P_
*&---------------------------------------------------------------------*
FORM F_SET_FIELDCAT_ITEMS USING VALUE(L_P_COL)
VALUE(L_P_ITEM)
VALUE(L_P_TEXT).
CLEAR REC_FIELDCAT.
MOVE:
L_P_COL TO REC_FIELDCAT-COL_POS,
L_P_ITEM TO REC_FIELDCAT-FIELDNAME.
MOVE L_P_TEXT TO : REC_FIELDCAT-DDICTXT,
REC_FIELDCAT-SELTEXT_L,
REC_FIELDCAT-SELTEXT_M,
REC_FIELDCAT-SELTEXT_S.
IF L_P_COL = '5'.
MOVE C_FLG_ON TO REC_FIELDCAT-DO_SUM.
ENDIF.
APPEND REC_FIELDCAT TO TAB_FIELDCAT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_SET_SORT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM F_SET_SORT .
CLEAR REC_SORT.
MOVE: '1' TO REC_SORT-SPOS,
'DEVCLASS' TO REC_SORT-FIELDNAME,
C_FLG_ON TO REC_SORT-UP,
P_DETAIL TO REC_SORT-SUBTOT.
APPEND REC_SORT TO TAB_SORT.
MOVE: '2' TO REC_SORT-SPOS,
'NAME' TO REC_SORT-FIELDNAME,
C_FLG_ON TO REC_SORT-UP,
P_DETAIL TO REC_SORT-SUBTOT.
APPEND REC_SORT TO TAB_SORT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_CALL_ALV_GRID_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM F_CALL_ALV_GRID_DISPLAY .
MOVE: C_FLG_ON TO REC_LAYOUT-COLWIDTH_OPTIMIZE,
C_FLG_ON TO REC_LAYOUT-ZEBRA.
SET PF-STATUS 'STANDARD'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
* I_CALLBACK_PROGRAM = ' '
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
IS_LAYOUT = REC_LAYOUT
IT_FIELDCAT = TAB_FIELDCAT
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
IT_SORT = TAB_SORT
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
I_SAVE = 'A'
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* O_PREVIOUS_SRAL_HANDLER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = TAB_ALV
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
MESSAGE S000(YMSG) WITH 'REUSE_ALV_GRID_DISPLAY'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM.