ABAP 字符串转日期 函数

需求 修改开始日期  或者结束日期

把跟修改行相同物料描述的开始日期 或 结束日期都变为修改的日期

这里我们通过 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.

也可以通过另一种方法实现 字符串替换

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值