这个其实属于table control 技术的范畴。

比如根据table control 内容的某列的值,来判断该行某列是否可编辑等等。

在表维护视图的时候也会用到。


还是以之前的视图为例。

表维护视图DEMO(4):单元格级别编辑_赋值

显示数据

表维护视图DEMO(4):单元格级别编辑_赋值_02


做过简单的demo,没有实际业务意义。


当物料 = 60008030 的时候,日期字段可编辑。


首先步骤:

根据view 找到对应的表维护 的screen,也就是对应的table control。

表维护视图DEMO(4):单元格级别编辑_字段_03


在loop里面,这个位置添加一个module。

表维护视图DEMO(4):单元格级别编辑_赋值_04


添加如下代码

*&---------------------------------------------------------------------*
*& Module MDL_CONTRL_INPUT OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE MDL_CONTRL_INPUT OUTPUT.

DATA:LV_MATRN TYPE MATNR.
LV_MATRN = ZLM_V_002-MATNR .

SHIFT LV_MATRN LEFT DELETING LEADING '0'.

IF LV_MATRN = '60008030'.

LOOP AT SCREEN.
IF SCREEN-NAME = 'ZLM_V_002-DATUM'.
SCREEN-INPUT = 1. "可输入状态
MODIFY SCREEN.
ENDIF.
ENDLOOP.

ENDIF.
ENDMODULE.

执行效果:


表维护视图DEMO(4):单元格级别编辑_字段_05

但是,到这里还没有结束,你如果编辑这个字段,然后点保存,发现修改的不起作用。

所以如果想保存编辑字段的值。还需要做下面的处理。

针对这个字段加一个on request module。

表维护视图DEMO(4):单元格级别编辑_可编辑_06

(因为是使用的之前的视图,把之前的自动日期赋值给注释掉)


代码:

表维护视图DEMO(4):单元格级别编辑_可编辑_07

*----------------------------------------------------------------------*
MODULE MDL_CHANGE_DATE INPUT.

FIELD-SYMBOLS <LFS_LINE> TYPE ANY.
FIELD-SYMBOLS <LFS_FIELD> TYPE ANY.
FIELD-SYMBOLS <LFS_KEY> TYPE ANY.

LOOP AT EXTRACT ASSIGNING <LFS_LINE>.

"按物料做主键(表维护程序前台工厂必输)
ASSIGN COMPONENT 'MATNR' OF STRUCTURE <LFS_LINE> TO <LFS_KEY>.
CHECK <LFS_KEY> = ZLM_V_002-MATNR.

ASSIGN COMPONENT 'DATUM' OF STRUCTURE <LFS_LINE> TO <LFS_FIELD>.
IF SY-SUBRC = 0.
<LFS_FIELD> = ZLM_V_002-DATUM.
ENDIF.

ENDLOOP.


ENDMODULE.


修改日期,回车或者点保存即可。

表维护视图DEMO(4):单元格级别编辑_可编辑_08



—END—

表维护视图DEMO(4):单元格级别编辑_赋值_09