需求:执行仅查看,选中数据行点击编辑,权限校验通过后可对部分数据进行编辑,一行数据无法被多个用户同时编辑(SE11 创建锁对象),点击保存将数据保存至底表同时这几行数据切换为不可编辑状态
- TYPES alv定义
*&---------------------------------------------------------------------*
* DEFIEN TYPES
*&---------------------------------------------------------------------*
TYPES: BEGIN OF gty_alv,
sel TYPE char1,
ct_style TYPE lvc_t_styl,
END OF gty_alv.
设置ALV样式 先将单元格都设为可编辑
*&---------------------------------------------------------------------*
*& FORM frm_set_layout
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_layout .
* " 设置LAYOUT
gs_layout-zebra = 'X'.
gs_layout-no_rowins = 'X'.
gs_layout-cwidth_opt = 'X'.
gs_layout-sel_mode = 'D'.
gs_layout-box_fname = 'SEL'.
gs_layout-edit = 'X'.
* 设置列是否可编辑
gs_layout-stylefname = 'CT_STYLE'.
ENDFORM.
定义ALV列
ls_fieldcat-drdn_hndl = &7.
ls_fieldcat-drdn_field = &9.
参照表 字段写上后,若表中已经设所搜帮助,则该字段可编辑时也有搜索帮助
*&---------------------------------------------------------------------*
*& form frm_set_fieldcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_set_fieldcat.
* 定义DATA
DATA: ls_fieldcat LIKE LINE OF gt_fieldcat.
DATA: lv_col_pos TYPE i.
CLEAR: gt_fieldcat.
DEFINE buildfieldcat.
CLEAR ls_fieldcat.
lv_col_pos = lv_col_pos + 1.
ls_fieldcat-col_pos = lv_col_pos.
ls_fieldcat-fieldname = &1.
ls_fieldcat-coltext = &2.
ls_fieldcat-scrtext_s = &2.
ls_fieldcat-scrtext_m = &2.
ls_fieldcat-scrtext_l = &2.
* ls_fieldcat-icon = &3.
ls_fieldcat-ref_table = &3.
ls_fieldcat-ref_field = &4.
ls_fieldcat-just = &5.
ls_fieldcat-no_zero = &6.
* ls_fieldcat-edit = &7.
ls_fieldcat-drdn_hndl = &7.
ls_fieldcat-f4availabl = &8.
ls_fieldcat-drdn_field = &9.
APPEND ls_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
* 设置alv列
buildfieldcat 'ZEORD' TEXT-t01 'EORD' 'ZEORD' '' '' '' '' ''.
buildfieldcat 'MATNR' TEXT-t02 'EORD' 'MATNR' '' 'X' '' '' ''.
buildfieldcat 'MAKTX' TEXT-t11 'MAKT' 'MAKTX' '' '' '' '' ''.
buildfieldcat 'WERKS' TEXT-t03 'EORD' 'WERKS' '' '' '' '' ''.
buildfieldcat 'VDATU' TEXT-t04 'EORD' 'VDATU' '' '' '' 'X' ''.
buildfieldcat 'BDATU' TEXT-t05 'EORD' 'BDATU' '' '' '' 'X' ''.
buildfieldcat 'LIFNR' TEXT-t06 'EORD' 'LIFNR' '' 'X' '' 'X' ''.
buildfieldcat 'BPKIND' TEXT-t12 'EORD' 'BPKIND' '' '' '' '' ''.
buildfieldcat 'TEXT40' TEXT-t13 'TB004' 'TEXT40' '' '' '' '' ''.
buildfieldcat 'ZTERM' TEXT-t14 'EORD' 'ZTERM' '' '' '' '' ''.
buildfieldcat 'VTEXT' TEXT-t15 'TVZBT' 'VTEXT' '' '' '' '' ''.
buildfieldcat 'EKORG' TEXT-t07 'EORD' 'EKORG' '' '' '' 'X' ''.
buildfieldcat 'EKOTX' TEXT-t18 'T024E' 'EKOTX' '' '' '' '' ''.
buildfieldcat 'RESWK' TEXT-t19 'EORD' 'RESWK' '' '' '' 'X' ''.
buildfieldcat 'EKGRP' TEXT-t16 'EORD' 'EKGRP' '' '' '' '' ''.
buildfieldcat 'EKNAM' TEXT-t17 'T024' 'EKNAM' '' '' '' '' ''.
buildfieldcat 'ERNAM' TEXT-t08 'EORD' 'ERNAM' '' '' '' '' ''.
buildfieldcat 'FLIFN' TEXT-t20 'EORD' 'FLIFN' '' '' '' '' ''.
buildfieldcat 'AUTET' TEXT-t21 'EORD' 'AUTET' '' '' '' '' ''.
buildfieldcat 'NOTKZ' TEXT-t09 'EORD' 'NOTKZ' '' '' '' '' ''.
buildfieldcat 'ZTEXT1' TEXT-t10 'EORD' 'ZTEXT1' '' '' '1' '' ''.
ENDFORM.
对每行数据进行设置 u_data为选中数据 u_flg = 'X'为不可编辑
*&---------------------------------------------------------------------*
*& FORM frm_editables
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_editables USING ut_data TYPE STANDARD TABLE
uv_flg TYPE char1.
* 定义DATA
DATA: ls_style TYPE lvc_s_styl,
lt_style TYPE lvc_t_styl,
lv_index TYPE i.
DATA:ls_data TYPE gty_alv.
* 设置alv是否可编辑
LOOP AT ut_data INTO ls_data.
CLEAR:ls_data-ct_style.
lv_index = sy-tabix.
* 编号
ls_style-fieldname = 'ZEORD'.
ls_style-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_style INTO TABLE lt_style.
* 当uv_flg = '' 时以下单元格可编辑
IF uv_flg IS NOT INITIAL.
* 有效期自
ls_style-fieldname = 'VDATU'.
ls_style-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_style INTO TABLE lt_style.
* 货源管理类型
ls_style-fieldname = 'ZTEXT1'.
ls_style-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_style INTO TABLE lt_style.
ENDIF.
* 更新gt_data
INSERT LINES OF lt_style INTO TABLE ls_data-ct_style.
MODIFY TABLE gt_data FROM ls_data .
ENDLOOP.
ENDFORM.