ABAP如何修改SAP交货单的各个日期:计划、拣货、运输、过账

今天遇到一个这样的问题,在根据销售订单创建交货单的时候,需求要求讲各个日期都统一写成指定日期,这个日期一般都是过去的日期,而非当天。

目标效果如下图:

虽然凭证日期是9.1日,但拣配、运输、过账日期都是8.25.

拿到需求第一反应是:还能这么玩么?

其他计划日期应该都可以指定,但如拣配、交货这种跟业务执行相关的日期是应该跟随实际动作日期而确定的,不应该是根据动作发生自动更新日期的么?

但实际发现VL01N里创建时,确实可以自由指定日期。

找了一圈,最终分两步把这事搞定了:

1. 创建交货单,用的BAPI_DELIVERYPROCESSING_EXEC此时也有相关的几个日期参数,但填了貌似也没啥用,系统依然默认当前日期。

关键字段如下:

    tbl_request-delivery_date = p_budat.

    tbl_request-transp_plan_date = p_budat.

    tbl_request-goods_issue_date = p_budat.

    tbl_request-delivery_date = p_budat.

    tbl_request-loading_date = p_budat.

    tbl_request-date = p_budat.

2. 调用BAPI_OUTB_DELIVERY_CONFIRM_DEC修改交货单,同时修改日期参数,关键code如下:

lv_timestamp_utc = |{ p_budat }{ sy-uzeit }|.

lv_delivery = <fs_alv>-sodn_vbeln. 

ls_head-deliv_numb = <fs_alv>-sodn_vbeln.

    ls_headc-deliv_numb = <fs_alv>-sodn_vbeln.

    ls_headc-post_gi_flg = 'X'.

    lt_deadlines = VALUE #( deliv_numb = <fs_alv>-sodn_vbeln ( timetype = 'WSHDRLFDAT' timestamp_utc = lv_timestamp_utc )

                                       ( timetype = 'WSHDRWADAT' timestamp_utc = lv_timestamp_utc )

                                       ( timetype = 'WSHDRWADTI' timestamp_utc = lv_timestamp_utc )

                                       ( timetype = 'WSHDRLDDAT' timestamp_utc = lv_timestamp_utc )

                                       ( timetype = 'WSHDRTDDAT' timestamp_utc = lv_timestamp_utc )

                                       ( timetype = 'WSHDRKODAT' timestamp_utc = lv_timestamp_utc )

                                                              ).

    CALL FUNCTION 'SERIAL_INTTAB_REFRESH'.

    CALL FUNCTION 'BAPI_OUTB_DELIVERY_CONFIRM_DEC'

      EXPORTING

        header_data      = ls_head

        header_control   = ls_headc

        delivery         = lv_delivery

      TABLES

        header_deadlines = lt_deadlines

        return           = lt_return.

关于header_deadlines参数的说明,可以在FM中查看文档:

In this table, the header dates are passed on in time stamp format (YYYYMMDDHHMMSS. In field BAPIDLVDEADLN-TIMETYPE the individual date fields are qualified as follows:

- WSHDRLFDAT  Delivery date

- WSHDRWADAT  Goods issue date (planned)

- WSHDRWADTI  Goods issue date (actual)

- WSHDRLDDAT  Loading date

- WSHDRTDDAT  Transportation planning date

- WSHDRKODAT  Picking date

最后看了下过账后的凭证,发现过账日期自动就会是修改后的日期,凭证日期始默认是当前日期。账务上依然统一,SAP果然强大依旧!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChampaignWolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值