ABAP ALV报告如何编辑单元格然后更新数据库?

2020-09-13 10:13发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我正在处理ALV报告。 我想用一个按钮从ALV报告单元格更新数据库表。 我添加了按钮,我可以编辑ALV单元格,但它不会更新数据库。

我该如何解决?

数据库表名称:ZDANISMAN。

以下是几段代码:

 DATA:gt_fcat类型slis_t_fieldcat_alv,
        gs_fcat slis_t_fieldcat_alv的类型行,
        gs_layout TYPE slis_layout_alv,
        gt_sort TYPE slis_t_sortinfo_alv,
        gs_sort slis_t_sortinfo_alv的类型行,
        gt_fcat_popup TYPE slis_t_fieldcat_alv,
        gt_fcat_popup_ok TYPE slis_t_fieldcat_alv,
        gs_variant TYPE变量,
        lt_rows TYPE lvc_t_row,
        w_selected_rows TYPE lvc_s_row," ALV控制行描述
        &EXEC像SY-UCOMM,
        &UPDATE像SY-UCOMM,
        lv_tabix TYPE sy-tabix,
        MY_REPID像SY-REPID。

 *表格内容。
 类型:BEGIN OF wa_baldat,
          D_ID类型ZDANISMAN-D_ID,
          D_ADI TYPE ZDANISMAN-D_ADI,
          D_MAIL类型ZDANISMAN-D_MAIL,
          box(1)c型,"复选框,ALV屏幕的变量。
        wa_baldat的结尾。

 wa_baldat的类型it_baldat类型标准表。
 DATA itab TYPE it_baldat。
 数据wa_itab类型wa_baldat。
 数据wa_danisman类型ZDANISMAN。
 数据wa_modified TYPE ZDANISMAN。
 数据i_modified ZDANISMAN的TYPE STANDARD TABLE。

 表单USER_COMMAND和r_ucomm一样SY-UCOMM
     rs_selfield TYPE slis_selfield。

 数据:带有标题行的lt_index_rows TYPE lvc_t_row,
          ref1类型参考cl_gui_alv_grid。
   数据w_selected_rows类型lvc_s_row。
   调用功能'GET_GLOBALS_FROM_SLVC_FULLSCR'导入e_grid = ref1。
   调用方法ref1-> get_selected_rows导入et_index_rows = lt_index_rows []。

 *它从复选框中选择了索引
   在lt_index_rows索引大于0且行类型为INITIAL的LOOP AT中。
     将表itab读入wa_itab索引lt_index_rows-index。
   结局。

 *将所选索引的内容输入i_modified。
  循环至lt_index_rows INTO w_selected_rows。
  读取表itab INTO wa_danisman索引w_selected_rows-index。
      如果sy-subrc EQ 0。
       将wa_danisman移动到wa_modified。
         APPEND wa_modified TO i_modified。
     万一。
   结局。

 *触发BUTTTON时,应修改数据库。
   如果R_UCOMM ='&UPDATE'。
     从表i_modified修改ZDANISMAN。
     万一。
 ENDFORM。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我正在处理ALV报告。 我想用一个按钮从ALV报告单元格更新数据库表。 我添加了按钮,我可以编辑ALV单元格,但它不会更新数据库。

我该如何解决?

数据库表名称:ZDANISMAN。

