前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ABAP 之ALV列编辑及单元格可编辑的使用方式

ABAP 之ALV列编辑及单元格可编辑的使用方式

作者头像
百里丶落云
发布2022-12-05 08:39:46
4K0
发布2022-12-05 08:39:46
举报
文章被收录于专栏:享~方法

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情

HELLO,这里是百里,一个开发中的ABAPER,在我们开发中的会经常遇到ALV展示中的数据需要编辑,经过百里研究发现目前总共有两种ALV可编辑的方式,这里分享给大家.

在ALV展示内容时,分为直接查看,用户事件,跳转,光标事件等等,其中编辑ALV数据是经常使用的动作. 这里简单介绍两种ALV可编辑的方式.

ALV 列编辑

在传统ALV中 只需要配置 wa_fieldcat-edit = 'X' ,即可使对应列进行编辑. 注意使用时要配置,对应的STATUS,USERCOMED,否则双击时会出现报错的情况 .

实例

定义数据变量

代码语言:javascript
复制
TYPES : BEGIN OF ty_Data ,  
  doccode  TYPE char20  ,  
  zrwoid  TYPE char20 ,  
  matcode TYPE char20 ,  
  matname TYPE char20 ,  
  uom TYPE char20,  
  memo TYPE char20 ,  

  
  END OF ty_Data .
  data : gs_Data TYPE ty_Data .  
data : gt_Data TYPE TABLE of ty_Data .

定义ALV变量内容

代码语言:javascript
复制
" alv 通用变量  
  DATA: wa_layout   TYPE lvc_s_layo.  
DATA:wa_fieldcat TYPE lvc_s_fcat,  
gt_fieldcat TYPE lvc_t_fcat.

获取数据

代码语言:javascript
复制
select *  from ZWDEMOTABLE1 into CORRESPONDING FIELDS OF TABLE gt_Data .

定义ALV相关变量及调用ALV函数

代码语言:javascript
复制
FORM diaplay_data .  
  
   PERFORM set_alv_layout.  
  PERFORM bulid_fieldcat.  
  PERFORM call_alv_func.  
  
ENDFORM.
FORM set_alv_layout .  
  CLEAR: wa_layout.  
  wa_layout-zebra      = 'X'.      "斑马线  
  wa_layout-cwidth_opt = 'X'.      "自动列宽  
  wa_layout-stylefname   = 'CELTAB'.  
  
ENDFORM.  
  
  
FORM bulid_fieldcat .  
DEFINE add_col.  
  
*    ADD 1 TO pos.  
*    lw_fieldcat-col_pos = pos.  
    wa_fieldcat-fieldname = &1.  
    wa_fieldcat-ref_field = &2.  
    wa_fieldcat-ref_table = &3.  
    wa_fieldcat-scrtext_l = &4.  
    wa_fieldcat-outputlen = &5.  
    wa_fieldcat-no_zero = &6.  
    wa_fieldcat-edit = &7.  
    wa_fieldcat-edit_mask = &8.  
    wa_fieldcat-key = &9.  
  
  
   CASE  wa_fieldcat-fieldname.  
  
     WHEN 'MATCODE' OR 'MATNAME' .  
       wa_fieldcat-edit = 'X' .  
"      WHEN 'slbox'.  
" wa_fieldcat-checkbox = 'X' .  
" wa_fieldcat-edit = 'X' .  
"  wa_fieldcat-edit_mask = 'X'.  
"   WHEN 'VBELN' .  
" wa_fieldcat-HOTSPOT = 'X' .  
" WHEN 'KBETR'.  
"   wa_fieldcat-decimals_o = 2 .  
"   WHEN 'FKIMG' .  
"     wa_fieldcat-decimals_o = 0 .  
  
  
      WHEN OTHERS.  
ENDCASE .  
  
    APPEND wa_fieldcat TO gt_fieldcat.  
  
  CLEAR : wa_fieldcat.  
  END-OF-DEFINITION.  
  REFRESH: gt_fieldcat.  
  
  
  " add_col 'slbox'     space space '选项'           space space space space space.  
  add_col 'DOCCODE'     space space '单号'           space space space space space.  
  add_col 'ZROWID'     space space 'rowid'           space space space space space.  
  add_col 'MATCODE'     space space '料号'           space space space space space.  
  add_col 'MATNAME'     space space '料名'           space space space space space.  
  add_col 'UOM'     space space '单位'           space space space space space.  
  add_col 'MEMO'     space space '备注'           space space space space space.  
  
  
