需求 修改开始日期 或者结束日期
把跟修改行相同物料描述的开始日期 或 结束日期都变为修改的日期
这里我们通过 data_changed 实现、
data_changed 中 VALUE 就是变化的值
因为 VALUE 是CHAR128 的 所以 我们直接赋值给日期类型值会截取 只能赋值到月 日因为位数不够会被截取
这时我们就要用到日期的转换函数 CONVERT_DATE_TO_INTERNAL
实现代码:
FORM data_changed USING pel_data TYPE REF TO cl_alv_changed_data_protocol.
DATA ls_stable TYPE lvc_s_stbl.
DATA: ls_layout TYPE lvc_s_layo.
DATA: lv_datum TYPE sy-datum.
ls_stable-row = '1'.
ls_stable-col = '1'.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = alv_grid.
** 获取行数
READ TABLE pel_data->mt_good_cells INTO DATA(ls_cells) INDEX 1.
** 获取ALV输入新值
READ TABLE pel_data->mt_mod_cells INTO DATA(ls_value) INDEX 1.
IF ls_cells-fieldname = 'PSTTR' ." 开始日期
IF ls_cells-value IS NOT INITIAL.
CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
EXPORTING
date_external = ls_cells-value
IMPORTING
date_internal = lv_datum
EXCEPTIONS
date_external_is_invalid = 1
OTHERS = 2.
CLEAR gs_alv.
READ TABLE gt_alv INTO gs_alv INDEX ls_cells-row_id.
* 将所有相同 一般可配置物料都赋值相同的日期
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_alv>) WHERE satnr = gs_alv-satnr.
<fs_alv>-psttr = lv_datum.
ENDLOOP.
* 刷新 ALV
CALL METHOD alv_grid->refresh_table_display
EXPORTING
is_stable = ls_stable
i_soft_refresh = 'X'.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
ELSEIF ls_cells-fieldname = 'PEDTR'. " 结束日期
IF ls_cells-value IS NOT INITIAL.
CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
EXPORTING
date_external = ls_cells-value
IMPORTING
date_internal = lv_datum
EXCEPTIONS
date_external_is_invalid = 1
OTHERS = 2.
CLEAR gs_alv.
READ TABLE gt_alv INTO gs_alv INDEX ls_cells-row_id.
* 将所有相同 一般可配置物料都赋值相同的日期
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_alv1>) WHERE satnr = gs_alv-satnr.
<fs_alv1>-pedtr = lv_datum.
ENDLOOP.
* 刷新 ALV
CALL METHOD alv_grid->refresh_table_display
EXPORTING
is_stable = ls_stable
i_soft_refresh = 'X'.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
也可以通过另一种方法实现 字符串替换