SAP ALV选中数据单元格可编辑

需求:执行仅查看,选中数据行点击编辑,权限校验通过后可对部分数据进行编辑,一行数据无法被多个用户同时编辑(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.
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值