这个其实属于table control 技术的范畴。
比如根据table control 内容的某列的值,来判断该行某列是否可编辑等等。
在表维护视图的时候也会用到。
还是以之前的视图为例。
显示数据
做过简单的demo,没有实际业务意义。
当物料 = 60008030 的时候,日期字段可编辑。
首先步骤:
根据view 找到对应的表维护 的screen,也就是对应的table control。
在loop里面,这个位置添加一个module。
添加如下代码
*&---------------------------------------------------------------------*
*& 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.
执行效果:
但是,到这里还没有结束,你如果编辑这个字段,然后点保存,发现修改的不起作用。
所以如果想保存编辑字段的值。还需要做下面的处理。
针对这个字段加一个on request module。
(因为是使用的之前的视图,把之前的自动日期赋值给注释掉)
代码:
*----------------------------------------------------------------------*
MODULE MDL_CHANGE_DATE INPUT.
FIELD-SYMBOLS TYPE ANY.
FIELD-SYMBOLS TYPE ANY.
FIELD-SYMBOLS TYPE ANY.
LOOP AT EXTRACT ASSIGNING .
"按物料做主键(表维护程序前台工厂必输)
ASSIGN COMPONENT 'MATNR' OF STRUCTURE TO .
CHECK = ZLM_V_002-MATNR.
ASSIGN COMPONENT 'DATUM' OF STRUCTURE TO .
IF SY-SUBRC = 0.
= ZLM_V_002-DATUM.
ENDIF.
ENDLOOP.
ENDMODULE.
修改日期,回车或者点保存即可。