*&---------------------------------------------------------------------*
*& Report ZMMTEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zmmtest.
TYPE-POOLS: slis.
INCLUDE:zsy_xy_tcus.
************************************************************************
*TABLES
************************************************************************
TABLES: mara,marc ,mdma.
************************************************************************
*internal table
************************************************************************
DATA: BEGIN OF wa_mt61d.
INCLUDE STRUCTURE mt61d.
DATA: END OF wa_mt61d.
DATA: BEGIN OF wa_mdkp.
INCLUDE STRUCTURE mdkp.
DATA: END OF wa_mdkp.
DATA: BEGIN OF wa_mdsta.
INCLUDE STRUCTURE mdsta.
DATA: END OF wa_mdsta.
DATA: BEGIN OF it_mdps OCCURS 0.
INCLUDE STRUCTURE mdps.
DATA: END OF it_mdps.
DATA: BEGIN OF it_mdez OCCURS 0.
INCLUDE STRUCTURE mdez.
DATA: END OF it_mdez.
DATA: it_mdez1 LIKE TABLE OF it_mdez WITH HEADER LINE .
DATA: BEGIN OF i_list OCCURS 0.
INCLUDE STRUCTURE mdez.
DATA: matnr LIKE mara-matnr.
DATA: werks LIKE marc-werks.
DATA: berid LIKE mdma-berid.
DATA: pr_qty TYPE i .
DATA: END OF i_list.
DATA: i_list3 LIKE TABLE OF i_list WITH HEADER LINE .
DATA: BEGIN OF it_mdsu OCCURS 0.
INCLUDE STRUCTURE mdsu.
DATA: END OF it_mdsu.
DATA:BEGIN OF i_list1 OCCURS 0 ,
matnr LIKE mara-matnr ,
werks LIKE marc-werks ,
END OF i_list1 .
TYPES:BEGIN OF ty_item,
matnr LIKE mara-matnr ,
werks LIKE marc-werks ,
END OF ty_item.
DATA gt_item_ls TYPE STANDARD TABLE OF ty_item."临时存放信息
DATA:gs_item TYPE ty_item,
gt_item TYPE STANDARD TABLE OF ty_item.
* 显示BOM ITEM信息alv
DATA: gs_dialogbox TYPE REF TO cl_gui_dialogbox_container,
go_splitter_container TYPE REF TO cl_gui_splitter_container,
go_toolbar TYPE REF TO cl_gui_toolbar.
DATA gr_alvgrid TYPE REF TO cl_gui_alv_grid.
DATA gs_toolbar TYPE LINE OF ttb_button.
DATA gt_fieldcat1 TYPE lvc_t_fcat.
DATA gs_layout1 TYPE lvc_s_layo.
DATA :e_hype TYPE lvc_s_hype,
ts_hype TYPE lvc_t_hype.
DATA m_have TYPE i .
DATA: infotext(150) TYPE c ,
ymatnr(50) TYPE c.
DATA: l_repid LIKE sy-repid.
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:
s_matnr FOR mara-matnr ,
s_werks FOR marc-werks .
*PARAMETERS: s_berid LIKE mdma-berid OBLIGATORY.
SELECTION-SCREEN END OF BLOCK bl1.
************************************************************************
*SELECT-OF-SELECTION
************************************************************************
START-OF-SELECTION.
PERFORM sub_get_data .
* IF m_have = 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
*&---------------------------------------------------------------------*
FORM sub_get_data .
i_list-matnr = '4001' .
i_list-werks = '1000' .
APPEND i_list .
ENDFORM . "sub_get_data
*==========================class 定义事件=============================
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
METHODS:
* 关闭dialogbox
on_close
FOR EVENT close OF cl_gui_dialogbox_container
IMPORTING sender,
* 设置工具栏
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING
e_object,
* 用户命令响应
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING
e_ucomm.
ENDCLASS. "LCL_EVENT_HANDLER DEFINITION
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_HANDLER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION.
*----------------------------------------------------------------------
* Handles the Close event of the dialogbox. The colse event is
* triggered when the close button in the top right corner of the
* dialogbox is pushed. Closes the dialog box
*----------------------------------------------------------------------
METHOD on_close.
IF NOT sender IS INITIAL.
CALL METHOD sender->free
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
* Error handling
ENDIF.
FREE gs_dialogbox.
CLEAR gs_dialogbox.
ENDIF.
ENDMETHOD. "ON_CLOSE
* method toolbar handler
METHOD handle_toolbar.
PERFORM set_toolbar CHANGING e_object.
ENDMETHOD. "handle_toolbar
METHOD handle_user_command.
* Handle own functions defined in the toolbar
* CASE e_ucomm.
* WHEN 'OK'.
* GR_ALVGRID->CHECK_CHANGED_DATA( ).
*
* LOOP AT gt_item_ls INTO gs_item.
* modify gt_item from gs_item INDEX gs_item-tabix.
* ENDLOOP.
*
* CALL METHOD GS_DIALOGBOX->FREE.
* FREE GS_DIALOGBOX.
* CLEAR GS_DIALOGBOX.
* ENDCASE.
ENDMETHOD. "handle_user_command
ENDCLASS. "LCL_EVENT_HANDLER IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form set_toolbar
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PRF_OBJECT text
*----------------------------------------------------------------------*
FORM set_toolbar
CHANGING prf_object TYPE REF TO cl_alv_event_toolbar_set.
CLEAR prf_object->mt_toolbar.
CLEAR gs_toolbar.
MOVE 'OK' TO gs_toolbar-function.
MOVE icon_okay TO gs_toolbar-icon.
MOVE 'OK' TO gs_toolbar-quickinfo.
MOVE ' ' TO gs_toolbar-disabled.
MOVE text-016 TO gs_toolbar-text.
APPEND gs_toolbar TO prf_object->mt_toolbar .
ENDFORM. "set_toolbar
*
FORM display_popup.
* DATA:
* BEGIN OF ls_popup,
* text(60) TYPE c,
* END OF ls_popup,
* lt_popup LIKE TABLE OF ls_popup,
* lt_fcat TYPE slis_t_fieldcat_alv,
* ls_fcat TYPE slis_fieldcat_alv,
* lt_excl TYPE slis_t_extab,
* ls_excl TYPE slis_extab,
* lv_exit TYPE c.
*
* ls_popup-text = '打算的撒打算的'. APPEND ls_popup TO lt_popup.
* ls_popup-text = 'Second line'. APPEND ls_popup TO lt_popup.
* ls_popup-text = 'Third line'. APPEND ls_popup TO lt_popup.
*
* ls_fcat-col_pos = 1.
* ls_fcat-fieldname = 'TEXT'.
* ls_fcat-outputlen = 60.
* ls_fcat-seltext_m = 'Title of the table'.
* APPEND ls_fcat TO lt_fcat.
*
* ls_excl-fcode = '&ETA'. APPEND ls_excl TO lt_excl.
* ls_excl-fcode = '%SC'. APPEND ls_excl TO lt_excl.
* ls_excl-fcode = '%SC+'. APPEND ls_excl TO lt_excl.
* ls_excl-fcode = '&OUP'. APPEND ls_excl TO lt_excl.
* ls_excl-fcode = '&ODN'. APPEND ls_excl TO lt_excl.
* ls_excl-fcode = '&ILT'. APPEND ls_excl TO lt_excl.
* ls_excl-fcode = '&OL0'. APPEND ls_excl TO lt_excl.
* ls_excl-fcode = '&CRB'. APPEND ls_excl TO lt_excl.
* ls_excl-fcode = '&CRL'. APPEND ls_excl TO lt_excl.
* ls_excl-fcode = '&CRR'. APPEND ls_excl TO lt_excl.
* ls_excl-fcode = '&CRE'. APPEND ls_excl TO lt_excl.
** ls_excl-fcode = '&AC1'. APPEND ls_excl TO lt_excl. " cancel
* ls_excl-fcode = '&ALL'. APPEND ls_excl TO lt_excl.
* ls_excl-fcode = '&SAL'. APPEND ls_excl TO lt_excl.
*
* CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
* EXPORTING
* i_title = '详细资料'
* i_selection = ''
* i_screen_start_column = 1
* i_screen_start_line = 1
* i_screen_end_column = 62
* i_screen_end_line = 10
* i_tabname = 'LT_POPUP'
* it_fieldcat = lt_fcat
* it_excluding = lt_excl
* IMPORTING
* e_exit = lv_exit
* TABLES
* t_outtab = lt_popup.
*
* IF lv_exit = 'X'.
** cancel
* ELSE.
** do action
* ENDIF.
gs_item-matnr = '4001'.
gs_item-werks = '1000' .
APPEND gs_item TO gt_item_ls.
* APPEND gs_item .
DATA go_event_handler TYPE REF TO lcl_event_handler.
* CLEAR gt_item_ls.
* * 创建 dialogbox 对象
CREATE OBJECT gs_dialogbox
EXPORTING
parent = cl_gui_container=>screen0
width = 900
height = 300
style = cl_gui_control=>ws_sysmenu
* REPID = SY-REPID
* DYNNR = SY-DYNNR
* LIFETIME = LIFETIME_DEFAULT
top = 80
left = 50
caption = 'BOM行项目'
** NO_AUTODEF_PROGID_DYNNR =
** METRIC = 0
** NAME =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
event_already_registered = 6
error_regist_event = 7
OTHERS = 8.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* 创建alv对象
CREATE OBJECT gr_alvgrid
EXPORTING
i_parent = gs_dialogbox
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CLEAR:gt_fieldcat1.
PERFORM prepare_field_catalog CHANGING gt_fieldcat1.
PERFORM prepare_layout CHANGING gs_layout1.
CALL METHOD gr_alvgrid->set_table_for_first_display
EXPORTING
is_layout = gs_layout1
it_hyperlink = ts_hype
CHANGING
it_outtab = gt_item_ls
it_fieldcatalog = gt_fieldcat1
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* module user_command_9000 at exit-command .
CREATE OBJECT go_event_handler.
* 注册事件
* SET HANDLER go_event_handler->handle_user_command FOR gr_alvgrid.
* SET HANDLER go_event_handler->handle_toolbar FOR gr_alvgrid.
SET HANDLER go_event_handler->on_close FOR gs_dialogbox.
CALL METHOD gr_alvgrid->set_toolbar_interactive.
ENDFORM. "display_popup
*&---------------------------------------------------------------------*
*& Form PREPARE_FIELD_CATALOG
*&---------------------------------------------------------------------*
* 设置输出属性
*----------------------------------------------------------------------*
* <--P_GT_FIELDCAT text
*----------------------------------------------------------------------*
FORM prepare_field_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat.
* 行项目类别
DATA ls_fcat TYPE lvc_s_fcat .
* 物料
ls_fcat-fieldname = 'MATNR' .
ls_fcat-inttype = 'C' .
ls_fcat-outputlen = '10' .
ls_fcat-coltext = '物料编码' .
ls_fcat-seltext = text-010 .
APPEND ls_fcat TO pt_fieldcat .
CLEAR ls_fcat .
* 物料
ls_fcat-fieldname = 'WERKS' .
ls_fcat-inttype = 'C' .
ls_fcat-outputlen = '10' .
ls_fcat-coltext = '工厂' .
ls_fcat-seltext = text-010 .
APPEND ls_fcat TO pt_fieldcat .
CLEAR ls_fcat .
ENDFORM. " PREPARE_FIELD_CATALOG
*&---------------------------------------------------------------------*
*& Form PREPARE_LAYOUT
*&---------------------------------------------------------------------*
* 设置layout
*----------------------------------------------------------------------*
* <--P_GS_LAYOUT text
*----------------------------------------------------------------------*
FORM prepare_layout CHANGING ps_layout TYPE lvc_s_layo.
ps_layout-zebra = 'X' .
* PS_LAYOUT-GRID_TITLE = 'BOM 行项目信息' .
ps_layout-smalltitle = 'X' .
* PS_LAYOUT-NO_TOOLBAR = 'X'.
ENDFORM. " PREPARE_LAYOUT
*&---------------------------------------------------------------------*
*& Form SUB_DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_display_data .
*****initial datatab
DATA: l_i_output LIKE i_list OCCURS 0 WITH HEADER LINE.
*****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 ALV
****initial others
DATA: l_s_layout TYPE slis_layout_alv.
l_s_layout-colwidth_optimize = 'X'.
****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_callback_user_command = 'USER_COMMAND'
i_callback_pf_status_set = 'SET_PF_STATUS'
it_events = l_events[]
is_layout = l_s_layout
it_fieldcat = l_i_fieldcat[]
TABLES
t_outtab = i_list
EXCEPTIONS
program_error = 1
other = 2.
ENDFORM. " SUB_DISPLAY_DATA
*----------------------------------------------------------------------*
*& Form set_pf_status
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ZMMTEST'."自建状态栏的名称
ENDFORM. "set_pf_status
*&---------------------------------------------------------------------*
*& 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.
""""Comment of Summary List
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.
"""Init the field category of Summary List
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'.
APPEND v_i_fieldcat.
CLEAR v_i_fieldcat.
v_i_fieldcat-fieldname = 'WERKS'.
v_i_fieldcat-tabname = 'I_LIST'.
v_i_fieldcat-seltext_m = '工厂'.
v_i_fieldcat-key = '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.
DATA: wl_answer TYPE c.
DATA: is_stable TYPE lvc_s_stbl .
DATA:dd(22) TYPE c .
* i_list1-gamng * 1000.
****************************************
***自动刷新alv数据到内表中,省去点击保存之后才刷新数据
***注意 selfield-refresh = 'X'.只做这个是不够的
DATA lr_grid TYPE REF TO cl_gui_alv_grid.
is_stable-row = 'X'.
is_stable-col = 'X' .
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lr_grid.
CALL METHOD lr_grid->check_changed_data.
* PERFORM save_alv.
PERFORM alv_refresh CHANGING selfield-col_stable
selfield-row_stable
selfield-refresh.
selfield-refresh = 'X'.
selfield-row_stable = 'X'.
selfield-col_stable = 'X'.
****************************************
IF ucomm = '&JS'.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = '您确定要执行该操作吗?'"TEXT-S07 "确定要删除吗?
icon_button_1 = '是' "TEXT-S08 "是
icon_button_2 = '否' "TEXT-S09 "否
default_button = '2'
display_cancel_button = 'X'
start_column = 25
start_row = 6
IMPORTING
answer = wl_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
*******全选和取消全选
* ELSEIF ucomm = 'ALL'.
* PERFORM select_all.
* PERFORM alv_refresh CHANGING selfield-col_stable
* selfield-row_stable
* selfield-refresh.
* ELSEIF ucomm = 'DALL'.
* PERFORM cancle_all.
* PERFORM alv_refresh CHANGING selfield-col_stable
* selfield-row_stable
* selfield-refresh.
*
* ELSEIF ucomm = '&RF'.
* PERFORM refresh_data .
* ENDIF.
IF wl_answer = '1'.
CASE ucomm.
WHEN '&JS'.
PERFORM display_popup.
* WHEN '&SURE'.
*REFRESH
**********判断是否有勾选记录
* LOOP AT i_list1 WHERE cbox = 'X'.
* zbz = 'X'.
* EXIT .
* ENDLOOP.
* IF zbz = 'X'.
* selfield-refresh = 'X'. "设置刷新标记 必须
*
* LOOP AT i_mes.
*
* MESSAGE i_mes TYPE 'I'.
*
* ENDLOOP.
*
* ELSE.
* MESSAGE '请勾选更改状态的行项目!' TYPE 'I'.
* ENDIF.
* CLEAR i_mes[] .
* CLEAR zbz.
ENDCASE.
ENDIF .
ENDIF.
CALL METHOD lr_grid->refresh_table_display
EXPORTING
is_stable = is_stable
i_soft_refresh = ''
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0 .
LEAVE TO SCREEN 0 .
ENDIF .
ENDFORM. "USER_COMMAND
*l_tabix = sy-tabix.
*IF sy-subrc = 0.
*ENDIF.
*
*ENDFORM. " build_eventtab
*&---------------------------------------------------------------------*
*& Form alv_refresh
*&---------------------------------------------------------------------*
* 更改选择的值
*----------------------------------------------------------------------*
FORM alv_refresh CHANGING po_col_stable po_row_stable po_refresh.
po_col_stable = 'X'.
po_row_stable = 'X'.
po_refresh = 'X'.
ENDFORM. " alv_refresh