我会修改这一行的数据
DATA GT_EVENTS TYPE SLIS_T_EVENT.
DATA GS_EVENTS LIKE LINE OF GT_EVENTS."首先声明事件类型的内表
"数据更改事件加入事件内表
GS_EVENTS-NAME = GS_EVENTS-FORM = 'DATA_CHANGED'.
APPEND GS_EVENTS TO GT_EVENTS.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
I_CALLBACK_PF_STATUS_SET = 'USER_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_LAYOUT_LVC = GS_LAYO
IT_FIELDCAT_LVC = GT_FIEL
IT_EVENTS = GT_EVENTS "放在ALV的事件对应的位置
TABLES
T_OUTTAB = GT_ZTPP014
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
"数据更改事件的函数
FORM DATA_CHANGED USING pcl_data TYPE REF TO cl_alv_changed_data_protocol.
DATA CDAT TYPE C LENGTH 10.
DATA(lt_mod_cell) = pcl_data->mt_mod_cells .
CLEAR GT_AD.
LOOP AT GT_ZTPP014 INTO GS_ZTPP014 WHERE ZWCBJ = ''."按牌号汇总冲销数量,未完成的
MOVE-CORRESPONDING GS_ZTPP014 TO GS_AD.
COLLECT GS_AD INTO GT_AD."汇总
ENDLOOP.
LOOP AT lt_mod_cell INTO DATA(ls_mod_cell).
CASE ls_mod_cell-fieldname."判断修改的字段名
WHEN 'ZDDATE'.
READ TABLE GT_ZTPP014A INTO GS_ZTPP014 INDEX ls_mod_cell-ROW_ID.
IF SY-SUBRC = 0.
READ TABLE GT_AD INTO GS_AD WITH KEY ZNKPH = GS_ZTPP014-ZNKPH.
IF SY-SUBRC = 0.
IF GS_AD-ZCXSL <> 0.
CDAT = ls_mod_cell-VALUE.
"将某些符号用另一些替代``这个代表没有空格 若使用''会有空格出现。
REPLACE '-' INTO CDAT WITH ``.
REPLACE '.' INTO CDAT WITH ``.
REPLACE '/' INTO CDAT WITH ``.
IF GS_ZTPP014-ZDDATE+0(6) <> CDAT+0(6).
MESSAGE '预测编号' && GS_ZTPP014-ZBDZEI && '行号' && GS_ZTPP014-ZITEM && '预测已冲销,需求日期只能在当月内更改' TYPE 'E'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDCASE.
ENDLOOP.
ENDFORM.