*&---------------------------------------------------------------------*
*& Report YYRV005TEST37
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT yyrv005test37.
*----------------------------------------------------------------------*
* 数据库表声明/Database table declaration
*----------------------------------------------------------------------*
TABLES:mara.
DATA:ls_row_id TYPE lvc_s_row,
ls_column_id TYPE lvc_s_col,
ls_row_no TYPE lvc_s_roid.
*--------------------------------------------------------------------*
*内表定义
*--------------------------------------------------------------------*
TYPES: BEGIN OF ty_alv,
matnr TYPE mara-matnr, "物料号
mtart TYPE mara-mtart, "物料类型
matkl TYPE mara-matkl, "物料组
meins TYPE mara-meins, "基本计量单位
zcheck TYPE c,
icon TYPE char4,
msg TYPE char50,
END OF ty_alv.
TYPES:BEGIN OF ty_marc,
matnr TYPE marc-matnr, "物料号
werks TYPE marc-werks, "工厂
bwtty TYPE marc-bwtty, "评估类别
zcheck TYPE c,
END OF ty_marc.
TYPES:BEGIN OF ty_makt,
matnr TYPE makt-matnr, "物料号
spras TYPE makt-spras, "语言代码
maktx TYPE makt-maktx, "物料描述
zcheck TYPE c,
END OF ty_makt.
*----------------------------------------------------------------------*
* 全局变量定义/Global variable definition
*----------------------------------------------------------------------*
DATA:gt_alv1 TYPE STANDARD TABLE OF ty_alv,
gs_alv1 TYPE ty_alv,
gt_makt TYPE STANDARD TABLE OF ty_makt,
gs_makt TYPE ty_makt,
gt_marc TYPE STANDARD TABLE OF ty_marc,
gs_marc TYPE ty_marc,
lt_alv2 TYPE STANDARD TABLE OF ty_marc,
ls_alv2 TYPE ty_marc,
lt_alv3 TYPE STANDARD TABLE OF ty_makt,
ls_alv3 TYPE ty_makt.
"创建ALV屏幕
DATA: g_grid_t TYPE REF TO cl_gui_alv_grid, "顶部
g_grid_l TYPE REF TO cl_gui_alv_grid, "底部——左部
g_grid_r TYPE REF TO cl_gui_alv_grid, "底部——右部
g_container_9000 TYPE REF TO cl_gui_docking_container, "ALV容器 不用画屏幕容器 cl_gui_custom_container, "ALV container容器 需要画屏幕容器
g_splitter TYPE REF TO cl_gui_splitter_container,
g_splitter1 TYPE REF TO cl_gui_splitter_container,
g_container_t TYPE REF TO cl_gui_container, "顶部
g_container_b TYPE REF TO cl_gui_container, "底部
g_container_l TYPE REF TO cl_gui_container, "底部——左部
g_container_r TYPE REF TO cl_gui_container, "底部——右部
gt_exclude_9000 TYPE ui_functions, " 用于去掉不要的菜单栏
gt_fieldcat_t TYPE lvc_t_fcat, "顶部字段
gt_fieldcat_l TYPE lvc_t_fcat, "底部——左部字段
gt_fieldcat_r TYPE lvc_t_fcat, "底部——右部字段
gs_layout_l TYPE lvc_s_layo, "底部——左部布局
gs_layout_r TYPE lvc_s_layo, "底部——右部布局
gs_variant_t TYPE disvariant,
gs_variant_l TYPE disvariant,
gs_variant_r TYPE disvariant,
gt_sort TYPE lvc_t_sort, "用于排序
gs_sort TYPE lvc_s_sort, "用于排序
gt_filt TYPE lvc_t_filt.
DATA:gv_9000 TYPE scrfname VALUE 'Z9000', "GV_TABLE 是屏幕中定义的控件
r_ucomm LIKE sy-ucomm,
ok_code TYPE sy-ucomm,
save_code TYPE sy-ucomm.
*&---------------------------------------------------------------------*
*& 字段串定义/Field-symbols *
*&---------------------------------------------------------------------*
FIELD-SYMBOLS:<fs_alv1> TYPE ty_alv.
*--------------------------------------------------------------------*
*ALV参数声明
*--------------------------------------------------------------------*
DATA: gt_fieldcat TYPE lvc_t_fcat, "字段目录内表
gs_fieldcat TYPE lvc_s_fcat, "字段目录工作区
gs_layout TYPE lvc_s_layo. "用于定义ALV表单的相关格式、属性
*--------------------------------------------------------------------*
*定义选择屏幕参数
*--------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blk0 WITH FRAME.
SELECT-OPTIONS: s_matnr FOR mara-matnr. "物料
SELECT-OPTIONS: s_ersda FOR mara-ersda DEFAULT '20190801' TO sy-datum. "创建日期
SELECTION-SCREEN END OF BLOCK blk0.
*&---------------------------------------------------------------------*
*& INITIALIZATION/选择屏幕前初始化 *
*&---------------------------------------------------------------------*
INITIALIZATION.
CLASS alv_event_9000 DEFINITION DEFERRED."
CLASS alv_event_9000 DEFINITION INHERITING FROM cl_gui_alv_grid.
PUBLIC SECTION.
METHODS handle_double_click FOR EVENT double_click OF cl_gui_alv_grid"双击事件
IMPORTING e_row e_column es_row_no.
METHODS handle_user_command FOR EVENT user_command OF cl_gui_alv_grid"用户按钮事件
IMPORTING e_ucomm.
METHODS handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid"工具条事件
IMPORTING e_object e_interactive.
METHODS handle_delayed_sel_callback FOR EVENT delayed_changed_sel_callback OF cl_gui_alv_grid.
METHODS handle_delayed_callback FOR EVENT delayed_callback OF cl_gui_alv_grid.
METHODS constructor.
METHODS set_delay_time.
ENDCLASS. "alv_event_9000 DEFINITION
*----------------------------------------------------------------------*
* CLASS BELOW_ALV_EVENT IMPLEMENTATION 定义的事件类对应的事件响应模块
*----------------------------------------------------------------------*
CLASS alv_event_9000 IMPLEMENTATION.
METHOD handle_double_click . "双击事件
PERFORM frm_double_click USING e_row e_column es_row_no.
ENDMETHOD. "HANDLE_USER_COMMAND
METHOD handle_user_command. "用户按钮事件
PERFORM frm_handle_user_command9000 USING e_ucomm.
ENDMETHOD. "handle_hotspot_click
METHOD handle_toolbar. "工具条事件
PERFORM frm_handle_toolbar9000 USING e_object e_interactive."设置工具条图标
ENDMETHOD. "HANDLE_DOUBLE_CLICK
METHOD handle_delayed_sel_callback.
" IF g_container_t IS NOT INITIAL.
CALL METHOD g_grid_t->check_changed_data.
CALL METHOD g_grid_t->get_current_cell
IMPORTING
es_row_id = ls_row_id
es_col_id = ls_column_id
es_row_no = ls_row_no.
READ TABLE gt_alv1 INTO gs_alv1 INDEX ls_row_no-row_id.
IF sy-subrc EQ 0.
REFRESH:lt_alv2,lt_alv3.
LOOP AT gt_marc INTO gs_marc WHERE matnr = gs_alv1-matnr.
CLEAR:ls_alv2.
MOVE-CORRESPONDING gs_marc TO ls_alv2.
APPEND ls_alv2 TO lt_alv2.
CLEAR:gs_marc.
ENDLOOP.
LOOP AT gt_makt INTO gs_makt WHERE matnr = gs_alv1-matnr.
CLEAR:ls_alv3.
MOVE-CORRESPONDING gs_makt TO ls_alv3.
APPEND ls_alv3 TO lt_alv3.
CLEAR:gs_makt.
ENDLOOP.
ENDIF.
PERFORM frm_refresh_alv_9000 USING g_grid_t.
PERFORM frm_refresh_alv_9000 USING g_grid_l.
PERFORM frm_refresh_alv_9000 USING g_grid_r.
" ENDIF.
CALL METHOD cl_gui_cfw=>flush.
ENDMETHOD.
METHOD handle_delayed_callback.
CALL METHOD g_grid_t->check_changed_data.
CALL METHOD g_grid_t->get_current_cell
IMPORTING
es_row_id = ls_row_id
es_col_id = ls_column_id
es_row_no = ls_row_no.
READ TABLE gt_alv1 INTO gs_alv1 INDEX ls_row_no-row_id.
IF sy-subrc EQ 0.
REFRESH:lt_alv2,lt_alv3.
LOOP AT gt_marc INTO gs_marc WHERE matnr = gs_alv1-matnr.
CLEAR:ls_alv2.
MOVE-CORRESPONDING gs_marc TO ls_alv2.
APPEND ls_alv2 TO lt_alv2.
CLEAR:gs_marc.
ENDLOOP.
LOOP AT gt_makt INTO gs_makt WHERE matnr = gs_alv1-matnr.
CLEAR:ls_alv3.
MOVE-CORRESPONDING gs_makt TO ls_alv3.
APPEND ls_alv3 TO lt_alv3.
CLEAR:gs_makt.
ENDLOOP.
ENDIF.
PERFORM frm_refresh_alv_9000 USING g_grid_t.
PERFORM frm_refresh_alv_9000 USING g_grid_l.
PERFORM frm_refresh_alv_9000 USING g_grid_r.
" ENDIF.
CALL METHOD cl_gui_cfw=>flush.
ENDMETHOD.
METHOD constructor.
super->constructor( i_parent = g_container_t ). "cl_gui_container=>default_screen ).
ENDMETHOD.
METHOD set_delay_time.
g_grid_t->set_delay_change_selection( 1 ).
g_grid_t->set_delay_move_current_cell( 1 ).
ENDMETHOD.
ENDCLASS. "alv_event_9000 IMPLEMENTATION
AT SELECTION-SCREEN.
*&---------------------------------------------------------------------*
*& Start-of-selection/开始选择屏幕 *
*&---------------------------------------------------------------------*
START-OF-SELECTION.
"获取数据
PERFORM frm_get_data.
*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT
*&---------------------------------------------------------------------*
FORM frm_layout.
CLEAR:gs_layout,gs_layout_l,gs_layout_r.
gs_layout-grid_title = '第1个界面'. "标题
gs_layout-cwidth_opt = 'A'. "优化列宽
gs_layout-zebra = 'X'. "斑马线
gs_layout-sel_mode = 'A'. "设置行模式"
gs_layout-box_fname = 'ZCHECK'."选择行控制
gs_layout_l = gs_layout_r = gs_layout.
gs_layout_l-grid_title = '第2个界面'. "标题
gs_layout_r-grid_title = '第3个界面'. "标题
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA3
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_data.
SELECT
matnr"物料号
mtart"物料类型
matkl"物料组
meins"基本计量单位
FROM mara
INTO TABLE gt_alv1
WHERE matnr IN s_matnr
AND ersda IN s_ersda.
IF gt_alv1 IS NOT INITIAL.
SELECT
matnr"物料号
werks"工厂
bwtty"评估类别
FROM marc
INTO TABLE gt_marc
FOR ALL ENTRIES IN gt_alv1
WHERE matnr = gt_alv1-matnr.
SELECT
matnr"物料号
spras"语言代码
maktx"物料描述
FROM makt
INTO TABLE gt_makt
FOR ALL ENTRIES IN gt_alv1
WHERE matnr = gt_alv1-matnr.
ENDIF.
IF gt_alv1 IS INITIAL.
MESSAGE '系统中无相关数据' TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ELSE.
CALL SCREEN 9000.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FIELDCAT3
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_fieldcat4.
*&---alv 表头宏
DEFINE init_fieldcat.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1. " 字段技术名称
gs_fieldcat-coltext = &2. " 显示名称
gs_fieldcat-ref_table = &3. " 参照表,标准功能实现例如搜索帮助
gs_fieldcat-ref_field = &4. " 参照表字段,标准功能实现例如搜索帮助
gs_fieldcat-no_init_ch = &5.
gs_fieldcat-edit = &6. " 是否可以编辑
gs_fieldcat-key = &7. "
gs_fieldcat-hotspot = &8. "
gs_fieldcat-outputlen = &9. "
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
REFRESH:gt_fieldcat.
init_fieldcat 'MATNR' '物料号' '' '' '' '' '' '' '' .
init_fieldcat 'MTART' '物料类型' '' '' '' '' '' '' '' .
init_fieldcat 'MATKL' '物料组' '' '' '' '' '' '' '' .
init_fieldcat 'MEINS' '基本计量单位' '' '' '' '' '' '' '' .
gt_fieldcat_t = gt_fieldcat.
REFRESH:gt_fieldcat.
init_fieldcat 'MATNR' '物料号' '' '' '' '' '' '' '' .
init_fieldcat 'WERKS' '工厂' '' '' '' '' '' '' '' .
init_fieldcat 'BWTTY' '评估类别' '' '' '' '' '' '' '' .
gt_fieldcat_l = gt_fieldcat.
REFRESH:gt_fieldcat.
init_fieldcat 'MATNR' '物料号' '' '' '' '' '' '' '' .
init_fieldcat 'SPRAS' '语言代码' '' '' '' '' '' '' '' .
init_fieldcat 'MAKTX' '物料描述' '' '' '' '' '' '' '' .
gt_fieldcat_r = gt_fieldcat.
ENDFORM.
FORM frm_enter_data.
MESSAGE '调用方法成功' TYPE 'S'.
ENDFORM.
MODULE status_9000 OUTPUT.
SET PF-STATUS 'STANDARD'.
ENDMODULE.
MODULE display_alv_9000 OUTPUT.
IF g_container_9000 IS NOT BOUND.
PERFORM frm_create_container_9000.
* PERFORM FRM_ALV_SORT_9000.
PERFORM frm_fieldcat4.
PERFORM frm_layout.
PERFORM frm_alv_btn_exclude_9000.
PERFORM frm_alv_event_9000.
PERFORM frm_alv_display_9000.
ELSE.
PERFORM frm_refresh_alv_9000 USING g_grid_t.
PERFORM frm_refresh_alv_9000 USING g_grid_l.
PERFORM frm_refresh_alv_9000 USING g_grid_r.
ENDIF.
ENDMODULE.
MODULE user_command_9000 INPUT.
DATA: lt_row TYPE lvc_t_row,
lt_roid TYPE lvc_t_roid,
ls_row TYPE lvc_s_row.
save_code = ok_code.
CLEAR ok_code.
CASE save_code.
WHEN 'BACK'."设置功能键返回按钮单击事件
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_CONTAINER_9000
*& 创建容器
*&---------------------------------------------------------------------*
FORM frm_create_container_9000.
* 创建 容器
CREATE OBJECT g_container_9000
EXPORTING
repid = sy-repid
dynnr = '9000'
* side = cl_gui_docking_container=>dock_at_right ”ALV贴屏幕右边,从屏幕右边开始算宽度
side = cl_gui_docking_container=>dock_at_top "ALV贴屏幕左边,从左边算屏幕宽度,
extension = 1000 "屏幕宽度
* ratio = 95 "屏幕比例 小于5大于95会报cntl_error异常
style = cl_gui_control=>ws_child "可选参数,设置ALV是否可用手动拖动大小
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE s001(00) WITH '屏幕初始化失败'.
LEAVE LIST-PROCESSING.
ENDIF.
"拆分成2行1列部分
CREATE OBJECT g_splitter
EXPORTING
parent = g_container_9000
rows = 2
columns = 1.
"一行一列
CALL METHOD g_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = g_container_t.
CALL METHOD g_splitter->set_column_width
EXPORTING
id = 1
width = 100.
"二行一列*
CALL METHOD g_splitter->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = g_container_b.
"拆分成一行二列部分*
CREATE OBJECT g_splitter1
EXPORTING
parent = g_container_b
rows = 1
columns = 2.
"一行一列*
CALL METHOD g_splitter1->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = g_container_l.
CALL METHOD g_splitter1->set_column_width
EXPORTING
id = 2
width = 50.
"*一行二列*
CALL METHOD g_splitter1->get_container
EXPORTING
row = 1
column = 2
RECEIVING
container = g_container_r.
CALL METHOD g_splitter1->set_column_width
EXPORTING
id = 3
width = 50.
CREATE OBJECT g_grid_t "上半部分
EXPORTING
i_parent = g_container_t.
CREATE OBJECT g_grid_l "左半部分
EXPORTING
i_parent = g_container_l.
CREATE OBJECT g_grid_r "右半部分
EXPORTING
i_parent = g_container_r.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_BTN_EXCLUDE_9000
*& 排除不用的按钮
*&---------------------------------------------------------------------*
FORM frm_alv_btn_exclude_9000.
DATA: ls_exclude TYPE ui_func.
REFRESH gt_exclude_9000.
CLEAR ls_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_detail.
APPEND ls_exclude TO gt_exclude_9000.
CLEAR ls_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
APPEND ls_exclude TO gt_exclude_9000.
CLEAR ls_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
APPEND ls_exclude TO gt_exclude_9000.
CLEAR ls_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
APPEND ls_exclude TO gt_exclude_9000.
CLEAR ls_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
APPEND ls_exclude TO gt_exclude_9000.
CLEAR ls_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
APPEND ls_exclude TO gt_exclude_9000.
CLEAR ls_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
APPEND ls_exclude TO gt_exclude_9000.
CLEAR ls_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_check.
APPEND ls_exclude TO gt_exclude_9000.
CLEAR ls_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
APPEND ls_exclude TO gt_exclude_9000.
CLEAR ls_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND ls_exclude TO gt_exclude_9000.
CLEAR ls_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
APPEND ls_exclude TO gt_exclude_9000.
CLEAR ls_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_refresh.
APPEND ls_exclude TO gt_exclude_9000.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_EVENT_9000
*&---------------------------------------------------------------------*
FORM frm_alv_event_9000.
DATA: lr_event_handler TYPE REF TO alv_event_9000.
* CALL METHOD G_GRID_T->register_edit_event "注册回车事件
* EXPORTING
* i_event_id = cl_gui_alv_grid=>mc_evt_enter.
*
* CALL METHOD g_grid_9000->register_edit_event "注册失去鼠标事件
* EXPORTING
* i_event_id = cl_gui_alv_grid=>mc_evt_modified.
IF lr_event_handler IS INITIAL.
CREATE OBJECT lr_event_handler.
ENDIF.
* SET HANDLER LR_EVENT_HANDLER->HANDLE_DATA_CHANGED FOR G_GRID_9000. "数据改动事件
SET HANDLER lr_event_handler->handle_double_click FOR g_grid_t.
* SET HANDLER LR_EVENT_HANDLER->HANDLE_ON_F4 FOR G_GRID_9000.
* SET HANDLER LR_EVENT_HANDLER->HANDLE_HOTSPOT_CLICK FOR G_GRID_9000 .
SET HANDLER lr_event_handler->handle_delayed_sel_callback FOR g_grid_t.
SET HANDLER lr_event_handler->handle_delayed_callback FOR g_grid_t.
SET HANDLER lr_event_handler->handle_toolbar FOR g_grid_t. "工具栏事件
SET HANDLER lr_event_handler->handle_user_command FOR g_grid_t. "用户命令事件
CALL METHOD g_grid_t->register_delayed_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_delayed_change_select.
CALL METHOD g_grid_t->register_delayed_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_delayed_move_curr_cell.
CALL METHOD g_grid_t->set_table_for_first_display
EXPORTING
* I_CONSISTENCY_CHECK = 'X'
is_variant = gs_variant_t
it_toolbar_excluding = gt_exclude_9000
i_save = 'A'
i_default = 'X' "允许定义默认布局
is_layout = gs_layout
CHANGING
it_outtab = gt_alv1
it_fieldcatalog = gt_fieldcat_t
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
ENDIF.
CALL METHOD lr_event_handler->set_delay_time( ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_DISPLAY_9000
*&---------------------------------------------------------------------*
FORM frm_alv_display_9000.
CALL METHOD g_grid_l->set_table_for_first_display
EXPORTING
* I_CONSISTENCY_CHECK = 'X'
is_variant = gs_variant_l
it_toolbar_excluding = gt_exclude_9000
i_save = 'A'
i_default = 'X' "允许定义默认布局
is_layout = gs_layout_l
* IS_PRINT = GS_PRINT_H
CHANGING
it_outtab = lt_alv2
it_fieldcatalog = gt_fieldcat_l
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
ENDIF.
CALL METHOD g_grid_r->set_table_for_first_display
EXPORTING
* I_CONSISTENCY_CHECK = 'X'
is_variant = gs_variant_r
it_toolbar_excluding = gt_exclude_9000
i_save = 'A'
i_default = 'X' "允许定义默认布局
is_layout = gs_layout_r
* IS_PRINT = GS_PRINT_H
CHANGING
it_outtab = lt_alv3
it_fieldcatalog = gt_fieldcat_r
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOUBLE_CLICK
*&---------------------------------------------------------------------*
FORM frm_double_click USING p_e_row_id TYPE lvc_s_row
p_e_column_id TYPE lvc_s_col
p_es_row_no TYPE lvc_s_roid.
READ TABLE gt_alv1 INTO gs_alv1 INDEX p_es_row_no-row_id."得到点击的行
IF sy-subrc EQ 0.
REFRESH:lt_alv2,lt_alv3.
LOOP AT gt_marc INTO gs_marc WHERE matnr = gs_alv1-matnr.
CLEAR:ls_alv2.
MOVE-CORRESPONDING gs_marc TO ls_alv2.
APPEND ls_alv2 TO lt_alv2.
CLEAR:gs_marc.
ENDLOOP.
LOOP AT gt_makt INTO gs_makt WHERE matnr = gs_alv1-matnr.
CLEAR:ls_alv3.
MOVE-CORRESPONDING gs_makt TO ls_alv3.
APPEND ls_alv3 TO lt_alv3.
CLEAR:gs_makt.
ENDLOOP.
PERFORM frm_refresh_alv_9000 USING g_grid_t.
PERFORM frm_refresh_alv_9000 USING g_grid_l.
PERFORM frm_refresh_alv_9000 USING g_grid_r.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_HANDLE_USER_COMMAND
*&---------------------------------------------------------------------*
FORM frm_handle_user_command9000 USING pv_ucomm.
CALL METHOD g_grid_t->get_selected_rows
IMPORTING
et_index_rows = lt_row
et_row_no = lt_roid.
FIELD-SYMBOLS:<fs_zcheck>.
* 因为OOALV中侧边栏选择框不起作用,但是需要使用,就将选中的行的侧边栏的值修改一下
LOOP AT gt_alv1 ASSIGNING <fs_alv1>.
<fs_alv1>-zcheck = ''.
ENDLOOP.
IF lt_row IS NOT INITIAL.
LOOP AT lt_row INTO ls_row.
LOOP AT gt_alv1 ASSIGNING <fs_alv1>.
IF sy-tabix = ls_row-index.
<fs_alv1>-zcheck = 'X'.
ENDIF.
ENDLOOP.
CLEAR:ls_row.
ENDLOOP.
ELSE.
MESSAGE '请选择数据' TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
CASE pv_ucomm.
WHEN '&ENTER'."审批通过
PERFORM frm_enter_data.
WHEN OTHERS.
ENDCASE.
PERFORM frm_refresh_alv_9000 USING g_grid_t.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_HANDLE_TOOLBAR
*&---------------------------------------------------------------------*
FORM frm_handle_toolbar9000 USING p_object p_interactive.
PERFORM frm_handle_toolbar_pro USING p_object '&ENTER' '@0V@' '确认'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_HANDLE_TOOLBAR_PRO
*&---------------------------------------------------------------------*
FORM frm_handle_toolbar_pro USING p_object TYPE REF TO cl_alv_event_toolbar_set
p_function TYPE stb_button-function
p_icon TYPE stb_button-icon
p_text TYPE stb_button-text.
DATA: ls_toolbar TYPE stb_button,
lv_quickinfo TYPE stb_button-quickinfo.
CLEAR ls_toolbar.
MOVE 3 TO ls_toolbar-butn_type. " 分隔符
APPEND ls_toolbar TO p_object->mt_toolbar.
CLEAR ls_toolbar.
MOVE 0 TO ls_toolbar-butn_type. " 按钮(正常)
MOVE p_function TO ls_toolbar-function. "功能码
MOVE p_icon TO ls_toolbar-icon. "图标
MOVE p_text TO ls_toolbar-text. "显示文本
lv_quickinfo = p_text.
MOVE lv_quickinfo TO ls_toolbar-quickinfo.
APPEND ls_toolbar TO p_object->mt_toolbar.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_REFRESH_ALV_9000
*&---------------------------------------------------------------------*
FORM frm_refresh_alv_9000 USING pv_grid TYPE REF TO cl_gui_alv_grid.
DATA: lt_celltab TYPE lvc_t_styl,
ls_celltab TYPE lvc_s_styl,
ls_stable TYPE lvc_s_stbl.
ls_stable-row = 'X'. "固定行
ls_stable-col = 'X'. "固定列
CHECK pv_grid IS NOT INITIAL.
CALL METHOD pv_grid->refresh_table_display
EXPORTING
is_stable = ls_stable
* I_SOFT_REFRESH = 'X'
EXCEPTIONS
finished = 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.
CALL METHOD cl_gui_cfw=>flush.
ENDFORM.