ENDFORM.
FORM call_alv_func .  
DATA :gt_event TYPE slis_t_event,  
        gs_event TYPE slis_alv_event.  
  
  
  
 " MOVE 'DATA_CHANGED'     TO gs_event-name.  
 " MOVE 'ALV_DATA_CHANGED' TO gs_event-form.  
  APPEND gs_event TO gt_event.  
  
  gs_grid-edt_cll_cb = abap_true.     " 选中复选款,立刻触发data changed 事件  
  
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'  
    EXPORTING  
      i_callback_program       = sy-repid           "回调程序  
      i_callback_pf_status_set = 'SET_PF_STATUS'  
      i_callback_user_command  = 'USER_COMMAND'  
      i_grid_settings          = gs_grid  
      is_layout_lvc            = wa_layout  
      it_fieldcat_lvc          = gt_fieldcat        "需要显示的内表的列  
      i_save                   = 'A'  
      it_events                = gt_event  
    TABLES  
      t_outtab                 = gt_DAta         "需要显示的数据  
    EXCEPTIONS  
      program_error            = 1  
      OTHERS                   = 2.  
  IF sy-subrc <> 0.  
  ENDIF.  
ENDFORM.

结果展示

image.png
image.png

如图,料号,及料名两列就可以进行编辑了,注意一定要配置usercomed 及staus 否则双击修改时就会报错. 而且要清除对应的工作区内容. 对应修改内容修改为展示的alv_Data 数据. 可以通过逻辑判断进行,给

CASE  wa_fieldcat-fieldname. WHEN 'MATCODE' OR 'MATNAME' .  wa_fieldcat-edit = 'X' . ENDCASE 赋值, 其中edit = 'X' 就使得对应列可编辑.

ALV 单元格编辑

在工作应用中,会遇到当达到某种条件时,某个单元格可以编辑或者某个单元格不可以编辑.此时会跟单元格颜色一样.针对某个格子进行逻辑判断或者赋值.这里详细讲下,如何进行单元格编辑 .

语法

代码语言:javascript
复制
*首先 在对应展示的数据内表中增加字段
TYPES : BEGIN OF ty_Data ,  
  doccode  TYPE char20  ,  
  zrwoid  TYPE char20 ,  
  matcode TYPE char20 ,  
  matname TYPE char20 ,  
  uom TYPE char20,  
  memo TYPE char20 ,  
  
  celtab     TYPE  lvc_t_styl,  "控制字段可编辑的参数  
  
  END OF ty_Data .
  
* 第二步 定义结构中表结构
DATA:gwa_edit TYPE lvc_s_styl,  
     git_edit TYPE lvc_t_styl.

* 第三步 , 需要可以编辑的单元格进行逻辑判断
if 条件.
清空工作区
gwa_edit-fieldname = '列字段'.  
  gwa_edit-style = cl_gui_alv_grid=>mc_style_enabled."设置为可编辑
  ELSe.  
         CLEAR: gwa_edit.  
    gwa_edit-fieldname = '列字段'.  
  gwa_edit-style = cl_gui_alv_grid=>mc_style_disabled."设置为不可编辑
endif .

实例

代码语言:javascript
复制
................
LOOP AT gt_Data INTO gs_Data .  
  
    IF  gs_Data-UOM = '双'.  
      CLEAR: gwa_edit.  
    gwa_edit-fieldname = 'UOM'.  
  gwa_edit-style = cl_gui_alv_grid=>mc_style_enabled."设置为可编辑  
 ELSe.  
         CLEAR: gwa_edit.  
    gwa_edit-fieldname = 'UOM'.  
  gwa_edit-style = cl_gui_alv_grid=>mc_style_disabled."设置为不可编辑  
    ENDIF.  
  

  
  APPEND  gwa_edit TO GS_data-celtab .  
  
  
    MODIFY gt_Data  FROM  gs_Data .  
  
  ENDLOOP.

......................

结果展示

image.png
image.png

技术总结

在工作中ALV数据内容编辑是经常使用的一种方式,此时就需要我们能够熟练使用对应的技术.此篇文章中介绍了两种必会的alv可编辑案例.希望能够帮助大家.

立身以学为先,立学以读书为本. 今天的不开心,就到此为止吧 ,好好读书好好学习.

small132857Uifjt1648445337.jpg
small132857Uifjt1648445337.jpg
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ALV 列编辑
    • 实例
    • ALV 单元格编辑
      • 语法
        • 实例
        • 技术总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档