**
上下ALV
**
效果图
定制控制名称
代码:
*"GLOBAL DEFINITION
INCLUDE ZMMR021_TOP.
*"SCREEN DEFINITION
INCLUDE ZMMR021_SCL.
*"SCREEN PBO
INCLUDE ZMMR021_PBO.
*"SCREEN PAI
INCLUDE ZMMR021_PAI.
*"FORM
INCLUDE ZMMR021_FRM.
*&---------------------------------------------------------------------*
*& 包含 **ZMMR021_TOP**
*&---------------------------------------------------------------------*
TABLES:sscrfields,ztmm2201_aa.
*----------------------------------------------------------------------*
* 工作区,内表定义
*----------------------------------------------------------------------*
TYPES:BEGIN OF ty_head,
zid TYPE ztmm2201_gl-zid,
ztzlx TYPE ztmm2201_a-ztzlx,
zljh TYPE ztmm2201_a-zljh,
END OF ty_head.
TYPES:BEGIN OF ty_item,
zid TYPE ztmm2201_gl-zid,
zfkyf TYPE ztmm2201_gl-zfkyf,
zftqs TYPE ztmm2204i-zftqs,
zmqftje TYPE ztmm2204i-zmqftje,
zdzdh TYPE ztmm2201_gl-zdzdh,
zfkzt TYPE ztmm2201_gl-zfkzt,
END OF ty_item.
DATA:lt_head TYPE TABLE OF ty_head,
ls_head TYPE ty_head.
DATA:lt_item TYPE TABLE OF ty_item,
ls_item TYPE ty_item,
gt_item TYPE TABLE OF ty_item.
*----------------------------------------------------------------------*
* ALV相关内表定义
*----------------------------------------------------------------------*
DATA: gs_layout TYPE lvc_s_layo,
gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat TYPE lvc_s_fcat.
*----------------------------------------------------------------------*
* 屏幕相关对象,内表定义
*----------------------------------------------------------------------*
DATA: wcl_splitter TYPE REF TO cl_gui_splitter_container,
wcl_container TYPE REF TO cl_gui_custom_container.
DATA :gt_exclude TYPE ui_functions. "tool bar 按钮隐藏
DATA: wcl_head_con TYPE REF TO cl_gui_container,
wcl_head_alv TYPE REF TO cl_gui_alv_grid,
gt_head_fieldcat TYPE lvc_t_fcat,
gs_head_layout TYPE lvc_s_layo.
DATA: wcl_item_con TYPE REF TO cl_gui_container,
wcl_item_alv TYPE REF TO cl_gui_alv_grid,
gt_item_fieldcat TYPE lvc_t_fcat,
gs_item_layout TYPE lvc_s_layo.
*----------------------------------------------------------------------*
* 屏幕按钮
*----------------------------------------------------------------------*
DATA: ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
*&---------------------------------------------------计划行相关事件定义 实现---------------------------------------*
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_HANDLER DEFINITION
*----------------------------------------------------------------------*
* JHH 事件 定义
*----------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION. "#########
PUBLIC SECTION.
" ##Toolbar####
METHODS:
handle_double_click
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column es_row_no,
handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object," E_INTERACTIVE.
" ##USER-COMMAND ####
handle_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS. "lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_HANDLER IMPLEMENTATION
*----------------------------------------------------------------------*
* ITME1 事件 实现
*----------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION.
"双击事件
METHOD handle_double_click.
PERFORM frm_double_click USING e_row e_column es_row_no.
PERFORM frm_item_display.
CALL METHOD wcl_head_alv->refresh_table_display
* EXPORTING
* IS_STABLE = 'X'
* I_SOFT_REFRESH = 'X'
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDMETHOD.
" ##Toolbar####
METHOD handle_toolbar.
DATA: ls_toolbar TYPE stb_button.
CLEAR: ls_toolbar.
ls_toolbar-butn_type = 3. " ###
APPEND ls_toolbar TO e_object->mt_toolbar.
* CLEAR: ls_toolbar.
* ls_toolbar-function = 'ZJSHX'. " ###
* ls_toolbar-icon = icon_create. " #### ICON_CREATE
* ls_toolbar-butn_type = 0. " 0######
* ls_toolbar-disabled = ''. " X########
* ls_toolbar-text = '金税回写'. " ########
* APPEND ls_toolbar TO e_object->mt_toolbar.
ENDMETHOD. "handle_toolbar
" ##USER-COMMAND ####
METHOD handle_command.
DATA: lt_rows TYPE lvc_t_row.
CASE e_ucomm.
WHEN 'ZFSJS'.
* CALL METHOD wcl_head_alv->get_selected_rows
* IMPORTING
* et_index_rows = lt_rows.
* CALL METHOD cl_gui_cfw=>flush.
* IF sy-subrc EQ 0.
* PERFORM frm_fsjs_data TABLES lt_rows.
* ENDIF.
** PERFORM FRM_HEAD_DISPLAY.
* CALL METHOD wcl_head_alv->refresh_table_display
** EXPORTING
** IS_STABLE = 'X'
** I_SOFT_REFRESH = 'X'
* EXCEPTIONS
* finished = 1
* OTHERS = 2.
* IF sy-subrc <> 0.
* ENDIF.
ENDCASE.
ENDMETHOD. "HANDLE_COMMAND
ENDCLASS. "lcl_event_handler IMPLEMENTATION
*&---------------------------------------------------------------------*
*& 包含 **ZMMR021_SCL**
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_zsxrq FOR ztmm2201_aa-zsxrq , "日期
s_lifnr FOR ztmm2201_aa-lifnr , "供应商
s_zid FOR ztmm2201_aa-zid , "台账ID
s_zljh FOR ztmm2201_aa-zljh . "零件号
SELECTION-SCREEN END OF BLOCK blk1.
*---------------------------------------------------------------------*
* INITIALIZATION *
*---------------------------------------------------------------------*
INITIALIZATION.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM frm_get_data.
END-OF-SELECTION.
IF lt_head IS NOT INITIAL.
CALL SCREEN 9000.
ELSE.
MESSAGE '没有数据,请检查' TYPE 'W'.
LEAVE LIST-PROCESSING.
ENDIF.
*&---------------------------------------------------------------------*
*& 包含 **ZMMR021_PBO**
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
SET PF-STATUS 'STA9000'.
SET TITLEBAR 'TIT9000'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module 9000_DISPLAY OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE 9000_display OUTPUT.
PERFORM FRM_SCRENN_SPLIT.
ENDMODULE.
*&---------------------------------------------------------------------*
*& 包含 **ZMMR021_PAI**
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
save_ok = ok_code.
CLEAR: ok_code.
CASE save_ok.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE TO SCREEN 0.
WHEN 'CANCLE'.
LEAVE PROGRAM.
* WHEN 'SAVE'.
* PERFORM FRM_HEAD_SAVE.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& 包含 ZMMR021_FRM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data .
*抬头取数
*明细取数
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SCRENN_SPLIT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_screnn_split .
IF wcl_splitter IS INITIAL.
*&-------创建容器对象
CREATE OBJECT wcl_container
EXPORTING
container_name = 'WCL_CON'.
*&-------屏幕分割3行
CREATE OBJECT wcl_splitter
EXPORTING
parent = wcl_container
rows = 3
columns = 1.
*&-------分配抬头容器
CALL METHOD wcl_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = wcl_head_con.
*&-------分配行项目容器
CALL METHOD wcl_splitter->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = wcl_item_con.
"设置第一行高度
CALL METHOD wcl_splitter->set_row_height
EXPORTING
id = 1
height = '40'.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
"设置第二行高度
CALL METHOD wcl_splitter->set_row_height
EXPORTING
id = 2
height = '60'.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
*&------抬头ALV显示
PERFORM frm_head_display.
*&------行项目ALV显示
PERFORM frm_item_display.
CALL METHOD cl_gui_cfw=>flush
EXCEPTIONS
cntl_system_error = 1
cntl_error = 2.
##NEEDED
IF sy-subrc <> 0.
* error handling
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_HEAD_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_head_display .
DATA ls_variant TYPE disvariant.
ls_variant-report = sy-repid.
ls_variant-username = sy-uname.
ls_variant-handle = '2'.
IF wcl_head_alv IS INITIAL.
CREATE OBJECT wcl_head_alv
EXPORTING
i_parent = wcl_head_con.
*获取字段目录
PERFORM frm_head_fieldcat CHANGING gt_head_fieldcat.
*获取样式
PERFORM frm_layout CHANGING gs_head_layout.
*tool bar隐藏按钮
FREE: gt_exclude.
PERFORM exclude_tb_functions TABLES gt_exclude.
**设置过滤
* PERFORM prepare_filter CHANGING t_filter.
**设置排序
* PERFORM prepare_sort CHANGING t_sort.
**设置超链接
* PERFORM prepare_hyperlinks CHANGING t_hype.
**设置下拉
* PERFORM prepare_drop.
**设置热点
* PERFORM eventload_1.
**设置单元格编辑
* PERFORM prepare_editables.
PERFORM frm_head_event.
CALL METHOD wcl_head_alv->set_table_for_first_display
EXPORTING
* i_buffer_active =
* i_bypassing_buffer =
* i_consistency_check =
* i_structure_name =
is_variant = ls_variant
i_save = 'A'
* i_default = 'X'
is_layout = gs_head_layout
* is_print =
* it_special_groups =
it_toolbar_excluding = gt_exclude
* it_hyperlink = t_hype
* it_alv_graphics =
* it_except_qinfo =
* ir_salv_adapter =
CHANGING
it_outtab = lt_head
it_fieldcatalog = gt_head_fieldcat
* it_sort = t_sort
* it_filter = t_filter
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
ENDIF.
ELSE.
CALL METHOD wcl_head_alv->refresh_table_display
* EXPORTING
* is_stable = 'X'
* 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.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_HEAD_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- GT_HEAD_FIELDCAT
*&---------------------------------------------------------------------*
FORM frm_head_fieldcat CHANGING p_t_fieldcat TYPE lvc_t_fcat.
CLEAR:p_t_fieldcat, gt_fieldcat.
PERFORM subfrm_build_fieldcat USING:
'ZID' 'ID号' '' '' '' '' '',
'ZTZLX' '台账类型' '' '' '' '' '',
'ZLJH' '零件号' '' '' '' '' '',
'ZCX' '车型' '' '' '' '' '',
'ZAQZFZE' '按期支付总额' '' '10' '' '' '',
'ZSL' '税率' '' '20' '' '' '',
'ZCWSPR' '财务审批人' '' '20' '' '' '',
'ZCGSPR' '采购审批人' '' '20' '' '' ''.
MOVE-CORRESPONDING gt_fieldcat TO p_t_fieldcat.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SUBFRM_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_
*& --> P_
*& --> P_
*& --> P_
*& --> P_
*& --> P_
*& --> P_
*&---------------------------------------------------------------------*
FORM subfrm_build_fieldcat USING VALUE(p_fieldname)
VALUE(p_coltext)
VALUE(p_inttype)
VALUE(p_outputlen)
VALUE(p_zero)
VALUE(p_table)
VALUE(p_field).
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = p_fieldname .
gs_fieldcat-coltext = p_coltext .
gs_fieldcat-datatype = p_inttype.
gs_fieldcat-outputlen = p_outputlen.
gs_fieldcat-no_zero = p_zero.
gs_fieldcat-ref_table = p_table.
gs_fieldcat-ref_field = p_field.
APPEND gs_fieldcat TO gt_fieldcat.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- GS_HEAD_LAYOUT
*&---------------------------------------------------------------------*
FORM frm_layout CHANGING p_w_layout TYPE lvc_s_layo.
p_w_layout-zebra = 'X'.
* P_W_LAYOUT-CWIDTH_OPT = 'X'.
p_w_layout-box_fname = 'SEL'. "指定行选择字段
p_w_layout-sel_mode = 'A'.
* GS_LAYOUT-EDIT = 'X'.
* GS_LAYOUT-STYLEFNAME = 'FIELD_STYLE'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> GT_EXCLUDE
*&---------------------------------------------------------------------*
FORM exclude_tb_functions TABLES pt_exclude TYPE ui_functions .
DATA: ls_exclude TYPE ui_func.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row .
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row .
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row .
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row .
APPEND ls_exclude TO pt_exclude.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_HEAD_EVENT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_head_event .
DATA:gr_headevent_handler TYPE REF TO lcl_event_handler. "################
*&------Enter Event
CALL METHOD wcl_head_alv->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified
EXCEPTIONS
error = 1
OTHERS = 2.
CALL METHOD wcl_head_alv->register_edit_event "注册更新事件
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
CREATE OBJECT gr_headevent_handler.
SET HANDLER gr_headevent_handler->handle_double_click FOR wcl_head_alv .
SET HANDLER gr_headevent_handler->handle_command FOR wcl_head_alv.
SET HANDLER gr_headevent_handler->handle_toolbar FOR wcl_head_alv.
CALL METHOD wcl_head_alv->set_toolbar_interactive.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ITEM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_item_display .
DATA ls_variant TYPE disvariant.
ls_variant-report = sy-repid.
ls_variant-username = sy-uname.
ls_variant-handle = '2'.
IF wcl_item_alv IS INITIAL.
CREATE OBJECT wcl_item_alv
EXPORTING
i_parent = wcl_item_con.
*获取字段目录
PERFORM frm_item_fieldcat CHANGING gt_item_fieldcat.
*获取样式
PERFORM frm_layout CHANGING gs_item_layout.
*tool bar隐藏按钮
FREE: gt_exclude.
PERFORM exclude_tb_functions TABLES gt_exclude.
**设置过滤
* PERFORM prepare_filter CHANGING t_filter.
**设置排序
* PERFORM prepare_sort CHANGING t_sort.
**设置超链接
* PERFORM prepare_hyperlinks CHANGING t_hype.
**设置下拉
* PERFORM prepare_drop.
**设置热点
* PERFORM eventload_1.
**设置单元格编辑
* PERFORM prepare_editables.
* PERFORM FRM_ITEM_EVENT.
CALL METHOD wcl_item_alv->set_table_for_first_display
EXPORTING
* i_buffer_active =
* i_bypassing_buffer =
* i_consistency_check =
* i_structure_name =
is_variant = ls_variant
i_save = 'A'
* i_default = 'X'
is_layout = gs_item_layout
* is_print =
* it_special_groups =
it_toolbar_excluding = gt_exclude
* it_hyperlink = t_hype
* it_alv_graphics =
* it_except_qinfo =
* ir_salv_adapter =
CHANGING
it_outtab = lt_item
it_fieldcatalog = gt_item_fieldcat
* it_sort = t_sort
* it_filter = t_filter
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
ENDIF.
ELSE.
CALL METHOD wcl_item_alv->refresh_table_display
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ITEM_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- GT_ITEM_FIELDCAT
*&---------------------------------------------------------------------*
FORM frm_item_fieldcat CHANGING p_t_fieldcat TYPE lvc_t_fcat.
CLEAR:p_t_fieldcat, gt_fieldcat.
PERFORM subfrm_build_fieldcat USING:
'ZID' 'ID号' '' '20' '' '' '',
'ZFKYF' '付款月份' '' '20' '' '' '',
'ZDZDH' '对账单号' '' '20' '' '' '',
'ZFKZT' '付款状态' '' '20' '' '' ''.
MOVE-CORRESPONDING gt_fieldcat TO p_t_fieldcat.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> E_ROW
*& --> E_COLUMN
*& --> ES_ROW_NO
*&---------------------------------------------------------------------*
FORM frm_double_click USING p_e_row
p_e_column
p_es_row_no TYPE lvc_s_roid.
READ TABLE lt_head INTO ls_head INDEX p_es_row_no-row_id.
IF sy-subrc = 0.
lt_item = gt_item.
DELETE lt_item WHERE zid <> ls_head-zid.
ENDIF.
ENDFORM.
后记:写这些东西只是为了让给自己做个记录。如果你看到了这篇博文希望能对你有那么一点帮助,关于里面的注解只是我自己的理解,不正确的地方,请指出。