根据结构自动创建field catlog
- alv字段列表。
DATA: GT_FIELDCAT TYPE LVC_T_FCAT.
DATA: GS_FIELDCAT TYPE LVC_S_FCAT.
CALL FUNCTION ‘LVC_FIELDCATALOG_MERGE’
EXPORTING
-
I_STRUCTURE_NAME = ‘ZSDS_UI_REPORTS_ALV’ "alv 结构名I_BUFFER_ACTIVE =
-
I_CLIENT_NEVER_DISPLAY = 'X'
-
I_BYPASSING_BUFFER =
-
CHANGINGI_INTERNAL_TABNAME =
CT_FIELDCAT = GT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
IF SY-SUBRC <> 0. - Implement suitable error handling here
ENDIF.
ALV 单元的编辑 ,带出其他值
REPORT zasustesthjh001.
TABLES : t001 , knb1 .
DATA : BEGIN OF ls_data ,
kunnr TYPE knb1 -kunnr ,
name1 TYPE kna1 -name1 ,
bukrs TYPE t001 -bukrs ,
butxt TYPE t001 -butxt ,
END OF ls_data .
DATA: lt_data LIKE TABLE OF ls_data WITH HEADER LINE .
INCLUDE zpublic_alv .
START-OF-SELECTION .
SELECT bukrs kunnr FROM knb1 INTO CORRESPONDING FIELDS OF TABLE lt_data .
DEFINE alv_edit_dic.
gt_field-fieldname = &1.
gt_field-scrtext_l = &2.
gt_field-outputlen = &3.
gt_field-edit = ‘X’.
gt_field-ref_field = &4.
gt_field-ref_table = &5.
append gt_field.
clear gt_field.
END-OF-DEFINITION.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = gt_event
EXCEPTIONS
list_type_wrong = 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.
gs_event-NAME = ‘CALLER_EXIT’.
gs_event-FORM = ‘CALLER_EXIT’.
APPEND gs_event TO gt_event.
gs_event-name = ‘DATA_CHANGED’.
gs_event-form = ‘FRM_DATA_CHANGED’.
APPEND gs_event TO gt_event.
alv_edit_dic ‘KUNNR’ ‘客户编号’ 10 ‘KUNNR’ ‘KNA1’ .
alv1 name1 客户名称 .
alv_edit_dic ‘BUKRS’ ‘公司代码’ 4 ‘BUKRS’ ‘T001’ .
alv1 butxt 公司代码名称 .
gs_layout- cwidth_opt = ‘X’ ."自动优化列宽
gs_layout-zebra = ‘X’. "显示
call function ‘REUSE_ALV_GRID_DISPLAY_LVC’
exporting
i_callback_program = sy -repid
it_fieldcat_lvc = gt_field[]
is_layout_lvc = gs_layout
i_grid_title = sy -title
i_callback_pf_status_set = ‘’
i_callback_user_command = ‘USERCOMMAND’
i_save = ‘A’
-
tablesit_sort = gt_sort[] it_sort_lvc = gt_sort_lvc it_events = gt_event "传入方法
t_outtab = lt_data
endform .
FORM frm_data_changed USING p_changed TYPE REF TO
cl_alv_changed_data_protocol .
DATA : lvc_s_stbl TYPE lvc_s_stbl .
DATA : tem_grid TYPE REF TO cl_gui_alv_grid…
DATA : ls_mod TYPE lvc_s_modi, lv_kunnr TYPE char10 .
DATA : lbutxt TYPE char40, lname1 TYPE char40 .
FIELD-SYMBOLS .
CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
IMPORTING
e_grid = tem_grid.
-
設定 ENTER 事件
CALL METHOD tem_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter
EXCEPTIONS
error = 1
OTHERS = 2.LOOP AT p_changed->mt_mod_cells INTO ls_mod .
*根据修改值修改其他值 eg:
IF ls_mod-fieldname = ‘Z_JHBL’ OR ls_mod-fieldname = ‘Z_HL’ OR
ls_mod-fieldname CS ‘Z_VOL’ OR ls_mod-fieldname CS ‘Z_DJ’ . -
CALL METHOD p_changed->modify_cell
-
EXPORTING
-
i_row_id = ls_mod-row_id
-
i_fieldname = 'NAME1'
-
i_value = lname1. READ TABLE gt_data ASSIGNING FIELD-SYMBOL(<fs_data>) INDEX ls_mod-row_id . IF sy-subrc = 0. ASSIGN COMPONENT ls_mod-fieldname OF STRUCTURE <fs_data> TO <fs> . <fs> = ls_mod-value . PERFORM frm_data_calc USING <fs_data> .
*刷新内表
lvc_s_stbl-row = ‘X’ .
lvc_s_stbl-col = ‘X’ .
CALL METHOD tem_grid->refresh_table_display EXPORTING is_stable = lvc_s_stbl .
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
*设置下拉列表,使Grid和内表能链接上
---------------------------------------------------------------------
FORM caller_exit USING ls_data TYPE slis_data_caller_exit .
DATA : l_ref_alv TYPE REF TO cl_gui_alv_grid…
CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
IMPORTING
e_grid = l_ref_alv.
-
CALL METHOD ref_grid->check_changed_data.
-
设置enter事件
CALL METHOD l_ref_alv->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter
EXCEPTIONS
error = 1
OTHERS = 2.IF sy-batch IS INITIAL.
CALL METHOD l_ref_alv->register_edit_event
EXPORTING -
i_event_id = cl_gui_alv_grid=>mc_evt_enter. "回车时触发 i_event_id = cl_gui_alv_grid=>mc_evt_modified. "单元格更改触发
ENDIF .
-
CREATE OBJECT GT_EVENT_RECEIVER.
-
SET HANDLER GT_EVENT_RECEIVER->HANDLE_MODIFY FOR L_REF_ALV.
ENDFORM.
==========================================================
ALV F4 帮助
TYPE-POOLS:slis.
CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA: gt_fcat TYPE lvc_t_fcat,
gs_fcat TYPE lvc_s_fcat,
gt_f4 TYPE lvc_t_f4,
gs_f4 TYPE lvc_s_f4,
gs_event TYPE slis_alv_event,
gt_event TYPE slis_t_event,
gs_layout TYPE lvc_s_layo,
gs_glay TYPE lvc_s_glay.
DATA: event_receiver TYPE REF TO lcl_event_receiver,
go_grid TYPE REF TO cl_gui_alv_grid.
DATA: BEGIN OF gs_data ,
pernr TYPE persno,
nachn TYPE nachn,
gesch TYPE gesch,
END OF gs_data,
gt_data LIKE TABLE OF gs_data.
DATA: BEGIN OF gs_f4value,
gesch TYPE gesch,
ztext TYPE text,
END OF gs_f4value,
gt_f4value LIKE TABLE OF gs_f4value.
————————————————————————————————————————
- CLASS LCL_EVENT_RECEIVER DEFINITION
———————————————————————————————————————-
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
handle_f4 FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
e_fieldvalue
es_row_no
er_event_data
et_bad_cells
e_display.
ENDCLASS.
———————————————————————————————————————- - CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
———————————————————————————————————————-
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_f4.
PERFORM f_f4_help USING e_fieldname
es_row_no.
er_event_data->m_event_handled = ‘x’ .
PERFORM refresh_table_alv.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
PERFORM f_get_data.
PERFORM f_show_data.
FORM f_get_data .
SELECT pernr nachn FROM pa0002 INTO CORRESPONDING FIELDS OF TABLE gt_data
WHERE begda LE sy-datum AND endda GE sy-datum.
CLEAR gs_f4value.
gs_f4value-gesch = .
gs_f4value-ztext = ‘男’.
APPEND gs_f4value TO gt_f4value.
CLEAR gs_f4value.
gs_f4value-gesch = .
gs_f4value-ztext = ‘女’.
APPEND gs_f4value TO gt_f4value.
ENDFORM.
FORM f_show_data .
DEFINE %%fcat.
CLEAR gs_fcat.
gs_fcat-fieldname = &.
gs_fcat-scrtext_l = &.
IF & = ‘GESCH’.
gs_fcat-edit = ‘X’.
gs_fcat-f4availabl = ‘X’.
ENDIF.
APPEND gs_fcat TO gt_fcat.
END-OF-DEFINITION.
%%fcat: ‘PERNR’ ‘人员编号’,
‘NACHN’ ‘姓名’,
‘GESCH’ ‘性别’.
gs_event-name = ‘CALLER_EXIT’.
gs_event-form = ‘F_CALLER_EXIT’.
APPEND gs_event TO gt_event.
gs_glay-edt_cll_cb = ‘X’.
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
EXPORTING
i_callback_program = sy-cprog
i_callback_pf_status_set = ‘PF_STATUS_SET’
it_fieldcat_lvc = gt_fcat
it_events = gt_event
i_grid_settings = gs_glay
TABLES
t_outtab = gt_data.
ENDFORM.
FORM f_caller_exit USING e_grid TYPE slis_data_caller_exit.
gs_f4-fieldname = ‘GESCH’.
gs_f4-register = ‘X’.
- gs_f4-getbefore = ‘X’.
- gs_f4-chngeafter = ‘X’.
INSERT gs_f4 INTO TABLE gt_f4.
CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
IMPORTING
e_grid = go_grid.
CREATE OBJECT event_receiver.
SET HANDLER event_receiver->handle_f4 FOR go_grid.
CALL METHOD go_grid->register_f4_for_fields
EXPORTING
it_f4 = gt_f4[].
ENDFORM.
FORM f_f4_help USING e_fieldname TYPE lvc_fname es_row_no TYPE lvc_s_roid.
DATA: lt_ddshretval TYPE STANDARD TABLE OF ddshretval,
ls_ddshretval TYPE ddshretval.
CHECK e_fieldname = ‘GESCH’.
REFRESH lt_ddshretval.
CALL FUNCTION ‘F4IF_INT_TABLE_VALUE_REQUEST’
EXPORTING
retfield = ‘GESCH’ "
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = ‘GESCH’
value_org = ‘S’
callback_program = sy-repid
TABLES
value_tab = gt_f4value
return_tab = lt_ddshretval
EXCEPTIONS
parameter_error =
no_values_found =
OTHERS = .
IF sy-subrc = AND lt_ddshretval IS NOT INITIAL .
CLEAR ls_ddshretval.
READ TABLE lt_ddshretval INTO ls_ddshretval INDEX .
IF ls_ddshretval-fieldval IS NOT INITIAL.
CLEAR gs_data.
READ TABLE gt_data INTO gs_data INDEX es_row_no-row_id.
gs_data-gesch = ls_ddshretval-fieldval.
MODIFY gt_data FROM gs_data INDEX es_row_no-row_id
TRANSPORTING gesch.
ENDIF.
ENDIF.
ENDFORM.
FORM refresh_table_alv .
DATA: ls_stbl TYPE lvc_s_stbl.
ls_stbl-row = ‘X’."
ls_stbl-col = ‘X’.
CALL METHOD go_grid->refresh_table_display
EXPORTING
is_stable = ls_stbl.
ENDFORM.
FORM pf_status_set USING rt_extab TYPE slis_t_extab.
SET PF-STATUS ‘STATUS_ALV’.
ENDFORM.
ALV 刷新
** PERFORM FRM_REFRESH_ALV(ZCO41N) USING REF_GRID GW_LAYOUT.**
FORM frm_refresh_alv USING p_grid TYPE REF TO cl_gui_alv_grid
pw_layout TYPE lvc_s_layo.
DATA: ls_stable TYPE lvc_s_stbl.
ls_stable-row = ‘X’.
ls_stable-col = ‘X’.
CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
IMPORTING
e_grid = p_grid.
IF p_grid IS INITIAL.
EXIT.
ENDIF.
p_grid->get_frontend_layout( IMPORTING es_layout = pw_layout ).
pw_layout-cwidth_opt = ‘X’.
p_grid->set_frontend_layout( is_layout = pw_layout ).
CALL METHOD p_grid->refresh_table_display
EXPORTING
is_stable = ls_stable
EXCEPTIONS
finished = 1
OTHERS = 2.
ENDFORM.
**ALV 下拉处理 **
***Begin 下拉值的设置
GT_DDVAL TYPE LVC_T_DROP,
CLEAR GS_DDVAL.
GS_DDVAL-HANDLE = 2 .
GS_DDVAL-VALUE = ‘AOU’.
APPEND GS_DDVAL TO GT_DDVAL.
CLEAR GS_DDVAL.
GS_DDVAL-HANDLE = 2 .
GS_DDVAL-VALUE = ‘DEMO’.
APPEND GS_DDVAL TO GT_DDVAL.
CLEAR GS_DDVAL.
GS_DDVAL-HANDLE = 2 .
GS_DDVAL-VALUE = '普通 '.
APPEND GS_DDVAL TO GT_DDVAL.
CALL METHOD L_GRID->SET_DROP_DOWN_TABLE
EXPORTING
IT_DROP_DOWN = GT_DDVAL.
WA_FIELD-DRDN_ALIAS = ‘’.
WA_FIELD-DRDN_HNDL = handle_id .