*&---------------------------------------------------------------------*
*& Include ZALV001
*&---------------------------------------------------------------------*
*& ALV 共用function
*&---------------------------------------------------------------------*
* ALV 宣告
* General Data
TYPE-POOLS: SLIS.
DATA : G_REPID LIKE SY-REPID, "sy-repid 指當前的主程序
POS TYPE SLIS_SORTINFO_ALV , "欄位計數器
I_FIELDCAT TYPE SLIS_FIELDCAT_ALV, "表單列名資料緩存器
PGT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV , "WITH HEADER LINE,
W_FIELDCAT_ALV LIKE LINE OF PGT_FIELDCAT,
*用來存放我們將要在表單顯示區域顯示出來的表單的列名,每個列名對應的
*字段名以及列表頭其他相關屬性信息的數據類型 .
PIS_LAYOUT TYPE SLIS_LAYOUT_ALV, "LAYOUT alv格式
I_LIST_COMMENTS TYPE SLIS_T_LISTHEADER, "用來填充表單標題區域的數据類型
W_LIST_COMMENTS LIKE LINE OF I_LIST_COMMENTS,"表單標題區域的數据類型緩存器
I_SORT TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE, "排序
I_VARIANT TYPE DISVARIANT, "配置(外部使用)
PIS_VARIANT TYPE DISVARIANT,
GS_VARIANT_SAVE(1) TYPE C, "變式類型
IS_PRINT TYPE SLIS_PRINT_ALV , "類型組
I_EVENT_EXIT TYPE SLIS_T_EVENT_EXIT, "EXIT事件記錄器
W_EVENT_EXIT LIKE LINE OF I_EVENT_EXIT, "EXIT事件記錄器緩存器
W_HTML_TOP_OF_PAGE TYPE SLIS_FORMNAME, "字符型
G_EXIT_CAUSED_BY_CALLER,
GS_EXIT_CAUSED_BY_USER TYPE SLIS_EXIT_BY_USER,
I_EXCLUDING TYPE SLIS_T_EXTAB,
G_TABNAME_HEADER TYPE SLIS_TABNAME,
G_TABNAME_ITEM TYPE SLIS_TABNAME,
*使用兩個表格進行輸出時,G_TABNAME_HEADER用于輸出表頭,G_TABNAME_ITEM用于輸出明細
P_ALV_HANDLE(4).
DATA : I_KEYINFO TYPE SLIS_KEYINFO_ALV,
IS_KEYINFO TYPE SLIS_KEYINFO_ALV,
GS_KEYINFO TYPE SLIS_KEYINFO_ALV.
DATA: BEGIN OF SLIS_ALV_CATG.
INCLUDE TYPE SLIS_FIELDCAT_MAIN0.
INCLUDE TYPE SLIS_FIELDCAT_MAIN1.
DATA: END OF SLIS_ALV_CATG.
* Callback
DATA:I_EVENT TYPE SLIS_T_EVENT WITH HEADER LINE, "事件記錄器
I_EVENTS TYPE SLIS_T_EVENT , "事件記錄器
W_EVENTS LIKE LINE OF I_EVENTS, "事件記錄器緩存器
GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER, "ALV報表標頭類型
LS_LINE TYPE SLIS_LISTHEADER, "標頭資料儲存器
G_STATUS_SET TYPE SLIS_FORMNAME VALUE 'PF_STATUS_SET',
G_USER_COMMAND TYPE SLIS_FORMNAME ,"VALUE 'USER_COMMAND',"使用者變量
G_TOP_OF_PAGE TYPE SLIS_FORMNAME ,"VALUE 'TOP_OF_PAGE', "頁首變量類型
G_TOP_OF_LIST TYPE SLIS_FORMNAME ,"VALUE 'TOP_OF_LIST', "報表區域變量
G_END_OF_LIST TYPE SLIS_FORMNAME ."VALUE 'END_OF_LIST'. "頁尾區域變量
*&--------------------------------------------------------------------*
*& Form SET_alv_field_info
*&--------------------------------------------------------------------*
*基本型的ALV
*&KEY & FIX_COLUMN 搭配可固定列
*&POS:欄位計輸器,在傳輸參數時可以為空
*&FIELD_NAME:表格欄位
*&SELTEXT_L:欄位說明
*&KEY:是否為KEY值
*&EMPHASIZE:欄位顏色設定
*&FIX_COLUMN:固定列
*&NO_ZERO:輸出不顯示0
**---------------------------------------------------------------------*
FORM SET_ALV_FIELD_INFO USING POS
FIELD_NAME
SELTEXT_L
KEY
EMPHASIZE
FIX_COLUMN
NO_ZERO .
CLEAR I_FIELDCAT.
I_FIELDCAT-COL_POS = POS.
I_FIELDCAT-FIELDNAME = FIELD_NAME.
I_FIELDCAT-SELTEXT_L = SELTEXT_L.
I_FIELDCAT-KEY = KEY.
I_FIELDCAT-EMPHASIZE = EMPHASIZE.
I_FIELDCAT-FIX_COLUMN = FIX_COLUMN.
I_FIELDCAT-NO_ZERO = NO_ZERO .
APPEND I_FIELDCAT TO PGT_FIELDCAT.
LOOP AT PGT_FIELDCAT INTO W_FIELDCAT_ALV.
CASE W_FIELDCAT_ALV-FIELDNAME.
WHEN 'NAME'.
W_FIELDCAT_ALV-HOTSPOT = 'X'.
WHEN 'MYFIELD'.
W_FIELDCAT_ALV-CHECKBOX = 'X'.
W_FIELDCAT_ALV-SELTEXT_S = 'MyChkBox'.
WHEN OTHERS.
ENDCASE.
MODIFY PGT_FIELDCAT FROM W_FIELDCAT_ALV.
ENDLOOP.
ENDFORM. "SET_alv_field_info
*&--------------------------------------------------------------------*
*& Form SET_alv_field_info1
*&--------------------------------------------------------------------*
*基本型的ALV
*&KEY & FIX_COLUMN 搭配可固定列
*&POS:欄位計輸器,在傳輸參數時可以為空
*&FIELD_NAME:表格欄位
*&SELTEXT_L:欄位說明
*&KEY:是否為KEY值
*&EMPHASIZE:欄位顏色設定
*&FIX_COLUMN:固定列
*&NO_ZERO:輸出不顯示0
*&REF_TABNAME:參考表格
*&REF_FIELDNAME:參考字段名
**---------------------------------------------------------------------*
FORM SET_ALV_FIELD_INFO1 USING POS
FIELD_NAME
SELTEXT_L
REF_TABNAME
REF_FIELDNAME
KEY
EMPHASIZE
FIX_COLUMN
NO_ZERO .
CLEAR I_FIELDCAT.
I_FIELDCAT-COL_POS = POS.
I_FIELDCAT-FIELDNAME = FIELD_NAME.
I_FIELDCAT-SELTEXT_L = SELTEXT_L.
I_FIELDCAT-REF_TABNAME = REF_TABNAME.
I_FIELDCAT-REF_FIELDNAME = REF_FIELDNAME.
I_FIELDCAT-KEY = KEY.
I_FIELDCAT-EMPHASIZE = EMPHASIZE.
I_FIELDCAT-FIX_COLUMN = FIX_COLUMN.
I_FIELDCAT-NO_ZERO = NO_ZERO .
APPEND I_FIELDCAT TO PGT_FIELDCAT.
LOOP AT PGT_FIELDCAT INTO W_FIELDCAT_ALV.
CASE W_FIELDCAT_ALV-FIELDNAME.
WHEN 'NAME'.
W_FIELDCAT_ALV-HOTSPOT = 'X'.
WHEN 'MYFIELD'.
W_FIELDCAT_ALV-CHECKBOX = 'X'.
W_FIELDCAT_ALV-SELTEXT_S = 'MyChkBox'.
WHEN OTHERS.
ENDCASE.
MODIFY PGT_FIELDCAT FROM W_FIELDCAT_ALV.
IF W_FIELDCAT_ALV-SELTEXT_L IS INITIAL .
DELETE PGT_FIELDCAT .
ENDIF .
ENDLOOP.
ENDFORM. "SET_alv_field_info1
*&--------------------------------------------------------------------*
*& Form SET_alv_field_info2
*&--------------------------------------------------------------------*
*基本型的ALV
*&KEY & FIX_COLUMN 搭配可固定列
*&POS:欄位計輸器,在傳輸參數時可以為空
*&FIELD_NAME:表格欄位
*&SELTEXT_L:欄位說明
*&KEY:是否為KEY值
*&EMPHASIZE:欄位顏色設定
*&FIX_COLUMN:固定列
*&NO_ZERO:輸出不顯示0
*&SELTEXT_M:欄位說明
*&OUTPUTLEN:輸出長度
*&TABNAME:結構名
**---------------------------------------------------------------------*
FORM SET_ALV_FIELD_INFO2 USING POS
FIELD_NAME
SELTEXT_L
SELTEXT_M
KEY
EMPHASIZE
FIX_COLUMN
NO_ZERO
OUTPUTLEN
TABNAME.
CLEAR I_FIELDCAT.
I_FIELDCAT-COL_POS = POS.
I_FIELDCAT-FIELDNAME = FIELD_NAME.
I_FIELDCAT-SELTEXT_L = SELTEXT_L.
I_FIELDCAT-SELTEXT_M = SELTEXT_M.
I_FIELDCAT-KEY = KEY.
I_FIELDCAT-EMPHASIZE = EMPHASIZE.
I_FIELDCAT-FIX_COLUMN = FIX_COLUMN.
I_FIELDCAT-NO_ZERO = NO_ZERO .
I_FIELDCAT-OUTPUTLEN = OUTPUTLEN .
I_FIELDCAT-TABNAME = TABNAME .
APPEND I_FIELDCAT TO PGT_FIELDCAT.
ENDFORM. "SET_alv_field_info
*&--------------------------------------------------------------------*
*& Form F_CALL_ALV
*&--------------------------------------------------------------------*
*雙層的ALV
*&TABNAME_HEADER: 第一層欄位名
*&TABNAME_ITEM:第二層欄位名
*&OUTTAB_HEADER:第一層字段內容
*&OUTTAB_ITEM:第二層字段內容
**---------------------------------------------------------------------*
FORM F_CALL_ALV TABLES OUTTAB_HEADER OUTTAB_ITEM
USING VALUE(TABNAME_HEADER)
VALUE(TABNAME_ITEM).
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
* I_CALLBACK_PF_STATUS_SET = 'F_SET_STATUS'
* I_CALLBACK_USER_COMMAND =
IS_LAYOUT = PIS_LAYOUT
IT_FIELDCAT = PGT_FIELDCAT[]
I_DEFAULT = 'X'
I_SAVE = 'A'
IS_VARIANT = I_VARIANT
I_TABNAME_HEADER = TABNAME_HEADER "第一
I_TABNAME_ITEM = TABNAME_ITEM "第二
IS_KEYINFO = I_KEYINFO
IS_PRINT = IS_PRINT
I_BYPASSING_BUFFER = 'X'
I_BUFFER_ACTIVE = ' '
TABLES
T_OUTTAB_HEADER = OUTTAB_HEADER[] "第一
T_OUTTAB_ITEM = OUTTAB_ITEM[] "第二
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. " F_CALL_ALV
*---------------------------------------------------------------------*
* FORM get_alv_event *
*---------------------------------------------------------------------*
*&取得現有可用的Alv Event .
*---------------------------------------------------------------------*
FORM GET_ALV_EVENT.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = I_EVENTS[].
ENDFORM. "get_alv_event
*&--------------------------------------------------------------------*
*& Form FILL_ALV_EVENT
*&--------------------------------------------------------------------*
*&P_EVENTID: EVENT ID
*&TOP-OF-PAGE
*&END-OF-PAGE
*&END-OF-LIST
*&P_FUNCNAME: FUNCTION NAME
*---------------------------------------------------------------------*
FORM FILL_ALV_EVENT USING VALUE(P_EVENTID)
VALUE(P_FUNCNAME).
IF I_EVENTS[] IS INITIAL .
PERFORM GET_ALV_EVENT.
ENDIF.
READ TABLE I_EVENTS WITH KEY NAME = P_EVENTID
INTO W_EVENTS.
IF SY-SUBRC = 0.
MOVE P_FUNCNAME TO W_EVENTS-FORM.
MODIFY I_EVENTS FROM W_EVENTS INDEX SY-TABIX."將標題區數据賦值給W_EVENTS
ENDIF.
ENDFORM. "FILL_ALV_EVENT
*---------------------------------------------------------------------*
* FORM alv_end_of_list *
*---------------------------------------------------------------------*
*& FOR GRID
*---------------------------------------------------------------------*
*FORM ALV_END_OF_LIST.
*
* CLEAR: I_LIST_COMMENTS[].
* W_LIST_COMMENTS-TYP = 'A'. "H = Header, S = Selection, A = Action
* W_LIST_COMMENTS-KEY = ''.
* W_LIST_COMMENTS-INFO = '報表結束'.
* APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.
*
* CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
* EXPORTING
* IT_LIST_COMMENTARY = I_LIST_COMMENTS
* I_LOGO = 'HOTEL_5_STAR'
* I_END_OF_LIST_GRID = 'X'.
*
*ENDFORM. "alv_end_of_list
*&---------------------------------------------------------------------*
* FORM alv_end_of_page *
*---------------------------------------------------------------------*
*& FOR GRID
*---------------------------------------------------------------------*
FORM ALV_END_OF_PAGE.
ENDFORM. "ALV_END_OF_PAGE
*&---------------------------------------------------------------------*
*& Form LAYOUT_INIT
*&---------------------------------------------------------------------*
FORM LAYOUT_INIT USING RS_LAYOUT TYPE SLIS_LAYOUT_ALV.
RS_LAYOUT-DETAIL_POPUP = 'X'.
ENDFORM. " layout_init
*&---------------------------------------------------------------------*
*& Form EVENT_EXIT_BUILD
*&---------------------------------------------------------------------*
*&I_EVENT_EXIT:
*&EXIT-UCOMM:設置触發彈出詳細信息窗口的功能碼,這里是雙擊
*&EXIT-BEFORE:触發前參數
*&EXIT-AFTER:触發後參數
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EVENT_EXIT_BUILD .
CLEAR: I_EVENT_EXIT[].
* Pick
W_EVENT_EXIT-UCOMM = '&ETA'. "設置触發彈出詳細信息窗口的功能碼,這里是雙擊
W_EVENT_EXIT-BEFORE = ' '.
W_EVENT_EXIT-AFTER = 'X'.
APPEND W_EVENT_EXIT TO I_EVENT_EXIT.
ENDFORM. " EVENT_EXIT_BUILD
*&---------------------------------------------------------------------*
*& Form PRINT_BUILD
*&---------------------------------------------------------------------*
*&NO_PRINT_LISTINFOS:Display no listinfos
*----------------------------------------------------------------------*
FORM PRINT_BUILD .
IS_PRINT-NO_PRINT_LISTINFOS = 'X'.
ENDFORM. " PRINT_BUILD
*&---------------------------------------------------------------------*
*& Form LAYOUT_BUILD
*&---------------------------------------------------------------------*
*&ZEBRA:可選行顏色設置
*&DETAIL_POPUP:鼠標右鍵功能
*&F2CODE:雙擊鼠表功能
*&NO_VLINE:豎直線條設置
*&COLWIDTH_OPTIMIZE:輸出寬度調節
*&DETAIL_INITIAL_LINES:橫線設置
*&DETAIL_TITLEBAR:輸出alv的toolbar
*----------------------------------------------------------------------*
*& FOR GRID
*----------------------------------------------------------------------*
FORM LAYOUT_BUILD .
"用于定義ALV表單的相關格式、屬性
PIS_LAYOUT-ZEBRA = 'X'.
PIS_LAYOUT-DETAIL_POPUP = 'X'.
G_REPID = SY-REPID.
PIS_LAYOUT-F2CODE = '&ETA'.
PIS_LAYOUT-NO_VLINE = ' '.
PIS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
PIS_LAYOUT-DETAIL_INITIAL_LINES = 'X'.
PIS_LAYOUT-DETAIL_TITLEBAR = 'Detail Title Bar'.
ENDFORM. " LAYOUT_BUILD
*&---------------------------------------------------------------------*
*& Form ALV_REPORT_DISPLAY
*&---------------------------------------------------------------------*
*& 基本型GRID ALV FOR HANNSTAR.
*&---------------------------------------------------------------------*
*& Grid 格式為網格格式:
*& 鼠標右鍵:可用
*& TOP-OF-PAGE:只可固定于左對齊位置
*& 輸出長度不受系統限制(1023)
*& 列寬可隨意變更
*&---------------------------------------------------------------------*
FORM ALV_REPORT_DISPLAY TABLES ITAB.
W_HTML_TOP_OF_PAGE = 'HTML_TOP_OF_PAGE'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID "前程序
I_BACKGROUND_ID = ' '
* I_BACKGROUND_ID = 'ALV_BACKGROUND'
* I_BACKGROUND_ID = 'SIWB_WALLPAPER'
I_DEFAULT = 'X'
I_SAVE = 'A'
IS_LAYOUT = PIS_LAYOUT "子函LAYOUT_BUILD填充的格式定?
IT_FIELDCAT = PGT_FIELDCAT[] "子函FIELDS填充的各列
I_CALLBACK_USER_COMMAND = G_USER_COMMAND
* I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_CALLBACK_HTML_TOP_OF_PAGE = W_HTML_TOP_OF_PAGE
IT_EVENTS = I_EVENTS
IT_EVENT_EXIT = I_EVENT_EXIT
* IS_LAYOUT = SLA
IS_PRINT = IS_PRINT
TABLES
T_OUTTAB = ITAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
*定義相關快捷按鈕,以免出現退回等按鈕丟矢的情況
IF SY-SUBRC = 0.
IF G_EXIT_CAUSED_BY_CALLER = 'X'.
ELSE.
IF GS_EXIT_CAUSED_BY_USER-BACK = 'X'. "F3
ELSE.
IF GS_EXIT_CAUSED_BY_USER-EXIT = 'X'. "F15
ELSE.
IF GS_EXIT_CAUSED_BY_USER-CANCEL = 'X'. "F12
ELSE.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ELSE.
ENDIF.
ENDFORM. "ALV_REPORT_DISPLAY
*---------------------------------------------------------------------*
* FORM ALV_report *
*---------------------------------------------------------------------*
* 基本型的ALV *
*---------------------------------------------------------------------*
FORM ALV_REPORT TABLES ITAB
USING PROGRAM_NAME
STRUCTURE_NAME
PROGRAM_USCOMM
PROGRAM_STATUS
CHKBOX
COLOR.
* ALV 宣告
DATA :PIS_LAYOUT TYPE SLIS_LAYOUT_ALV,
PIS_VARIANT TYPE DISVARIANT.
IF PGT_FIELDCAT[] IS INITIAL .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = PROGRAM_NAME
I_STRUCTURE_NAME = STRUCTURE_NAME
I_CLIENT_NEVER_DISPLAY = 'X'
CHANGING
CT_FIELDCAT = PGT_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
ENDIF.
IF P_ALV_HANDLE IS INITIAL .
ELSE.
PIS_VARIANT-HANDLE = P_ALV_HANDLE.
ENDIF.
PIS_LAYOUT-F2CODE = 'PICK'.
PIS_VARIANT-REPORT = PROGRAM_NAME.
PIS_VARIANT-USERNAME = SY-UNAME.
IF CHKBOX = 'X'.
PIS_LAYOUT-BOX_FIELDNAME = 'CHKBOX'.
ELSE.
CLEAR PIS_LAYOUT-BOX_FIELDNAME.
ENDIF.
IF COLOR = 'X'.
PIS_LAYOUT-INFO_FIELDNAME = 'COLOR'.
ELSE.
CLEAR PIS_LAYOUT-INFO_FIELDNAME .
ENDIF.
PIS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
IF COLOR = ' ' .
PIS_LAYOUT-ZEBRA = 'X' .
ENDIF.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = PROGRAM_NAME
I_CALLBACK_USER_COMMAND = PROGRAM_USCOMM
I_CALLBACK_PF_STATUS_SET = PROGRAM_STATUS
I_STRUCTURE_NAME = STRUCTURE_NAME
IS_LAYOUT = PIS_LAYOUT
IS_VARIANT = PIS_VARIANT
IT_FIELDCAT = PGT_FIELDCAT[]
I_SAVE = 'A'
TABLES
T_OUTTAB = ITAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. "alv_report
*---------------------------------------------------------------------*
* FORM popup_alv_log *
*---------------------------------------------------------------------*
* popup 型態的ALV
*****************
FORM POPUP_ALV_LOG TABLES ITAB
USING PROGRAM_NAME STRUCTURE_NAME .
*
**** >>> ALV 宣告
DATA : PIS_LAYOUT TYPE SLIS_LAYOUT_ALV,
PIS_VARIANT TYPE DISVARIANT.
DATA: PLS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
**** <<< ALV 宣告
IF PGT_FIELDCAT[] IS INITIAL .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = PROGRAM_NAME
I_STRUCTURE_NAME = STRUCTURE_NAME
I_CLIENT_NEVER_DISPLAY = 'X'
CHANGING
CT_FIELDCAT = PGT_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
ENDIF.
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
I_CALLBACK_PROGRAM = PROGRAM_NAME
* i_structure_name = structure_name
IT_FIELDCAT = PGT_FIELDCAT[]
I_TITLE = 'Message Log'
I_SELECTION = ''
I_TABNAME = 'ITAB'
I_ZEBRA = 'X'
TABLES
T_OUTTAB = ITAB
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. "popup_alv_log
*&---------------------------------------------------------------------*
*& Form popup_alv_log_full2
*&---------------------------------------------------------------------*
**** 浮動式的ALV report
*----------------------------------------------------------------------*
FORM POPUP_ALV_LOG2 TABLES ITAB
USING PROGRAM_NAME STRUCTURE_NAME
PROGRAM_USCOMM PROGRAM_STATUS
CHKBOX
COLOR
ZEBRA
..
.
**** >>> ALV 宣告
DATA : "pgt_fieldcat TYPE slis_t_fieldcat_alv,
PIS_LAYOUT TYPE SLIS_LAYOUT_ALV,
* is_exit TYPE slis_exit_by_user,
PIS_VARIANT TYPE DISVARIANT.
* is_variant2 TYPE disvariant.
**** <<< ALV 宣告
IF PGT_FIELDCAT[] IS INITIAL .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = PROGRAM_NAME
I_STRUCTURE_NAME = STRUCTURE_NAME
I_CLIENT_NEVER_DISPLAY = 'X'
CHANGING
CT_FIELDCAT = PGT_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
ENDIF.
PIS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
PIS_LAYOUT-F2CODE = 'PICK'.
* is_layout-info_fieldname = 'COLOR'.
* pis_variant-report = program_name.
* is_variant-handle = '0001'.
* pis_variant-username = sy-uname.
* is_variant-log_group = '000A'.
IF CHKBOX = 'X'.
PIS_LAYOUT-BOX_FIELDNAME = 'CHKBOX'.
ELSE.
CLEAR PIS_LAYOUT-BOX_FIELDNAME.
ENDIF.
IF COLOR = 'X'.
PIS_LAYOUT-INFO_FIELDNAME = 'COLOR'.
ELSE.
CLEAR PIS_LAYOUT-INFO_FIELDNAME .
ENDIF.
IF ZEBRA = 'X'.
PIS_LAYOUT-ZEBRA = 'X'.
ELSE.
CLEAR PIS_LAYOUT-ZEBRA .
ENDIF.
PIS_VARIANT-REPORT = PROGRAM_NAME.
PIS_VARIANT-HANDLE = '0001'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = PROGRAM_NAME
I_CALLBACK_USER_COMMAND = PROGRAM_USCOMM
I_CALLBACK_PF_STATUS_SET = PROGRAM_STATUS
I_STRUCTURE_NAME = STRUCTURE_NAME
IS_LAYOUT = PIS_LAYOUT
IS_VARIANT = PIS_VARIANT
IT_FIELDCAT = PGT_FIELDCAT[]
IT_SORT = I_SORT[]
IS_PRINT = IS_PRINT
IT_EVENTS = I_EVENT[]
I_SAVE = 'A' "HP_311471
I_SCREEN_START_COLUMN = 5
I_SCREEN_START_LINE = 5
I_SCREEN_END_COLUMN = 90
I_SCREEN_END_LINE = 20
TABLES
T_OUTTAB = ITAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
*FORM user_command USING r_ucomm LIKE sy-ucomm
*rs_selfield TYPE slis_selfield.
*
*FORM status USING rt_extab TYPE slis_t_extab.
ENDFORM. " popup_alv_log_full2
*&--------------------------------------------------------------------*
*& Form popup_alv_log3
*&--------------------------------------------------------------------*
FORM POPUP_ALV_LOG3 TABLES ITAB
USING PROGRAM_NAME STRUCTURE_NAME
PROGRAM_USCOMM PROGRAM_STATUS
CHKBOX
COLOR
ZEBRA
P_TYPE.
* 1:正常ALV , 2: Err Log
*DATA : BEGIN OF pgt_msg OCCURS 0 .
*DATA : type LIKE bapiret1-type,
* message LIKE bapiret1-message,
* color LIKE wb2_alv_head_dyn-linecolor .
*DATA : END OF pgt_msg.
**** >>> ALV 宣告
DATA : L_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
PIS_LAYOUT TYPE SLIS_LAYOUT_ALV,
* is_exit TYPE slis_exit_by_user,
PIS_VARIANT TYPE DISVARIANT.
* is_variant2 TYPE disvariant.
CLEAR: PGT_FIELDCAT, PGT_FIELDCAT[].
**** <<< ALV 宣告
CASE P_TYPE.
WHEN '1' OR ' '.
IF PGT_FIELDCAT[] IS INITIAL .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = PROGRAM_NAME
I_STRUCTURE_NAME = STRUCTURE_NAME
I_CLIENT_NEVER_DISPLAY = 'X'
CHANGING
CT_FIELDCAT = PGT_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
ENDIF.
WHEN '2'.
L_FIELDCAT-FIELDNAME = 'TYPE'.
L_FIELDCAT-REF_FIELDNAME = 'BAPIRET1'.
L_FIELDCAT-REF_TABNAME = 'BAPIRET1'.
APPEND L_FIELDCAT TO PGT_FIELDCAT .
CLEAR L_FIELDCAT.
L_FIELDCAT-FIELDNAME = 'MESSAGE'.
L_FIELDCAT-REF_FIELDNAME = 'MESSAGE'.
L_FIELDCAT-REF_TABNAME = 'BAPIRET1'.
APPEND L_FIELDCAT TO PGT_FIELDCAT .
CLEAR L_FIELDCAT.
L_FIELDCAT-FIELDNAME = 'LINECOLOR'.
L_FIELDCAT-REF_FIELDNAME = 'LINECOLOR'.
L_FIELDCAT-REF_TABNAME = 'WB2_ALV_HEAD_DYN'.
APPEND L_FIELDCAT TO PGT_FIELDCAT .
CLEAR L_FIELDCAT.
*
ENDCASE.
PIS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
PIS_LAYOUT-F2CODE = 'PICK'.
* is_layout-info_fieldname = 'COLOR'.
* pis_variant-report = program_name.
* is_variant-handle = '0001'.
* pis_variant-username = sy-uname.
* is_variant-log_group = '000A'.
IF CHKBOX = 'X'.
PIS_LAYOUT-BOX_FIELDNAME = 'CHKBOX'.
ELSE.
CLEAR PIS_LAYOUT-BOX_FIELDNAME.
ENDIF.
IF COLOR = 'X'.
PIS_LAYOUT-INFO_FIELDNAME = 'COLOR'.
ELSE.
CLEAR PIS_LAYOUT-INFO_FIELDNAME .
ENDIF.
IF ZEBRA = 'X'.
PIS_LAYOUT-ZEBRA = 'X'.
ELSE.
CLEAR PIS_LAYOUT-ZEBRA .
ENDIF.
PIS_VARIANT-REPORT = PROGRAM_NAME.
PIS_VARIANT-HANDLE = '0001'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = PROGRAM_NAME
I_CALLBACK_USER_COMMAND = PROGRAM_USCOMM
I_CALLBACK_PF_STATUS_SET = PROGRAM_STATUS
I_STRUCTURE_NAME = STRUCTURE_NAME
IS_LAYOUT = PIS_LAYOUT
IS_VARIANT = PIS_VARIANT
IT_FIELDCAT = PGT_FIELDCAT[]
IT_SORT = I_SORT[]
IS_PRINT = IS_PRINT
IT_EVENTS = I_EVENT[]
I_SAVE = 'A' "HP_311471
I_SCREEN_START_COLUMN = 5
I_SCREEN_START_LINE = 5
I_SCREEN_END_COLUMN = 90
I_SCREEN_END_LINE = 20
TABLES
T_OUTTAB = ITAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
*FORM user_command USING r_ucomm LIKE sy-ucomm
*rs_selfield TYPE slis_selfield.
*
*FORM status USING rt_extab TYPE slis_t_extab.
ENDFORM. " popup_alv_log_3
*---------------------------------------------------------------------*
* FORM popup_alv_log4 *
*---------------------------------------------------------------------*
* popup 型態的ALV
*****************
FORM POPUP_ALV_LOG4 TABLES ITAB
USING PROGRAM_NAME STRUCTURE_NAME P_TITLE.
*
**** >>> ALV 宣告
DATA :
PIS_LAYOUT TYPE SLIS_LAYOUT_ALV,
PIS_VARIANT TYPE DISVARIANT,
PLS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
DATA: IEX TYPE SLIS_T_EXTAB.
DATA: XEX LIKE LINE OF IEX.
DATA: I_TITLE(50).
**** <<< ALV 宣告
IF PGT_FIELDCAT[] IS INITIAL .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = PROGRAM_NAME
I_STRUCTURE_NAME = STRUCTURE_NAME
I_CLIENT_NEVER_DISPLAY = 'X'
CHANGING
CT_FIELDCAT = PGT_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
ENDIF.
XEX-FCODE = '&NT1'. APPEND XEX TO IEX.
XEX-FCODE = '&OUP'. APPEND XEX TO IEX.
XEX-FCODE = '&ODN'. APPEND XEX TO IEX.
XEX-FCODE = '&ILT'. APPEND XEX TO IEX.
XEX-FCODE = '&OL0'. APPEND XEX TO IEX.
XEX-FCODE = '%SC' . APPEND XEX TO IEX.
XEX-FCODE = '%SC+'. APPEND XEX TO IEX.
IF P_TITLE = SPACE.
I_TITLE = 'Message Log'.
ELSE.
I_TITLE = P_TITLE.
ENDIF.
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
I_CALLBACK_PROGRAM = PROGRAM_NAME
IT_FIELDCAT = PGT_FIELDCAT[]
I_TITLE = I_TITLE
I_SCREEN_START_COLUMN = 5
I_SCREEN_START_LINE = 5
I_SCREEN_END_COLUMN = 110
I_SCREEN_END_LINE = 20
I_SELECTION = 'X'
I_TABNAME = 'ITAB'
I_ZEBRA = 'X'
IT_EXCLUDING = IEX
TABLES
T_OUTTAB = ITAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. "popup_alv_log4
*&--------------------------------------------------------------------*
*& Form alv_report
*&--------------------------------------------------------------------*
* 支援 ALV Event Report 的 ALV
FORM ALV_REPORT_EVENT TABLES ITAB
USING PROGRAM_NAME
STRUCTURE_NAME
PROGRAM_USCOMM
PROGRAM_STATUS
CHKBOX
COLOR
ZEBRA
NO_TOTALLINE.
IF PGT_FIELDCAT[] IS INITIAL .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = PROGRAM_NAME
I_STRUCTURE_NAME = STRUCTURE_NAME
I_CLIENT_NEVER_DISPLAY = 'X'
CHANGING
CT_FIELDCAT = PGT_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
ENDIF.
PIS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
PIS_LAYOUT-F2CODE = 'PICK'.
PIS_LAYOUT-TOTALS_TEXT = 'Totals'.
PIS_VARIANT-REPORT = PROGRAM_NAME.
PIS_VARIANT-HANDLE = I_VARIANT-HANDLE.
PIS_VARIANT-USERNAME = SY-UNAME.
IF CHKBOX = 'X'.
PIS_LAYOUT-BOX_FIELDNAME = 'CHKBOX'.
ELSE.
CLEAR PIS_LAYOUT-BOX_FIELDNAME.
ENDIF.
IF NO_TOTALLINE = 'X'.
PIS_LAYOUT-NO_TOTALLINE = 'X'.
ELSE.
CLEAR PIS_LAYOUT-NO_TOTALLINE.
ENDIF.
IF COLOR = 'X'.
PIS_LAYOUT-INFO_FIELDNAME = 'COLOR'.
ELSE.
CLEAR PIS_LAYOUT-INFO_FIELDNAME .
ENDIF.
IF ZEBRA = 'X'.
PIS_LAYOUT-ZEBRA = 'X'.
ELSE.
CLEAR PIS_LAYOUT-ZEBRA .
ENDIF.
IS_PRINT-NO_CHANGE_PRINT_PARAMS = 'X'.
IS_PRINT-NO_PRINT_LISTINFOS = 'X'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = PROGRAM_NAME
I_CALLBACK_USER_COMMAND = PROGRAM_USCOMM
I_CALLBACK_PF_STATUS_SET = PROGRAM_STATUS
I_STRUCTURE_NAME = STRUCTURE_NAME
IS_LAYOUT = PIS_LAYOUT
IS_VARIANT = PIS_VARIANT
IT_FIELDCAT = PGT_FIELDCAT[]
IT_SORT = I_SORT[]
IS_PRINT = IS_PRINT
IT_EVENTS = I_EVENT[]
I_SAVE = 'A' "HP_311471
TABLES
T_OUTTAB = ITAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. "alv_report_enevt
*&--------------------------------------------------------------------*
*& Form alv_report
*&--------------------------------------------------------------------*
* 多個ALV Report 在一個報表的 型態
FORM BLOCK_ALV_REPORT TABLES ITAB "Type = 2 用
EVENTS "Type = 2 用
USING VALUE(TYPE)
PROGRAM_NAME
PROGRAM_USCOMM
PROGRAM_STATUS
STRUCTURE_NAME "Type = 2 用
ITAB_NAME "Type = 2 用
BLOCK_ALV_TITLE "Type = 2 用
CHKBOX "Type = 2 用
COLOR "Type = 2 用
ZEBRA "Type = 2 用
.
**** >>> ALV 宣告
DATA : PGT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
PIS_LAYOUT TYPE SLIS_LAYOUT_ALV,
PIS_VARIANT TYPE DISVARIANT.
**** <<< ALV 宣告
IF TYPE = 1 .
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
I_CALLBACK_PROGRAM = PROGRAM_NAME
I_CALLBACK_USER_COMMAND = PROGRAM_USCOMM
I_CALLBACK_PF_STATUS_SET = PROGRAM_STATUS.
EXIT.
ENDIF.
IF TYPE = 2.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = PROGRAM_NAME
I_STRUCTURE_NAME = STRUCTURE_NAME
I_CLIENT_NEVER_DISPLAY = 'X'
CHANGING
CT_FIELDCAT = PGT_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
PIS_LAYOUT-F2CODE = 'PICK'.
PIS_VARIANT-REPORT = PROGRAM_NAME.
PIS_VARIANT-USERNAME = SY-UNAME.
IF CHKBOX = 'X'.
PIS_LAYOUT-BOX_FIELDNAME = 'CHKBOX'.
ELSE.
CLEAR PIS_LAYOUT-BOX_FIELDNAME.
ENDIF.
IF COLOR = 'X'.
PIS_LAYOUT-INFO_FIELDNAME = 'COLOR'.
ELSE.
CLEAR PIS_LAYOUT-INFO_FIELDNAME .
ENDIF.
IF ZEBRA = 'X'.
PIS_LAYOUT-ZEBRA = 'X'.
ELSE.
CLEAR PIS_LAYOUT-ZEBRA .
ENDIF.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IT_FIELDCAT = PGT_FIELDCAT[]
IS_LAYOUT = PIS_LAYOUT
I_TABNAME = ITAB_NAME
IT_EVENTS = EVENTS[]
I_TEXT = BLOCK_ALV_TITLE
TABLES
T_OUTTAB = ITAB.
EXIT.
ENDIF.
IF TYPE = 3.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'.
EXIT.
ENDIF.
ENDFORM. "alv_report
*&--------------------------------------------------------------------*
*& Form alv_report_hierseq
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->ITAB_H text
* -->ITAB_D text
* -->VALUE(PROGRtextAME)
* -->VALUE(STRUCtext_NAME_H)
* -->VALUE(STRUCtext_NAME_D)
* -->VALUE(ITAB_text_H)
* -->VALUE(ITAB_text_D)
* -->VALUE(ITAB_textH)
* -->VALUE(ITAB_textD)
* -->VALUE(PROGRtextSCOMM)
* -->VALUE(PROGRtextTATUS)
* -->VALUE(CHKBOtext
* -->VALUE(COLORtext
* -->VALUE(ZEBRAtext
* -->VALUE(STARTtextUMN)
* -->VALUE(STARTtextE)
*---------------------------------------------------------------------*
FORM ALV_REPORT_HIERSEQ TABLES ITAB_H " STRUCTURE i_bkpf
ITAB_D " STRUCTURE i_bseg
USING VALUE(PROGRAM_NAME)
VALUE(STRUCTURE_NAME_H)
VALUE(STRUCTURE_NAME_D)
VALUE(ITAB_NAME_H)
VALUE(ITAB_NAME_D)
VALUE(ITAB_TXT_H)
VALUE(ITAB_TXT_D)
VALUE(PROGRAM_USCOMM)
VALUE(PROGRAM_STATUS)
VALUE(CHKBOX)
VALUE(COLOR)
VALUE(ZEBRA)
VALUE(START_COLUMN)
VALUE(START_LINE)
VALUE(KEYINFO).
*** >>> ALV 宣告
DATA : PGT_FIELDCAT_A TYPE SLIS_T_FIELDCAT_ALV,
PGT_FIELDCAT_B TYPE SLIS_T_FIELDCAT_ALV,
PGT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
P_FIELD TYPE SLIS_FIELDCAT_ALV,
PIS_LAYOUT TYPE SLIS_LAYOUT_ALV,
PIS_VARIANT TYPE DISVARIANT,
P_CNT LIKE SY-INDEX.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = PROGRAM_NAME
I_STRUCTURE_NAME = STRUCTURE_NAME_H
I_INTERNAL_TABNAME = ITAB_NAME_H
I_CLIENT_NEVER_DISPLAY = ''
CHANGING
CT_FIELDCAT = PGT_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = PROGRAM_NAME
I_STRUCTURE_NAME = STRUCTURE_NAME_D
I_INTERNAL_TABNAME = ITAB_NAME_D
I_CLIENT_NEVER_DISPLAY = ''
CHANGING
CT_FIELDCAT = PGT_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
* LOOP AT pgt_fieldcat_a INTO p_field .
* ADD 1 TO p_cnt .
* p_field-col_pos = p_cnt.
* APPEND p_field TO pgt_fieldcat .
* ENDLOOP.
* LOOP AT pgt_fieldcat_b INTO p_field .
* ADD 1 TO p_cnt .
* p_field-col_pos = p_cnt.
* APPEND p_field TO pgt_fieldcat .
* ENDLOOP.
PIS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
PIS_LAYOUT-F2CODE = 'PICK'.
PIS_LAYOUT-ITEM_TEXT = ITAB_TXT_D.
PIS_LAYOUT-HEADER_TEXT = ITAB_TXT_H.
PIS_VARIANT-REPORT = PROGRAM_NAME.
PIS_VARIANT-USERNAME = SY-UNAME.
IF CHKBOX = 'X'.
PIS_LAYOUT-BOX_FIELDNAME = 'CHKBOX'.
ELSE.
CLEAR PIS_LAYOUT-BOX_FIELDNAME.
ENDIF.
IF COLOR = 'X'.
PIS_LAYOUT-INFO_FIELDNAME = 'COLOR'.
ELSE.
CLEAR PIS_LAYOUT-INFO_FIELDNAME .
ENDIF.
IF ZEBRA = 'X'.
PIS_LAYOUT-ZEBRA = 'X'.
ELSE.
CLEAR PIS_LAYOUT-ZEBRA .
ENDIF.
DATA : P_TAB_H TYPE SLIS_TABNAME ,
P_TAB_D TYPE SLIS_TABNAME .
P_TAB_H = ITAB_NAME_H.
P_TAB_D = ITAB_NAME_D.
PIS_VARIANT-REPORT = SY-CPROG.
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = PROGRAM_NAME
I_CALLBACK_PF_STATUS_SET = PROGRAM_STATUS
I_CALLBACK_USER_COMMAND = PROGRAM_USCOMM
IS_LAYOUT = PIS_LAYOUT
IT_FIELDCAT = PGT_FIELDCAT[]
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* i_screen_start_column = 5
* i_screen_start_line = 5
* i_screen_end_column = 90
* i_screen_end_line = 20
* I_DEFAULT = 'X'
I_SAVE = 'X'
* is_variant = pis_variant
* it_events = i_event[]
* IT_EVENT_EXIT =
I_TABNAME_HEADER = P_TAB_H
I_TABNAME_ITEM = P_TAB_D
* I_STRUCTURE_NAME_HEADER = 'BKPF'
* I_STRUCTURE_NAME_ITEM = 'BSEG'
IS_KEYINFO = KEYINFO
* IS_PRINT =
* IS_REPREP_ID =
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB_HEADER = ITAB_H[]
T_OUTTAB_ITEM = ITAB_D[]
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. "alv_report_HIERSEQ
*&--------------------------------------------------------------------*
*& Form alv_report_hierseq_1
*&--------------------------------------------------------------------*
FORM ALV_REPORT_HIERSEQ_1 TABLES ITAB_H
ITAB_D
USING VALUE(PROGRAM_NAME)
VALUE(ITAB_NAME_H)
VALUE(ITAB_NAME_D)
VALUE(ITAB_TXT_H)
VALUE(ITAB_TXT_D)
VALUE(PROGRAM_USCOMM)
VALUE(PROGRAM_STATUS)
VALUE(CHKBOX)
VALUE(COLOR)
VALUE(ZEBRA)
VALUE(START_COLUMN)
VALUE(START_LINE)
VALUE(KEYINFO).
DATA : P_TAB_H TYPE SLIS_TABNAME ,
P_TAB_D TYPE SLIS_TABNAME .
CLEAR PIS_VARIANT.
PIS_VARIANT-REPORT = SY-CPROG.
PIS_VARIANT-REPORT = PROGRAM_NAME.
PIS_VARIANT-USERNAME = SY-UNAME.
PIS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
PIS_LAYOUT-F2CODE = 'PICK'.
PIS_LAYOUT-ITEM_TEXT = ITAB_TXT_D.
PIS_LAYOUT-HEADER_TEXT = ITAB_TXT_H.
IF CHKBOX = 'X'.
PIS_LAYOUT-BOX_FIELDNAME = 'CHKBOX'.
ELSE.
CLEAR PIS_LAYOUT-BOX_FIELDNAME.
ENDIF.
IF COLOR = 'X'.
PIS_LAYOUT-INFO_FIELDNAME = 'COLOR'.
ELSE.
CLEAR PIS_LAYOUT-INFO_FIELDNAME .
ENDIF.
IF ZEBRA = 'X'.
PIS_LAYOUT-ZEBRA = 'X'.
ELSE.
CLEAR PIS_LAYOUT-ZEBRA .
ENDIF.
P_TAB_H = ITAB_NAME_H.
P_TAB_D = ITAB_NAME_D.
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = PROGRAM_NAME
I_CALLBACK_PF_STATUS_SET = PROGRAM_STATUS
I_CALLBACK_USER_COMMAND = PROGRAM_USCOMM
IS_LAYOUT = PIS_LAYOUT
IT_FIELDCAT = PGT_FIELDCAT[]
I_SAVE = 'X'
I_TABNAME_HEADER = P_TAB_H
I_TABNAME_ITEM = P_TAB_D
IS_KEYINFO = KEYINFO
TABLES
T_OUTTAB_HEADER = ITAB_H[]
T_OUTTAB_ITEM = ITAB_D[]
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. "alv_report_HIERSEQ_1
*&---------------------------------------------------------------------*
*& Form UPADTE_ALV_FIELD_INFO
*&---------------------------------------------------------------------*
* Select ststus H .Hide
* K .Key
* D .小數點顯示位數
* M .SUM SET
* L .OUTPUT LEN <- COLWIDTH_OPTIMIZE 要取消
* N .Hide all
* J .(R)ight (L)eft (C)ent
* Z .leading zero
* NS.write no-sign
* NZ.write no-zero
* NC.no convext
* CFL/CFM/CFS.Change field desc.
* S1.sort ASCENDING <- 要和 M 共用
* S2.sort DESCENDING <- 要和 M 共用
* S3.sort ASCENDING <- 要和 M 共用(分頁)
* S4.sort DESCENDING <- 要和 M 共用(分頁)
* Ex : PERFORM UPADTE_ALV_FIELD_INFO USING 'LIFNR' 'X' 'K'.
*----------------------------------------------------------------------*
FORM UPADTE_ALV_FIELD_INFO USING FIELD_NAME
SET_VALUE
STSTUS.
* DATA: T_TMP TYPE SLIS_FIELDCAT_ALV,
* T_TMP2 TYPE SLIS_SORTINFO_ALV,
* L_TEXT(1),
* P_TABIX like sy-tabix.
*
** field info.
* DEFINE UP_FIELD.
* CLEAR: T_TMP, T_TMP2.
* READ TABLE &1 INTO T_TMP WITH KEY FIELDNAME = &2.
* P_TABIX = sy-tabix.
** DELETE &1 INDEX SY-TABIX.
*
* IF &4 = 'H'.
* T_TMP-NO_OUT = &3. " 隱藏欄位, 但是可以讓使用者手動加入
* MODIFY &1 FROM T_TMP.
* ELSEIF &4 = 'K'.
* T_TMP-KEY = &3. " KEY SET
* MODIFY &1 FROM T_TMP .
* ELSEIF &4 = 'M'.
* T_TMP-DO_SUM = &3. " SUM SET
* MODIFY &1 FROM T_TMP .
* ELSEIF &4 = 'L'.
* T_TMP-OUTPUTLEN = &3. " OUTPUT LEN
* MODIFY &1 FROM T_TMP.
* ELSEIF &4 = 'N'.
* T_TMP-TECH = &3. " 完整隱藏
* MODIFY &1 FROM T_TMP.
* ELSEIF &4 = 'CFL' OR &4 = 'CFM' OR &4 = 'CFS'.
* " 改變說明L/M/S
* T_TMP-SELTEXT_S = T_TMP-SELTEXT_M = T_TMP-SELTEXT_L
* = T_TMP-REPTEXT_DDIC = &3.
* T_TMP-DDICTXT = &4+2(1).
* MODIFY &1 FROM T_TMP.
* ELSEIF &4 = 'J'. " (R)ight (L)eft (C)ent
* T_TMP-JUST = 'C'. "&3.
* MODIFY &1 FROM T_TMP.
* ELSEIF &4 = 'Z'. " leading zero
* T_TMP-LZERO = &3.
* MODIFY &1 FROM T_TMP.
* ELSEIF &4 = 'NS'. " write no-sign
* T_TMP-NO_SIGN = &3.
* MODIFY &1 FROM T_TMP.
* ELSEIF &4 = 'NZ'. " write no-zero
* T_TMP-NO_ZERO = &3.
* MODIFY &1 FROM T_TMP.
* ELSEIF &4 = 'NC'. " no convext
* T_TMP-NO_CONVEXT = &3.
* MODIFY &1 FROM T_TMP.
*
* ELSEIF &4 = 'S1' OR &4 = 'S2' OR
* &4 = 'S3' OR &4 = 'S4'.
* MODIFY &1 FROM T_TMP.
*
* T_TMP2-FIELDNAME = &2.
*
* T_TMP2-SUBTOT = &3.
*
* IF &4 = 'S1' OR &4 = 'S3'.
* T_TMP2-UP = &3.
* ENDIF.
*
* IF &4 = 'S3' OR &4 = 'S4'.
* T_TMP2-GROUP = '* '.
* ENDIF.
*
* APPEND T_TMP2 TO I_SORT.
* ENDIF.
* END-OF-DEFINITION.
*
* UP_FIELD PGT_FIELDCAT FIELD_NAME SET_VALUE STSTUS.
DATA: T_TMP TYPE SLIS_FIELDCAT_ALV,
T_TMP2 TYPE SLIS_SORTINFO_ALV,
L_TEXT(1).
* field info.
DEFINE UP_FIELD.
CLEAR: T_TMP, T_TMP2.
READ TABLE &1 INTO T_TMP WITH KEY FIELDNAME = &2.
DELETE &1 INDEX SY-TABIX.
IF &4 = 'H'.
T_TMP-NO_OUT = &3. " 隱藏欄位, 但是可以讓使用者手動加入
APPEND T_TMP TO &1.
ELSEIF &4 = 'D'.
T_TMP-DECIMALS_OUT = &3. " 小數點顯示位數
APPEND T_TMP TO &1.
ELSEIF &4 = 'K'.
T_TMP-KEY = &3. " KEY SET
APPEND T_TMP TO &1.
ELSEIF &4 = 'M'.
T_TMP-DO_SUM = &3. " SUM SET
APPEND T_TMP TO &1.
ELSEIF &4 = 'L'.
T_TMP-OUTPUTLEN = &3. " OUTPUT LEN
APPEND T_TMP TO &1.
ELSEIF &4 = 'N'.
T_TMP-TECH = &3. " 完整隱藏
APPEND T_TMP TO &1.
ELSEIF &4 = 'CFL' OR &4 = 'CFM' OR &4 = 'CFS'. " 改變說明L/M/S
T_TMP-SELTEXT_S = T_TMP-SELTEXT_M = T_TMP-SELTEXT_L
= T_TMP-REPTEXT_DDIC = &3.
T_TMP-DDICTXT = &4+2(1).
APPEND T_TMP TO &1.
ELSEIF &4 = 'J'. " (R)ight (L)eft (C)ent
T_TMP-JUST = 'C'. "&3.
APPEND T_TMP TO &1.
ELSEIF &4 = 'Z'. " leading zero
T_TMP-LZERO = &3.
APPEND T_TMP TO &1.
ELSEIF &4 = 'NS'. " write no-sign
T_TMP-NO_SIGN = &3.
APPEND T_TMP TO &1.
ELSEIF &4 = 'NZ'. " write no-zero
T_TMP-NO_ZERO = &3.
APPEND T_TMP TO &1.
ELSEIF &4 = 'NC'. " no convext
T_TMP-NO_CONVEXT = &3.
APPEND T_TMP TO &1.
ELSEIF &4 = 'S1' OR &4 = 'S2' OR
&4 = 'S3' OR &4 = 'S4'.
APPEND T_TMP TO &1.
T_TMP2-FIELDNAME = &2.
T_TMP2-SUBTOT = &3.
IF &4 = 'S1' OR &4 = 'S3'.
T_TMP2-UP = &3.
ENDIF.
IF &4 = 'S3' OR &4 = 'S4'.
T_TMP2-GROUP = '* '.
ENDIF.
APPEND T_TMP2 TO I_SORT.
ENDIF.
END-OF-DEFINITION.
UP_FIELD PGT_FIELDCAT FIELD_NAME SET_VALUE STSTUS.
ENDFORM. " UPADTE_ALV_FIELD_INFO
*&---------------------------------------------------------------------*
*& Form UPADTE_ALV_FIELD_INFO_2
*&---------------------------------------------------------------------*
* Select ststus H .Hide
* K .Key
* M .SUM SET
* D .小數點顯示位數
* L .OUTPUT LEN <- COLWIDTH_OPTIMIZE 要取消
* N .Hide all
* J .(R)ight (L)eft (C)ent
* Z .leading zero
* NS.write no-sign
* NZ.write no-zero
* NC.no convext
* CFL/CFM/CFS.Change field desc.
* TEXT 欄位文字用L/M/S哪一種
* COLOR : Column 顏色
* S1.sort ASCENDING <- 要和 M 共用
* S2.sort DESCENDING <- 要和 M 共用
* S3.sort ASCENDING <- 要和 M 共用(分頁)
* S4.sort DESCENDING <- 要和 M 共用(分頁)
* Ex : PERFORM UPADTE_ALV_FIELD_INFO USING 'LIFNR' 'X' 'K'.
*----------------------------------------------------------------------*
FORM UPADTE_ALV_FIELD_INFO_2
TABLES P_FIELDCAT
STRUCTURE SLIS_ALV_CATG
USING FIELD_NAME
SET_VALUE
STATUS.
DATA: T_TMP TYPE SLIS_FIELDCAT_ALV,
T_TMP2 TYPE SLIS_SORTINFO_ALV,
L_TEXT(1),
P_TABIX LIKE SY-TABIX.
** field info.
CLEAR: T_TMP, T_TMP2.
READ TABLE P_FIELDCAT INTO T_TMP WITH KEY FIELDNAME = FIELD_NAME.
CHECK SY-SUBRC EQ 0.
P_TABIX = SY-TABIX.
* DELETE &1 INDEX SY-TABIX.
* UP_FIELD 1:PGT_FIELDCAT 2:FIELD_NAME 3:SET_VALUE 4:STSTUS.
IF STATUS = 'H'.
T_TMP-NO_OUT = SET_VALUE. " 隱藏欄位, 但是可以讓使用者手動加入
MODIFY P_FIELDCAT FROM T_TMP.
ELSEIF STATUS = 'D'.
T_TMP-DECIMALS_OUT = SET_VALUE. " 小數點顯示位數
MODIFY P_FIELDCAT FROM T_TMP .
ELSEIF STATUS = 'K'.
T_TMP-KEY = SET_VALUE. " KEY SET
MODIFY P_FIELDCAT FROM T_TMP .
ELSEIF STATUS = 'TEXT'.
T_TMP-DDICTXT = SET_VALUE. " KEY SET
MODIFY P_FIELDCAT FROM T_TMP .
ELSEIF STATUS = 'COLOR'.
T_TMP-EMPHASIZE = SET_VALUE. " KEY SET
MODIFY P_FIELDCAT FROM T_TMP .
ELSEIF STATUS = 'M'.
T_TMP-DO_SUM = SET_VALUE. " SUM SET
MODIFY P_FIELDCAT FROM T_TMP .
ELSEIF STATUS = 'L'.
T_TMP-OUTPUTLEN = SET_VALUE. " OUTPUT LEN
MODIFY P_FIELDCAT FROM T_TMP.
ELSEIF STATUS = 'N'.
T_TMP-TECH = SET_VALUE. " 完整隱藏
MODIFY P_FIELDCAT FROM T_TMP.
ELSEIF STATUS = 'CFL' OR STATUS = 'CFM' OR STATUS = 'CFS'.
" 改變說明L/M/S
T_TMP-SELTEXT_S = T_TMP-SELTEXT_M = T_TMP-SELTEXT_L
= T_TMP-REPTEXT_DDIC = SET_VALUE.
T_TMP-DDICTXT = STATUS+2(1).
MODIFY P_FIELDCAT FROM T_TMP.
ELSEIF STATUS = 'J'. " (R)ight (L)eft (C)ent
T_TMP-JUST = SET_VALUE. "set_value.
MODIFY P_FIELDCAT FROM T_TMP.
ELSEIF STATUS = 'Z'. " leading zero
T_TMP-LZERO = SET_VALUE.
MODIFY P_FIELDCAT FROM T_TMP.
ELSEIF STATUS = 'NS'. " write no-sign
T_TMP-NO_SIGN = SET_VALUE.
MODIFY P_FIELDCAT FROM T_TMP.
ELSEIF STATUS = 'NZ'. " write no-zero
T_TMP-NO_ZERO = SET_VALUE.
MODIFY P_FIELDCAT FROM T_TMP.
ELSEIF STATUS = 'NC'. " no convext
T_TMP-NO_CONVEXT = SET_VALUE.
MODIFY P_FIELDCAT FROM T_TMP.
ELSEIF STATUS = 'S1' OR STATUS = 'S2' OR
STATUS = 'S3' OR STATUS = 'S4'.
MODIFY P_FIELDCAT FROM T_TMP.
T_TMP2-FIELDNAME = FIELD_NAME.
T_TMP2-SUBTOT = SET_VALUE.
IF STATUS = 'S1' OR STATUS = 'S3'.
T_TMP2-UP = SET_VALUE.
ENDIF.
IF STATUS = 'S3' OR STATUS = 'S4'.
T_TMP2-GROUP = '* '.
ENDIF.
APPEND T_TMP2 TO I_SORT.
ENDIF.
**
** UP_FIELD PGT_FIELDCAT FIELD_NAME SET_VALUE STSTUS.
**
ENDFORM. " UPADTE_ALV_FIELD_INFO
*&---------------------------------------------------------------------*
*& Form UPADTE_ALV_FIELD_INFO
*&---------------------------------------------------------------------*
* Select ststus H .Hide
* K .Key
* D .小數點顯示位數
* M .SUM SET
* L .OUTPUT LEN <- COLWIDTH_OPTIMIZE 要取消
* N .Hide all
* J .(R)ight (L)eft (C)ent
* Z .leading zero
* NS.write no-sign
* NZ.write no-zero
* NC.no convext
* CFL/CFM/CFS.Change field desc.
* S1.sort ASCENDING <- 要和 M 共用
* S2.sort DESCENDING <- 要和 M 共用
* S3.sort ASCENDING <- 要和 M 共用(分頁)
* S4.sort DESCENDING <- 要和 M 共用(分頁)
* Ex : PERFORM UPADTE_ALV_FIELD_INFO USING 'LIFNR' 'X' 'K'.
*----------------------------------------------------------------------*
FORM UPADTE_ALV_FIELD_INFO_3 USING FIELD_NAME
SET_VALUE
STSTUS
TAB_NAME.
DATA: T_TMP TYPE SLIS_FIELDCAT_ALV,
T_TMP2 TYPE SLIS_SORTINFO_ALV,
P_TABIX LIKE SY-TABIX,
L_TEXT(1).
CLEAR: T_TMP, T_TMP2.
IF TAB_NAME <> SPACE.
READ TABLE PGT_FIELDCAT INTO T_TMP
WITH KEY FIELDNAME = FIELD_NAME
TABNAME = TAB_NAME.
ELSE.
READ TABLE PGT_FIELDCAT INTO T_TMP
WITH KEY FIELDNAME = FIELD_NAME.
ENDIF.
P_TABIX = SY-TABIX.
* field info.
CASE STSTUS.
WHEN 'H'.
T_TMP-NO_OUT = SET_VALUE. " 隱藏欄位, 但是可以讓使用者手動加入
WHEN 'D'.
T_TMP-DECIMALS_OUT = SET_VALUE. " 小數點顯示位數
WHEN 'K'.
T_TMP-KEY = SET_VALUE. " KEY SET
WHEN 'M'.
T_TMP-DO_SUM = SET_VALUE. " SUM SET
WHEN 'L'.
T_TMP-OUTPUTLEN = SET_VALUE. " OUTPUT LEN
WHEN 'N'.
T_TMP-TECH = SET_VALUE. " 完整隱藏
WHEN 'Z'.
T_TMP-NO_ZERO = SET_VALUE. " 不顯示 0
WHEN 'J'. " (R)ight (L)eft (C)ent
T_TMP-JUST = 'C'. "SET_VALUE.
WHEN 'Z'. " leading zero
T_TMP-LZERO = SET_VALUE.
WHEN 'NS'. " write no-sign
T_TMP-NO_SIGN = SET_VALUE.
WHEN 'NZ'. " write no-zero
T_TMP-NO_ZERO = SET_VALUE.
WHEN 'NC'. " no convext
T_TMP-NO_CONVEXT = SET_VALUE.
WHEN 'CFL' OR 'CFM' OR 'CFS'. " 改變說明L/M/S
T_TMP-SELTEXT_S = T_TMP-SELTEXT_M = T_TMP-SELTEXT_L
= T_TMP-REPTEXT_DDIC = SET_VALUE.
T_TMP-DDICTXT = STSTUS+2(1).
WHEN 'S1' OR 'S2' OR 'S3' OR 'S4'.
T_TMP2-FIELDNAME = FIELD_NAME.
T_TMP2-SUBTOT = SET_VALUE.
IF STSTUS = 'S1' OR STSTUS = 'S3'.
T_TMP2-UP = SET_VALUE.
ENDIF.
IF STSTUS = 'S3' OR STSTUS = 'S4'.
T_TMP2-GROUP = '* '.
ENDIF.
APPEND T_TMP2 TO I_SORT.
ENDCASE.
MODIFY PGT_FIELDCAT INDEX P_TABIX FROM T_TMP.
ENDFORM. " UPADTE_ALV_FIELD_INFO_3
*&---------------------------------------------------------------------*
*& Form get_alv_field
*&---------------------------------------------------------------------*
FORM GET_ALV_FIELD USING PROGRAM_NAME
STRUCTURE_NAME.
SUBMIT BALVBUFDEL AND RETURN. " reset alv data
MESSAGE S888(SABAPDOCU) WITH ' '.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = PROGRAM_NAME
I_STRUCTURE_NAME = STRUCTURE_NAME
I_CLIENT_NEVER_DISPLAY = 'X'
CHANGING
CT_FIELDCAT = PGT_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
ENDFORM. " get_alv_field
*&---------------------------------------------------------------------*
*& Form UPADTE_ALV_FIELD_INFO_sort
*&---------------------------------------------------------------------*
* SPOS : 排列順序
* FIELD_NAME : 欄位名稱
* SUB_FLAG : 小計資料
* UP_FLAG : ASCENDING/DESCENDING
* GROUP : 分頁符號 (UL/*)
*----------------------------------------------------------------------*
FORM UPADTE_ALV_FIELD_INFO_SORT USING SPOS
FIELD_NAME
SUB_FLAG
UP_FLAG
GROUP.
DATA: T_TMP2 TYPE SLIS_SORTINFO_ALV.
* field info.
CLEAR T_TMP2.
SPOS = SPOS + 1 .
T_TMP2-SPOS = SPOS.
T_TMP2-FIELDNAME = FIELD_NAME.
T_TMP2-SUBTOT = SUB_FLAG.
T_TMP2-UP = UP_FLAG.
T_TMP2-GROUP = GROUP.
APPEND T_TMP2 TO I_SORT.
ENDFORM. " UPADTE_ALV_FIELD_INFO_sort
*&---------------------------------------------------------------------*
*& Form MD_CONVERT_MATERIAL_UNIT
*&---------------------------------------------------------------------*
FORM MD_CONVERT_MATERIAL_UNIT USING MATNR
BASE_UNIT
COV_UNIT
QTY
COV_QTY.
CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
EXPORTING
I_MATNR = MATNR
I_IN_ME = BASE_UNIT
I_OUT_ME = COV_UNIT
I_MENGE = QTY
IMPORTING
E_MENGE = COV_QTY
EXCEPTIONS
ERROR_IN_APPLICATION = 1
ERROR = 2
OTHERS = 3.
ENDFORM. " MD_CONVERT_MATERIAL_UNIT
*&---------------------------------------------------------------------*
*& Form get_alv_field_hierseq
*&---------------------------------------------------------------------*
FORM GET_ALV_FIELD_HIERSEQ USING PROGRAM_NAME
STRUCTURE_NAME
ITAB_NAME.
SUBMIT BALVBUFDEL AND RETURN. " reset alv data
MESSAGE S888(SABAPDOCU) WITH ' '.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = PROGRAM_NAME
I_STRUCTURE_NAME = STRUCTURE_NAME
I_INTERNAL_TABNAME = ITAB_NAME
I_CLIENT_NEVER_DISPLAY = 'X'
CHANGING
CT_FIELDCAT = PGT_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
ENDFORM. " get_alv_field_hierseq
*&---------------------------------------------------------------------*
*& Form f4_for_variant
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_REPORT text
* -->P_VARI text
*----------------------------------------------------------------------*
FORM F4_FOR_VARIANT USING P_REPORT P_VARI.
*
DATA: LT_VARIANT LIKE DISVARIANT,
LT_CANCEL(1).
LT_VARIANT-REPORT = P_REPORT.
* CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
* EXPORTING
* is_variant = lt_variant
* i_save = 'A'
* IMPORTING
* e_exit = lt_cancel
* es_variant = lt_variant
* EXCEPTIONS
* NOT_FOUND = 1
* PROGRAM_ERROR = 2
* OTHERS = 3
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
IS_VARIANT = LT_VARIANT
* I_TABNAME_HEADER =
* I_TABNAME_ITEM =
* IT_DEFAULT_FIELDCAT =
* I_SAVE = ' '
* I_DISPLAY_VIA_GRID = ' '
IMPORTING
E_EXIT = LT_CANCEL
ES_VARIANT = LT_VARIANT
EXCEPTIONS
NOT_FOUND = 1
PROGRAM_ERROR = 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.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
P_VARI = LT_VARIANT-VARIANT.
ENDFORM. "f4_for_variant
*&---------------------------------------------------------------------*
*& Form REPORT_TITLE_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM REPORT_TITLE_DISPLAY USING
U_REPID "report id
U_BUTXT TYPE T001-BUTXT "company name
U_TITLE TYPE SY-TITLE "report title
U_TCODE TYPE SY-TCODE "Tcode
U_SUBTEXT TYPE STRING "sub description
U_PAGNO TYPE SY-PAGNO "page number or ("小計/總計")
U_LINSZ TYPE SY-LINSZ. "line size
DATA: LV_REPID TYPE SY-REPID,
LV_LINSZ TYPE SY-LINSZ.
DATA: BEGIN OF LV_POS,
COMP_NAME TYPE I, " Compony Name
TITLE TYPE I, " Report Title
SUBTXT TYPE I, " Sub text
R_SIDE TYPE I, " Right Side
CENTER TYPE I, " Center
END OF LV_POS.
DATA: BEGIN OF LV_LABEL,"description
TCODE(10) TYPE C,
USERNAME(10) TYPE C,
COMP_NAME TYPE STRING ,
PROGRAM(10) TYPE C,
DATE(10) TYPE C,
TIME(10) TYPE C,
PAGENO(10) TYPE C,
END OF LV_LABEL.
DATA: BEGIN OF LV_LEN,
COMP_NAME TYPE I, " Compony Name
TITLE TYPE I, " Report Title
SUBTXT TYPE I, " Sub text
END OF LV_LEN.
CLEAR: LV_POS, LV_LEN, LV_LABEL.
MOVE U_REPID TO LV_REPID .
MOVE U_LINSZ TO LV_LINSZ .
LV_POS-CENTER = LV_LINSZ / 2 .
LV_POS-R_SIDE = LV_LINSZ - 23.
CLEAR LV_LABEL.
LV_LABEL-PROGRAM = '程式代碼 :'(T01).
LV_LABEL-COMP_NAME = U_BUTXT.
LV_LABEL-DATE = '執行日期 :'(T02).
LV_LABEL-TIME = '執行時間 :'(T03).
LV_LABEL-PAGENO = '頁 次 :'(T04).
LV_LABEL-USERNAME = '使 用 者 :'(T05).
LV_LABEL-TCODE = '交易代碼 :'(T06).
* Compony Name Position and Length
CONDENSE LV_LABEL-COMP_NAME.
* lv_len-comp_name = STRLEN( lv_label-comp_name ) * 2.
LV_LEN-COMP_NAME =
CL_ABAP_LIST_UTILITIES=>DYNAMIC_OUTPUT_LENGTH( LV_LABEL-COMP_NAME ).
LV_POS-COMP_NAME = LV_POS-CENTER - ( LV_LEN-COMP_NAME / 2 ).
* Title Position and Length
* lv_len-title = STRLEN( u_title ) * 2.
LV_LEN-TITLE =
CL_ABAP_LIST_UTILITIES=>DYNAMIC_OUTPUT_LENGTH( U_TITLE ).
LV_POS-TITLE = LV_POS-CENTER - ( LV_LEN-TITLE / 2 ) .
* Sub Text Position and Length
* lv_len-subtxt = STRLEN( u_subtext ) * 2.
LV_LEN-SUBTXT =
CL_ABAP_LIST_UTILITIES=>DYNAMIC_OUTPUT_LENGTH( U_SUBTEXT ).
LV_POS-SUBTXT = LV_POS-CENTER - ( LV_LEN-SUBTXT / 2 ) .
* First Line
WRITE: / LV_LABEL-PROGRAM, LV_REPID,"程式代碼
AT LV_POS-COMP_NAME(LV_LEN-COMP_NAME)
LV_LABEL-COMP_NAME CENTERED,
AT LV_POS-R_SIDE LV_LABEL-DATE,
SY-DATUM. "列印日期
* Second Line
WRITE: / LV_LABEL-USERNAME, (12) SY-UNAME,"使用者
* AT LV_POS-TITLE(LV_LEN-TITLE) SY_TITLE CENTERED,"程式說明
AT LV_POS-TITLE(LV_LEN-TITLE) U_TITLE CENTERED,"程式說明
AT LV_POS-R_SIDE LV_LABEL-TIME, SY-UZEIT."列印時間
* Third Line
IF NOT U_TCODE IS INITIAL.
WRITE: / LV_LABEL-TCODE, (12) U_TCODE."交易代碼
WRITE: AT LV_POS-SUBTXT(LV_LEN-SUBTXT) U_SUBTEXT CENTERED.
ELSE.
WRITE: AT /LV_POS-SUBTXT(LV_LEN-SUBTXT) U_SUBTEXT CENTERED.
ENDIF.
WRITE: AT LV_POS-R_SIDE LV_LABEL-PAGENO NO-GAP,
U_PAGNO RIGHT-JUSTIFIED NO-SIGN. "頁次
* ULINE AT /(LV_LINSZ).
ENDFORM. " REPORT_TITLE_DISPLAY