SAP ABAP 销售订单更新

该代码段涉及在SAP环境中处理销售订单,包括检查输入的订单号和行项目,更新ZTSD006表,使用BAPI_SALESORDER_CHANGE函数改变销售订单状态,并进行事务处理的回滚或提交。同时,它还处理错误返回并提供响应信息。
摘要由CSDN通过智能技术生成

METHOD zii_si_sdi010_s4_ib_syn~si_sdi010_s4_ib_syn.
*** **** INSERT IMPLEMENTATION HERE **** ***
DATA: ls_item_req_header TYPE zdt_sdi010_s4_req_head.
DATA: lt_item_req_item TYPE zdt_sdi010_s4_req_item_tab,
ls_item_req_item LIKE LINE OF lt_item_req_item.

DATA: order_header_in      TYPE bapisdh1.         "通讯字段: 销售和分销凭证抬头
DATA: order_header_inx     TYPE bapisdh1x.        "销售和分销凭证抬头的复选框字段
DATA: it_return            TYPE TABLE OF bapiret2.
DATA: is_return            TYPE bapiret2.
DATA: it_items             TYPE TABLE OF bapisditm. "通讯字段: 销售和分销凭证项目
DATA: is_items             TYPE bapisditm.
DATA: it_itemsx            TYPE TABLE OF bapisditmx.     "通讯字段: 销售和分销凭证项目
DATA: is_itemsx            TYPE bapisditmx.
DATA  lt_bapiparex TYPE TABLE OF bapiparex.
DATA: is_bapiparex TYPE bapiparex.
DATA  ls_zbape_vbap  TYPE bape_vbap.
DATA  ls_zbape_vbapx TYPE bape_vbapx.
DATA: lt_06 TYPE TABLE OF ztsd006.
DATA: is_06 TYPE ztsd006.
DATA: lv_xh TYPE ztsd006-xh.
DATA: lv_xhitem TYPE ztsd006-xhitem.
DATA: lv_vbeln TYPE vbak-vbeln.

IF input-mt_sdi010_s4_req-head-vbeln = ''.
  output-mt_sdi010_s4_res-type = 'E'.
  output-mt_sdi010_s4_res-mess = '销售订单号必填!'.
  EXIT.
ENDIF.

ls_item_req_header = input-mt_sdi010_s4_req-head.
lt_item_req_item = input-mt_sdi010_s4_req-item.

IF lt_item_req_item IS INITIAL.
  output-mt_sdi010_s4_res-type = 'E'.
  output-mt_sdi010_s4_res-mess = '订单行不能为空'.
  EXIT.
ENDIF.

lv_vbeln = |{ ls_item_req_header-vbeln ALPHA = IN }|.

SELECT MAX( xh ) INTO lv_xh FROM ztsd006.
ADD 1 TO lv_xh.

LOOP AT lt_item_req_item INTO ls_item_req_item.
  ADD 1 TO lv_xhitem.
  CLEAR is_06.
  is_06-xh = lv_xh.
  is_06-xhitem = lv_xhitem.
  is_06-zdate = sy-datum.
  is_06-ztime = sy-uzeit.
  is_06-cgsqd = ls_item_req_header-cgsqd.
  is_06-zname = ls_item_req_header-zname.
  is_06-vbeln = ls_item_req_header-vbeln.
  is_06-posnr = ls_item_req_item-posnr.
  is_06-matnr = ls_item_req_item-matnr.
  is_06-abgru = ls_item_req_item-abgru.
  is_06-zprono = ls_item_req_item-zprono.
  is_06-zwaprd = ls_item_req_item-zwaprd.
  APPEND is_06 TO lt_06.
ENDLOOP.

MODIFY ztsd006 FROM TABLE lt_06.
COMMIT WORK.

order_header_inx-updateflag   = 'U'.

LOOP AT lt_06 INTO is_06.
  CLEAR:is_items,is_itemsx,ls_zbape_vbap,ls_zbape_vbapx.

  is_items-itm_number = |{ is_06-posnr ALPHA = IN }|.
  is_items-reason_rej = is_06-abgru.

  is_itemsx-itm_number = is_items-itm_number.
  is_itemsx-reason_rej = 'X'.
  is_itemsx-updateflag = 'U'.

  IF is_06-matnr IS NOT INITIAL.
    is_items-material = is_06-matnr.
    is_itemsx-material = 'X'.
  ENDIF.
  •  SELECT SINGLE pstyv INTO @DATA(lv_pstyv) FROM vbap WHERE vbeln EQ @lv_vbeln.
    
  •  is_items-item_categ = lv_pstyv.
    
  •  is_itemsx-item_categ = 'X'.
    APPEND is_items TO it_items.
    APPEND is_itemsx TO it_itemsx.
    
    " 增强字段
    CLEAR: ls_zbape_vbap, ls_zbape_vbapx.
    ls_zbape_vbap = VALUE #(
                             posnr    = is_items-itm_number
                             zprono   = is_06-zprono
                             zwaprd   = is_06-zwaprd
                              ).
    ls_zbape_vbapx = VALUE #(
                             posnr    = is_items-itm_number
                             zprono   = 'X'
                             zwaprd   = 'X'
                               ).
    
    CLEAR:is_bapiparex.
    is_bapiparex-structure = 'BAPE_VBAP'.
    is_bapiparex+30(960)   = ls_zbape_vbap.
    APPEND is_bapiparex TO lt_bapiparex.
    
    CLEAR:is_bapiparex.
    is_bapiparex-structure = 'BAPE_VBAPX'.
    is_bapiparex+30(960)   = ls_zbape_vbapx.
    APPEND is_bapiparex TO lt_bapiparex.
    

    ENDLOOP.

    CALL FUNCTION ‘BAPI_SALESORDER_CHANGE’
    EXPORTING
    salesdocument = lv_vbeln
    order_header_inx = order_header_inx
    TABLES
    return = it_return
    order_item_in = it_items
    order_item_inx = it_itemsx
    extensionin = lt_bapiparex.

    READ TABLE it_return INTO is_return WITH KEY type = ‘E’.
    IF sy-subrc = 0.
    CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.

    output-mt_sdi010_s4_res-type = 'E'.
    
    LOOP AT it_return INTO is_return WHERE type = 'E'.
      output-mt_sdi010_s4_res-mess = output-mt_sdi010_s4_res-mess && '/' && is_return-message.
    ENDLOOP.
    

    ELSE.
    CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
    EXPORTING
    wait = ‘X’.
    output-mt_sdi010_s4_res-type = ‘S’.
    output-mt_sdi010_s4_res-mess = ‘更改成功’.
    ENDIF.

    ENDMETHOD.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值