以下是几段代码:

 DATA:gt_fcat类型slis_t_fieldcat_alv,
        gs_fcat slis_t_fieldcat_alv的类型行,
        gs_layout TYPE slis_layout_alv,
        gt_sort TYPE slis_t_sortinfo_alv,
        gs_sort slis_t_sortinfo_alv的类型行,
        gt_fcat_popup TYPE slis_t_fieldcat_alv,
        gt_fcat_popup_ok TYPE slis_t_fieldcat_alv,
        gs_variant TYPE变量,
        lt_rows TYPE lvc_t_row,
        w_selected_rows TYPE lvc_s_row," ALV控制行描述
        &EXEC像SY-UCOMM,
        &UPDATE像SY-UCOMM,
        lv_tabix TYPE sy-tabix,
        MY_REPID像SY-REPID。

 *表格内容。
 类型:BEGIN OF wa_baldat,
          D_ID类型ZDANISMAN-D_ID,
          D_ADI TYPE ZDANISMAN-D_ADI,
          D_MAIL类型ZDANISMAN-D_MAIL,
          box(1)c型,"复选框,ALV屏幕的变量。
        wa_baldat的结尾。

 wa_baldat的类型it_baldat类型标准表。
 DATA itab TYPE it_baldat。
 数据wa_itab类型wa_baldat。
 数据wa_danisman类型ZDANISMAN。
 数据wa_modified TYPE ZDANISMAN。
 数据i_modified ZDANISMAN的TYPE STANDARD TABLE。

 表单USER_COMMAND和r_ucomm一样SY-UCOMM
     rs_selfield TYPE slis_selfield。

 数据:带有标题行的lt_index_rows TYPE lvc_t_row,
          ref1类型参考cl_gui_alv_grid。
   数据w_selected_rows类型lvc_s_row。
   调用功能'GET_GLOBALS_FROM_SLVC_FULLSCR'导入e_grid = ref1。
   调用方法ref1-> get_selected_rows导入et_index_rows = lt_index_rows []。

 *它从复选框中选择了索引
   在lt_index_rows索引大于0且行类型为INITIAL的LOOP AT中。
     将表itab读入wa_itab索引lt_index_rows-index。
   结局。

 *将所选索引的内容输入i_modified。
  循环至lt_index_rows INTO w_selected_rows。
  读取表itab INTO wa_danisman索引w_selected_rows-index。
      如果sy-subrc EQ 0。
       将wa_danisman移动到wa_modified。
         APPEND wa_modified TO i_modified。
     万一。
   结局。

 *触发BUTTTON时,应修改数据库。
   如果R_UCOMM ='&UPDATE'。
     从表i_modified修改ZDANISMAN。
     万一。
 ENDFORM。
付费偷看设置
发送
6条回答
悻福寶寶
1楼 · 2020-09-13 11:02.采纳回答

大家好,问题就这样解决了:

我将MANDT字段添加到内部表结构中,并且删除了UPDATE按钮,然后问题解决了。 此处代码:

亲切问候

 *内部表结构
 类型:BEGIN OF wa_baldat,
          ZDANISMAN-MANDT型MANDT,
          D_ID类型ZDANISMAN-D_ID,
          D_ADI TYPE ZDANISMAN-D_ADI,
          D_MAIL类型ZDANISMAN-D_MAIL,
          box(1)TYPE c,
        wa_baldat的结尾。

 循环至lt_index_rows INTO w_selected_rows。
     读取表itab INTO wa_danisman索引w_selected_rows-index。
      如果sy-subrc = 0。
  将wa_danisman移动到wa_modified。
  APPEND wa_modified TO i_modified。
     万一。
     从表i_modified修改ZDANISMAN。
     提交工作。
   ENDLOOP。
小熊yu生菜
2楼-- · 2020-09-13 10:43

您是否尝试过调试?

大道至简
3楼-- · 2020-09-13 10:48

提交吗?

Baoming ROSE
4楼-- · 2020-09-13 11:01

是的,表未更新

Haoba3210
5楼-- · 2020-09-13 10:55

您必须在LOOP语句之外编写MODIFY语句。 当您将所有修改后的条目收集到i_modifed中时。 (我们应该避免多次UPDATES)

Nan4612
6楼-- · 2020-09-13 10:50

我将所选索引的文本更改为其他文本。 i_modified获得新值,但数据库表未更改。

我认为数据库表字段存在问题。 所以;

D_ID必须为:'0003'

D_ADI:" OZAN"

D_MAIL:'ccc@ccc.com '

一周热门 更多>