ABAP ALV可编辑回调,一个单元格变化另一个自动跟随变化

场景:用户编辑一个单元格的值,另一个单元格随之自动改变
如:最小包装变化,打印张数自动改变。
在这里插入图片描述
第一步:声明变量
在这里插入图片描述
第二步:设置退出单元格时可编辑的回调,立即出发data changed事件
在这里插入图片描述
在这里插入图片描述
第三步:设置单元格可编辑
在这里插入图片描述
第四步:设置ALV EVENT
在这里插入图片描述
NAME必须为’DATA_CHANGED’.

第五步:写回调的函数(ALV_DATA_CHANGED 事件)

* ALV_DATA_CHANGED 事件
FORM ALV_DATA_CHANGED USING PCL_DATA TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL.
  DATA:
    LS_CELLS TYPE LVC_S_MODI.

  DATA LV_ISINTEGER TYPE CHAR20.
  DATA INTEGER TYPE CHAR20.
  DATA DECIMAL TYPE CHAR20.

  TYPES: BEGIN OF TY_MODDATA,
           ROW_ID LIKE LS_CELLS-ROW_ID,
           ZDYZS  LIKE GS_DATA-ZDYZS,
         END OF TY_MODDATA.
  DATA LW_MODATA TYPE TY_MODDATA.
  DATA LT_MODATA LIKE TABLE OF LW_MODATA.

  "Get ALV grid
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = GR_GRID.


  CLEAR GS_DATA.
  "循环改变的可编辑列
  LOOP AT PCL_DATA->MT_MOD_CELLS INTO LS_CELLS.

    "如果改变的最小包装列
    IF LS_CELLS-FIELDNAME = 'ZZXBZ'.
      READ TABLE GT_DATA INDEX LS_CELLS-ROW_ID INTO GS_DATA.

      "计算要打印张数的值
      IF GS_DATA-SHKZG = 'S'.
        "判断数量是否是小数
        LV_ISINTEGER = GS_DATA-MENGE.
        SPLIT LV_ISINTEGER AT '.' INTO INTEGER DECIMAL.
        IF DECIMAL > 0. "小数
          "打印张数向上取整
          GS_DATA-ZDYZS = CEIL( GS_DATA-MENGE / LS_CELLS-VALUE ).
        ELSE.
          GS_DATA-ZDYZS = GS_DATA-MENGE / LS_CELLS-VALUE.
        ENDIF.
      ELSEIF GS_DATA-SHKZG = 'H'.
        GS_DATA-ZDYZS = GS_DATA-MENGE / LS_CELLS-VALUE.
        "判断打印张数是否是小数
        LV_ISINTEGER = GS_DATA-ZDYZS.
        SPLIT LV_ISINTEGER AT '.' INTO INTEGER DECIMAL.
        IF DECIMAL = 0.
          "整数
          GS_DATA-ZDYZS = 0.
        ELSE.
          GS_DATA-ZDYZS = 1.
        ENDIF.
      ENDIF.
      "修改内表
      MOVE LS_CELLS-ROW_ID TO LW_MODATA-ROW_ID.
      MOVE GS_DATA-ZDYZS   TO LW_MODATA-ZDYZS.
      APPEND LW_MODATA TO LT_MODATA.
      CLEAR LW_MODATA.
    ENDIF.

  ENDLOOP.
  "修改列数据
  LOOP AT LT_MODATA INTO LW_MODATA.
    PCL_DATA->MODIFY_CELL(
     EXPORTING
       I_ROW_ID    = LW_MODATA-ROW_ID          " Row ID
*      I_TABIX     =                          " Row Index
       I_FIELDNAME = 'ZDYZS'                  " Field Name
       I_VALUE     = LW_MODATA-ZDYZS            " Value
   ).
  ENDLOOP.


  "Refresh ALV
  PERFORM F_REFRESH_ALV.

ENDFORM.

第六步:调用alv
在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ALV单元格动态可编辑ABAP技术在ALV报表上的一个重要扩展。ALVABAP List Viewer)是SAP系统中常用的报表显示工具,可以方便地展示和处理大量的数据。但是在默认情况下,ALV报表的单元格是不可编辑的,用户只能查看报表数据而无法进行修改。 为了满足用户对报表数据进行动态修改的需求,开发人员通过对ALV控件进行扩展,使其支持单元格的动态可编辑功能。这样用户可以直接在报表上进行数据编辑,无需打开数据源进行修改。 实现ALV单元格动态可编辑的扩展需要进行如下步骤: 1. 定义ALV报表的显示结构。 首先,需要定义ALV报表的显示结构,包括字段名、字段类型、长度等信息。 2. 扩展ALV函数模块。 在ALV函数模块中,需要添加相应的功能模块来支持单元格的动态可编辑。通过修改ALV函数模块的代码,实现对报表数据的修改和保存。 3. 增加用户交互接口。 为了方便用户进行数据修改,可以在报表上添加一些用户交互接口,比如勾选框、输入框等。用户可以通过这些接口直接修改报表数据,并进行保存操作。 4. 编写逻辑处理程序。 最后,需要编写逻辑处理程序,处理用户的修改操作。这个程序会根据用户输入的数据,更新相应的报表数据,并将修改后的数据保存回数据库中。 通过以上步骤的扩展,用户可以实现在ALV报表中直接进行数据编辑的功能。这样,用户可以更加方便地进行数据修改和保存,提高工作效率。同时,ALV单元格动态可编辑的扩展也为定制化的报表需求提供了更多的灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值