*&---------------------------------------------------------------------*
*& Report Temp_ALV
*&
*&---------------------------------------------------------------------*
*&ALV模板代碼
*&
*&
*&---------------------------------------------------------------------*
REPORT Temp_ALV.
TYPE-POOLS: slis.
************************************************************************
*TABLES
************************************************************************
TABLES:mara.
************************************************************************
*internal table
************************************************************************
DATA:BEGIN OF i_list OCCURS 0,
matnr LIKE mara-matnr,
vpsta LIKE mara-vpsta,
laeng LIKE mara-laeng,
END OF i_list.
************************************************************************
*ALV data type
************************************************************************
DATA: l_repid LIKE sy-repid.
DATA: wa_fieldcat TYPE slis_fieldcat_alv,
gt_fieldcat TYPE slis_t_fieldcat_alv.
DATA: g_list_top_of_page TYPE slis_t_listheader.
CONSTANTS:c_formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
l_repid = sy-repid.
************************************************************************
*SELECT-SRECCN
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-bl1.
SELECT-OPTIONS: zmatnr FOR mara-matnr.
SELECTION-SCREEN END OF BLOCK bl1.
************************************************************************
*SELECT-OF-SELECTION
************************************************************************
START-OF-SELECTION.
PERFORM sub_get_data.
IF sy-subrc <> 0 .
MESSAGE '您尋找的資料未在資料庫中找到,請重新輸入!' TYPE 'I' .
ELSE.
* PERFORM sub_process_data .
PERFORM sub_display_data .
ENDIF.
*************************************************************************
**END-OF-SELECTION
*************************************************************************
END-OF-SELECTION .
**&--------------------------------------------------------------------*
**& Form top_of_page 顯示標題用的
**&--------------------------------------------------------------------*
FORM top_of_page. "顯示標題用的
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = g_list_top_of_page.
ENDFORM. " top_of_page
*&---------------------------------------------------------------------*
*& Form sub_get_data 取得資料
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM sub_get_data.
SELECT * INTO CORRESPONDING FIELDS OF TABLE i_list FROM mara WHERE matnr IN zmatnr.
ENDFORM. "sub_get_data
*&---------------------------------------------------------------------*
*& Form sub_process_data 處理資料
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM sub_process_data.
ENDFORM. "sub_process_data
*&---------------------------------------------------------------------*
*& Form sub_display_data 顯示資料
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM sub_display_data.
******initial datatab
DATA: l_i_output LIKE i_list OCCURS 0 WITH HEADER LINE. "i_list讀取資料表
*****initial title
PERFORM build_comment_summary TABLES l_i_output
USING g_list_top_of_page[].
****initial field category
DATA: l_i_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
PERFORM init_alv_summary TABLES l_i_fieldcat.
****initial others
DATA: l_s_layout TYPE slis_layout_alv.
l_s_layout-colwidth_optimize = 'X'."字元適合寬度
* l_s_layout-zebra = 'XXX'."行的顏色
****initial event
DATA:l_events TYPE slis_t_event.
PERFORM build_eventtab USING l_events[].
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = l_repid
i_default = 'X'
i_save = 'X'
* i_layout-f2code = ' '
i_callback_user_command = 'USER_COMMAND'
it_events = l_events[]
is_layout = l_s_layout
it_fieldcat = l_i_fieldcat[]
TABLES
t_outtab = i_list"讀取資料的內表,顯示在alv中
EXCEPTIONS
program_error = 1
other = 2 .
ENDFORM. "sub_display_data
*&---------------------------------------------------------------------*
*& Form build_eventtab
*&---------------------------------------------------------------------*
FORM build_eventtab USING v_events TYPE slis_t_event.
DATA: l_event TYPE slis_alv_event.
"Returns table of possible events for a list type
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = v_events. "List type (0,1,2,3)
DATA: l_tabix LIKE sy-tabix.
CLEAR l_event-form.
READ TABLE v_events WITH KEY name = slis_ev_top_of_page
INTO l_event.
l_tabix = sy-tabix.
IF sy-subrc = 0.
MOVE c_formname_top_of_page TO l_event-form.
MODIFY v_events FROM l_event INDEX l_tabix.
ENDIF.
ENDFORM. " build_eventtab
*&---------------------------------------------------------------------*
*& Form build_comment_summary
*&---------------------------------------------------------------------*
FORM build_comment_summary TABLES v_i_output STRUCTURE i_list "讀取資料的內表
USING v_list_top_of_page TYPE slis_t_listheader.
DATA: l_line TYPE slis_listheader.
CLEAR l_line.
l_line-typ = 'H'.
l_line-key = ''.
l_line-info = '我的測試表'.
APPEND l_line TO v_list_top_of_page.
ENDFORM. " build_comment_summary
*&---------------------------------------------------------------------*
*& Form init_alv_summary
*&---------------------------------------------------------------------*
FORM init_alv_summary TABLES v_i_fieldcat TYPE slis_t_fieldcat_alv.
REFRESH v_i_fieldcat.
CLEAR v_i_fieldcat.
v_i_fieldcat-fieldname = 'MATNR'.
v_i_fieldcat-tabname = 'I_LIST'.
v_i_fieldcat-seltext_m = '物料號'.
v_i_fieldcat-key = 'X'.
* v_i_fieldcat-ref_fieldname = 'MATNR'. "收索協助
* v_i_fieldcat-ref_tabname = 'MAKT'.
APPEND v_i_fieldcat.
CLEAR v_i_fieldcat.
v_i_fieldcat-fieldname = 'VPSTA'.
v_i_fieldcat-tabname = 'I_LIST'.
v_i_fieldcat-seltext_m = '維護全部物料狀態'.
* v_i_fieldcat-outputlen = '20'."列的字元寬度
* v_i_fieldcat-edit = 'X'."可編輯的屬性
APPEND v_i_fieldcat.
CLEAR v_i_fieldcat.
* v_i_fieldcat-decimals_out = '0'. "去掉該欄位小數點後的0
* v_i_fieldcat-EMPHASIZE = 'C700'. "給該欄位加上顏色
* v_i_fieldcat-just = 'L'. "對齊
v_i_fieldcat-fieldname = 'LAENG'.
v_i_fieldcat-tabname = 'I_LIST'.
v_i_fieldcat-seltext_m = '長度'.
* v_i_fieldcat-do_sum = 'X'. "總計該列的值
APPEND v_i_fieldcat.
ENDFORM. " init_alv_summary
*&--------------------------------------------------------------------*
*& Form USER_COMMAND
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->UCOMM text
* -->SELFIELD text
*---------------------------------------------------------------------*
FORM user_command USING ucomm LIKE sy-ucomm "接收使用者的命令
selfield TYPE slis_selfield.
READ TABLE i_list INDEX selfield-tabindex.
CHECK sy-subrc = 0.
CASE ucomm.
WHEN '&IC1'. "&DATA_SAVE響應儲存鍵
CASE selfield-sel_tab_field.
WHEN 'I_LIST-MATNR'. "這裡必須大寫
SET PARAMETER ID 'MAT' FIELD i_list-matnr . "參數id為aun
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN."調用事務位va03的事務且跳過第一個螢幕
**************************************顯示第二層ALV********************************
* WHEN 'I_LIST-VPSTA'.
* LOOP AT I_LIST INTO I_LIST WHERE VPSTA = I_LIST-VPSTA.
* ENDLOOP.
* PERFORM frm_buildfieldcat_lips.
* PERFORM frm_display_lips.
ENDCASE.
ENDCASE.
ENDFORM. "USER_COMMAND
*&---------------------------------------------------------------------*
*& Form frm_buildfieldcat_lips
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_buildfieldcat_lips .
CLEAR wa_fieldcat.
REFRESH gt_fieldcat[].
DEFINE add_field. "定義宏
wa_fieldcat-fieldname = &1.
wa_fieldcat-reptext_ddic = &2.
wa_fieldcat-hotspot = &3.
append wa_fieldcat to gt_fieldcat.
END-OF-DEFINITION.
add_field 'MATNR' '物料號' 'X'.
add_field 'VPSTA' '描述' ' ' .
add_field 'LAENG' '長度' ' ' .
ENDFORM. " frm_buildfieldcat_ekpo
**&---------------------------------------------------------------------*
**& Form frm_display_lips
**&---------------------------------------------------------------------*
** text
**----------------------------------------------------------------------*
** --> p1 text
** <-- p2 text
**----------------------------------------------------------------------*
FORM frm_display_lips .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = l_repid
it_fieldcat = gt_fieldcat
i_screen_start_column = 20
i_screen_start_line = 30
i_screen_end_column = 80
i_screen_end_line = 40
TABLES
t_outtab = i_list."第二層alv顯示資料的內表
ENDFORM. " frm_display_lips