BAPI_SALESORDER_CHANGE修改SO数量错误记录

原本MM模块,碰到SD用户要求弄个程式批量修改订单的数量,那咱就搞一搞。不管做运维还是实施,偶尔还是要写写ABAP的。

准备用BDC的,本人不喜欢录屏这波操作,准备直接修改内表,怕影响因素较多,于是从网上查询了很多资料,函数BAPI_SALESORDER_CHANGE可以修改销售订单,这个函数可以做到,于是开干!

DATA: SALESDOCUMENT    LIKE  BAPIVBELN-VBELN,
      ORDER_HEADER_IN  LIKE  BAPISDH1,
      ORDER_HEADER_INX LIKE  BAPISDH1X,
      ORDER_ITEM_IN    LIKE  BAPISDITM  OCCURS 0 WITH HEADER LINE,
      ORDER_ITEM_INX   LIKE  BAPISDITMX OCCURS 0 WITH HEADER LINE,
      RETURN1          LIKE  BAPIRET2  OCCURS 0 WITH HEADER LINE,
      SCHEDULE_LINES   LIKE  BAPISCHDL  OCCURS 0 WITH HEADER LINE,
      SCHEDULE_LINESX  LIKE  BAPISCHDLX OCCURS 0 WITH HEADER LINE.


    ORDER_HEADER_INX-UPDATEFLAG = 'U'.
    ORDER_ITEM_IN-ITM_NUMBER     =  POSNR . "行项目
    APPEND ORDER_ITEM_IN.
    ORDER_ITEM_INX-ITM_NUMBER     = POSNR ."行项目
    ORDER_ITEM_INX-UPDATEFLAG     =  'U'.
    APPEND ORDER_ITEM_INX.

    SCHEDULE_LINES-ITM_NUMBER =  POSNR ."行项目
    SCHEDULE_LINES-SCHED_LINE = '0001'."计划行
    SCHEDULE_LINES-REQ_QTY    =  KWMENG."数量
    APPEND SCHEDULE_LINES.

    SCHEDULE_LINESX-ITM_NUMBER = POSNR ."行项目
    SCHEDULE_LINESX-SCHED_LINE = '0001'."计划行
    SCHEDULE_LINESX-UPDATEFLAG = 'U'.
    SCHEDULE_LINESX-REQ_QTY    = 'X'.
    APPEND SCHEDULE_LINESX.

    CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
      EXPORTING
        SALESDOCUMENT    = VBELN  "销售订单号
        ORDER_HEADER_INX = ORDER_HEADER_INX
      TABLES
        RETURN           = RETURN1
        ORDER_ITEM_IN    = ORDER_ITEM_IN
        ORDER_ITEM_INX   = ORDER_ITEM_INX
        SCHEDULE_LINES   = SCHEDULE_LINES
        SCHEDULE_LINESX  = SCHEDULE_LINESX.
    READ TABLE RETURN1 WITH KEY TYPE = 'E'.
    IF SY-SUBRC <> '0'.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' "提交更改
        EXPORTING
          WAIT = 'X'.
      WRITE:   VBELN, POSNR,'修改成功!'.
      WRITE : /.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      WRITE:   VBELN, POSNR,'修改失败!'.
      WRITE : /.
    ENDIF.

这样就实现了订单的单个行项的修改。因为需要多笔修改,通过excel上传的方式(excel上传方式很多,就不写了),但是订单、行项、数量这几个栏位必须有。

 批量执行的时候,出现这种错误,但是前面的两行20,40,又是成功的。

通过调式发现,如果是批量修改又是不同订单的,每次执行完后,需要清空上一次BAPI_SALESORDER_CHANGE中的内表数据。

    CLEAR ORDER_ITEM_IN[] .
    CLEAR ORDER_ITEM_INX[].
    CLEAR SCHEDULE_LINES[].
    CLEAR SCHEDULE_LINESX[]  .
    CLEAR SALESDOCUMENT .

这样就可以了,测试完美通过!

注意:销售订单和行项前导位记得补‘0’,代码里POSNR  KWMENG VBELN,自己替换。如果是通过执行上传后多笔修改,可以循环执行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值