SD BAPI--SD_SALESDOCUMENT_CREATE 销售订单退/换货

该博客主要围绕ABAP语言实现SD BAPI–SD_SALESDOCUMENT_CREATE销售订单退/换货功能展开。详细介绍了函数定义、数据声明,包含数据检查、创建备件退货和换货销售订单、更新接口返回表及sap接口记录表等步骤,还对不同情况的处理结果进行了说明。

SD BAPI–SD_SALESDOCUMENT_CREATE 销售订单退/换货

FUNCTION zsdfu004.
*“----------------------------------------------------------------------
"“本地接口:
*” IMPORTING
*” VALUE(I_CGSQD) TYPE CHAR20 OPTIONAL
*" VALUE(I_ZNAME) TYPE CHAR12 OPTIONAL
*" VALUE(I_ZTYPE) TYPE CHAR01 OPTIONAL
*" VALUE(I_ZYY) TYPE CHAR200 OPTIONAL
*" EXPORTING
*" VALUE(E_TYPE) TYPE BAPI_MTYPE
*" VALUE(E_MSG) TYPE BAPI_MSG
*" TABLES
*" ITEM STRUCTURE ZSD004 OPTIONAL
*"----------------------------------------------------------------------

DATA: it_header_in LIKE bapisdhd1.
DATA: it_header_inx LIKE bapisdhd1x.
DATA: it_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA: it_items_in LIKE bapisditm OCCURS 0 WITH HEADER LINE. "通讯字段: 销售和分销凭证项目
DATA: it_items_in2 LIKE bapisditm OCCURS 0 WITH HEADER LINE. "通讯字段: 销售和分销凭证项目
DATA: it_items_inx LIKE bapisditmx OCCURS 0 WITH HEADER LINE. "通讯字段: 销售和分销凭证项目
DATA: it_schedules_in LIKE bapischdl OCCURS 0 WITH HEADER LINE. "维护 SD 凭证计划行的通讯字段
DATA: it_schedules_inx LIKE bapischdlx OCCURS 0 WITH HEADER LINE. "维护 SD 凭证计划行的通讯字段
DATA: it_partners LIKE bapiparnr OCCURS 0 WITH HEADER LINE. "通讯字段: SD单据合作伙伴
DATA: order_conditions_in LIKE bapicond OCCURS 0 WITH HEADER LINE.
DATA: order_conditions_inx LIKE bapicondx OCCURS 0 WITH HEADER LINE.
DATA: order_conditions_in2 LIKE bapicond OCCURS 0 WITH HEADER LINE.
DATA: order_conditions_inx2 LIKE bapicondx OCCURS 0 WITH HEADER LINE.
DATA: order_text LIKE bapisdtext OCCURS 0 WITH HEADER LINE.
DATA: lt_bapiparex LIKE bapiparex OCCURS 0 WITH HEADER LINE.
DATA: ls_zbape_vbap TYPE bape_vbap.
DATA: ls_zbape_vbapx TYPE bape_vbapx.
DATA: salesdocument1 LIKE bapivbeln-vbeln.
DATA: salesdocument2 LIKE bapivbeln-vbeln.

DATA:BEGIN OF is_vbak,
vbeln TYPE vbap-vbeln,
posnr TYPE vbap-posnr,
auart TYPE vbak-auart,
kunnr TYPE vbak-kunnr,
waerk TYPE vbak-waerk,
vkorg TYPE vbak-vkorg,
vtweg TYPE vbak-vtweg,
spart TYPE vbak-spart,
END OF is_vbak.
DATA:it_vbak LIKE TABLE OF is_vbak.
DATA: BEGIN OF is_vbkd,
vbeln TYPE vbap-vbeln,
posnr TYPE vbap-posnr,
bstkd TYPE vbkd-bstkd, "客户PO号
END OF is_vbkd.
DATA:it_vbkd LIKE TABLE OF is_vbkd.
DATA:it_item LIKE TABLE OF zsd004 WITH HEADER LINE.

DATA:lv_error.
DATA:lv_mess(200).
DATA:lv_type1.
DATA:lv_type2.
DATA:lv_mess1.
DATA:lv_mess2.

DATA:cs_vbak TYPE vbak.
DATA:cs_vbap TYPE vbap.
DATA:cs_vbkd TYPE vbkd.
DATA:lv_bstkd TYPE vbkd-bstkd.
DATA:lv_posnr TYPE vbap-posnr.
DATA lv_knumv LIKE vbak-knumv.
DATA:cs_konv TYPE v_konv_cds.

***1)数据检查
IF i_cgsqd = ‘’.
lv_error = ‘X’.
lv_mess = ‘缺少OA单号’.
ENDIF.
IF i_zname = ‘’.
lv_error = ‘X’.
lv_mess = lv_mess && ‘/’ && ‘缺少申请者’.
ENDIF.
IF i_ztype = ‘’.
lv_error = ‘X’.
lv_mess = lv_mess && ‘/’ && ‘缺少业务类型’.
ENDIF.
IF i_ztype = ‘T’ OR i_ztype = ‘H’.
ELSE.
lv_error = ‘X’.
lv_mess = lv_mess && ‘/’ && ‘业务类型不正确’.
ENDIF.
IF item[] IS INITIAL.
lv_error = ‘X’.
lv_mess = lv_mess && ‘/’ && ‘销售订单行为空’.
ENDIF.

IF lv_error = ‘’.
LOOP AT item.
CLEAR:it_item,is_vbak,is_vbkd.
it_item-vbeln = |{ item-vbeln ALPHA = IN }|.
it_item-posnr = |{ item-posnr ALPHA = IN }|.
it_item-matnr = item-matnr.
it_item-menge = item-menge.
APPEND it_item.

  SELECT SINGLE * INTO CORRESPONDING FIELDS OF cs_vbap FROM vbap WHERE vbeln = it_item-vbeln AND posnr = it_item-posnr.
  IF sy-subrc <> 0.
    lv_error = 'X'.
    lv_mess = lv_mess && '/' && 'SO行:' && item-vbeln && '&' && item-posnr && '不存在'.
    EXIT.
  ELSE.
    IF cs_vbap-matnr <> item-matnr.
      lv_error = 'X'.
      lv_mess = lv_mess && '/' && 'SO行:' && item-vbeln && '&' && item-posnr && '物料不一致'.
      EXIT.
    ELSE.

      SELECT SINGLE * INTO cs_vbak FROM vbak WHERE vbeln = it_item-vbeln.
      MOVE-CORRESPONDING cs_vbak TO is_vbak.
      APPEND is_vbak TO it_vbak.
  •      SELECT SINGLE * INTO cs_vbkd FROM vbkd WHERE vbeln = it_item-vbeln AND posnr = '000000'.
    
  •      is_vbkd-vbeln = it_item-vbeln.
    
  •      is_vbkd-posnr = it_item-posnr.
    
  •      is_vbkd-bstkd = cs_vbkd-bstkd.
        is_vbkd-vbeln = item-vbeln.
        APPEND is_vbkd TO it_vbkd.
      ENDIF.
    ENDIF.
    

    ENDLOOP.

    SORT it_vbak BY auart kunnr waerk vkorg vtweg spart.
    DELETE ADJACENT DUPLICATES FROM it_vbak COMPARING auart kunnr waerk vkorg vtweg spart.

    IF lines( it_vbak ) > 1.
    lv_error = ‘X’.
    lv_mess = lv_mess && ‘订单抬头不一致(订单类型 or 客户 or 销售范围 or 币种)’.
    ELSEIF lines( it_vbak ) = 1.
    IF cs_vbak-auart <> ‘ZSP’.
    lv_error = ‘X’.
    lv_mess = lv_mess && ‘不是备件销售订单’.
    ENDIF.
    ENDIF.

    SORT it_vbkd BY vbeln.
    DELETE ADJACENT DUPLICATES FROM it_vbkd COMPARING vbeln.
    LOOP AT it_vbkd INTO is_vbkd.
    is_vbkd-vbeln = |{ is_vbkd-vbeln ALPHA = OUT }|.
    IF sy-tabix = 1.
    lv_bstkd = is_vbkd-vbeln.
    ELSE.
    lv_bstkd = lv_bstkd && ‘’ && ‘/’ && is_vbkd-vbeln.
    ENDIF.
    ENDLOOP.
    lv_bstkd = lv_bstkd && ‘//’ && sy-datum+4(4).
    ENDIF.

***2)创建备件退货销售订单
IF lv_error = ‘’.
CLEAR:it_header_in,it_header_inx,salesdocument1,lv_posnr.
REFRESH:it_return,it_items_in,it_items_in2,it_items_inx,it_schedules_in,it_schedules_inx,it_partners,
order_conditions_in,order_conditions_inx,order_conditions_in2,order_conditions_inx2,lt_bapiparex,order_text.

"2.1)抬头赋值
it_header_in-doc_type      = 'ZRE2'.            "订单类型 备件退货订单类型
it_header_in-sales_org     = cs_vbak-vkorg.     "销售组织
it_header_in-distr_chan    = cs_vbak-vtweg.     "分销渠道
it_header_in-division      = cs_vbak-spart.     "产品组
it_header_in-purch_no_c    = 'T:' && lv_bstkd.  "采购订单号

it_header_in-ref_1         = lv_bstkd.          "您的参考
it_header_in-doc_date      = sy-datum.          "凭证日期
it_header_in-currency      = cs_vbak-waerk.     "币种
  • it_header_inx-doc_type = ‘X’. "订单类型
  • it_header_inx-sales_org = ‘X’. "销售组织
  • it_header_inx-distr_chan = ‘X’. "销售渠道
  • it_header_inx-division = ‘X’. "产品组
  • it_header_inx-purch_no_c = ‘X’. "采购订单号
  • it_header_inx-ref_1 = ‘X’. "您的参考
  • it_header_inx-doc_date = ‘X’. "凭证日期
  • it_header_inx-currency = ‘X’. "币种
"2.2)合作伙伴
it_partners-partn_role = 'AG'.
it_partners-partn_numb = cs_vbak-kunnr.
it_partners-itm_number = space.
APPEND it_partners .
it_partners-partn_role = 'RG'.
it_partners-partn_numb = cs_vbak-kunnr.
it_partners-itm_number = space.
APPEND it_partners .
it_partners-partn_role = 'RE'.
it_partners-partn_numb = cs_vbak-kunnr.
it_partners-itm_number = space.
APPEND it_partners .
it_partners-partn_role = 'WE'.
it_partners-partn_numb = cs_vbak-kunnr.
it_partners-itm_number = space.
APPEND it_partners .

"2.3)行项目
"2.3.1)行项目
LOOP AT it_item.
  CLEAR:it_items_in,it_items_inx.
  ADD 10 TO lv_posnr.
  it_item-posnr1 = lv_posnr.
  MODIFY it_item TRANSPORTING posnr1.

  SELECT SINGLE * INTO CORRESPONDING FIELDS OF cs_vbap FROM vbap WHERE vbeln = it_item-vbeln AND posnr = it_item-posnr.

  it_items_in-itm_number     = lv_posnr.            "销售订单行项目号
  it_items_in-material_long  = it_item-matnr.       "物料
  •  it_items_in-sales_unit     = cs_vbap-vrkme.       "单位
    it_items_in-plant          = cs_vbap-werks.       "工厂
    it_items_in-target_qty     = it_item-menge.       "数量
    it_items_in-target_qu      = cs_vbap-vrkme.       "单位
    it_items_in-purch_no_c     = 'T:' && |{ it_item-vbeln ALPHA = OUT }| && '/' && |{ it_item-posnr ALPHA = OUT }|. "行项目参考
    APPEND  it_items_in.
    
    IF i_ztype = 'H'.
      it_items_in-purch_no_c = 'H:' && |{ it_item-vbeln ALPHA = OUT }| && '/' && |{ it_item-posnr ALPHA = OUT }|. "行项目参考
      DO 10 TIMES.
        SELECT COUNT(*) FROM vbkd WHERE bstkd = it_items_in-purch_no_c.
        IF sy-subrc = 0.
          it_items_in-purch_no_c   = 'H' && it_items_in-purch_no_c.
        ELSE.
          EXIT.
        ENDIF.
      ENDDO.
      APPEND it_items_in TO it_items_in2.
    ENDIF.
    
  •  it_items_inx-updateflag  = 'M'.
    
  •  it_items_inx-itm_number    = lv_posnr.              "销售订单行项目号
    
  •  it_items_inx-material_long = 'X'.                   "物料
    

** it_items_inx-sales_unit = ‘X’. "单位

  •  it_items_inx-plant         = 'X'.                   "工厂
    
  •  it_items_inx-target_qty    = 'X'.                   "数量
    
  •  it_items_inx-target_qu     = 'X'.                   "单位
    
  •  it_items_inx-purch_no_c    = 'X'.                   "行项目参考
    
  •  APPEND it_items_inx.
    
    "2.3.2)增强字段
    CLEAR: ls_zbape_vbap, ls_zbape_vbapx.
    ls_zbape_vbap = VALUE #(
                             posnr    = lv_posnr
                             zprono   = cs_vbap-zprono
                              ).
    ls_zbape_vbapx = VALUE #(
                             posnr    = lv_posnr
                             zprono   = 'X'
                               ).
    
    CLEAR:lt_bapiparex.
    lt_bapiparex-structure = 'BAPE_VBAP'.
    lt_bapiparex+30(960)   = ls_zbape_vbap.
    APPEND lt_bapiparex TO lt_bapiparex.
    
    CLEAR:lt_bapiparex.
    lt_bapiparex-structure = 'BAPE_VBAPX'.
    lt_bapiparex+30(960)   = ls_zbape_vbapx.
    APPEND lt_bapiparex.
    
    "2.3.3)计划行
    CLEAR it_schedules_in.
    it_schedules_in-itm_number   = lv_posnr.
    it_schedules_in-sched_line   = 1.
    it_schedules_in-req_qty      = it_item-menge.       "数量
    it_schedules_in-req_date     = sy-datum.
    APPEND  it_schedules_in.
    
  •  it_schedules_inx-updateflag = 'I'.
    
  •  it_schedules_inx-itm_number = lv_posnr.
    
  •  it_schedules_inx-sched_line = 1.
    
  •  it_schedules_inx-req_qty    = 'X'.
    
  •  it_schedules_inx-req_date   = 'X'.
    
  •  APPEND  it_schedules_inx.
    
    
    "2.3.4)价格条件
    CLEAR:lv_knumv,cs_konv,order_conditions_in.
    SELECT SINGLE knumv INTO lv_knumv FROM vbak WHERE vbeln = it_item-vbeln.
    SELECT SINGLE * INTO CORRESPONDING FIELDS OF cs_konv FROM v_konv_cds WHERE knumv = lv_knumv
                                                                           AND kposn = it_item-posnr
                                                                           AND kinak = ''
                                                                           AND kschl LIKE 'PR0%'.
    
    order_conditions_in-itm_number = lv_posnr.       "Condition item number
    order_conditions_in-cond_st_no = cs_konv-stunr.  "步骤
    order_conditions_in-cond_count = cs_konv-zaehk.  "计数
    order_conditions_in-cond_type  = cs_konv-kschl.  "条件类型
    order_conditions_in-cond_value = cs_konv-kbetr.  "单价
    order_conditions_in-currency   = cs_konv-waers.  "币种
    order_conditions_in-cond_p_unt = cs_konv-kpein.  "价格单位
    
  •  order_conditions_in-cond_unit  = cs_konv-kmein.  "数量单位
    APPEND order_conditions_in.
    
    order_conditions_inx-updateflag  = 'U'.
    order_conditions_inx-itm_number  = lv_posnr.     "Condition item number
    order_conditions_inx-cond_st_no  = cs_konv-stunr.  "步骤
    order_conditions_inX-cond_count  = cs_konv-zaehk.  "计数
    order_conditions_inx-cond_type   = cs_konv-kschl."条件类型
    order_conditions_inx-cond_value  = 'X'.          "单价
    order_conditions_inx-currency    = 'X'.          "币种
    order_conditions_inx-cond_p_unt  = 'X'.          "价格单位
    APPEND order_conditions_inx.
    
    IF i_ztype = 'H'.
      APPEND LINES OF order_conditions_in TO order_conditions_in2.
      APPEND LINES OF order_conditions_inx TO order_conditions_inx2.
    ENDIF.
    
    "2.3.5)项目文本
    CLEAR:order_text.
    
  •  order_text-doc_number = ''.
    order_text-itm_number = lv_posnr.
    order_text-text_id    = '0001'.
    order_text-langu      = sy-langu.
    order_text-text_line  = '退货,原订单:' && it_item-vbeln && '//' && it_item-posnr.
    APPEND order_text.
    

    ENDLOOP.

    "2.4 掉BAPI
    CALL FUNCTION ‘SD_SALESDOCUMENT_CREATE’
    EXPORTING
    sales_header_in = it_header_in

  •   sales_header_inx     = it_header_inx
    IMPORTING
      salesdocument_ex     = salesdocument1
    TABLES
      return               = it_return
      sales_items_in       = it_items_in
    
  •   sales_items_inx      = it_items_inx
      sales_partners       = it_partners
      sales_schedules_in   = it_schedules_in
    
  •   sales_schedules_inx  = it_schedules_inx
      sales_conditions_in  = order_conditions_in
      sales_conditions_inx = order_conditions_inx
      sales_text           = order_text
      extensionin          = lt_bapiparex.
    

    DELETE it_return WHERE id = ‘V4’ AND number = ‘219’.

    IF salesdocument1 IS INITIAL.
    CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.

    lv_error = 'X'.
    lv_type1 = 'E'.
    
    LOOP AT it_return WHERE type CA 'AE'.
      IF sy-tabix = 1.
        lv_mess = '创建退货订单失败:' && it_return-message.
      ELSE.
        lv_mess = lv_mess && ',' && it_return-message.
      ENDIF.
    ENDLOOP.
    lv_mess1 = lv_mess.
    
    LOOP AT it_item.
      CLEAR it_item-posnr1.
      MODIFY it_item TRANSPORTING posnr1.
    ENDLOOP.
    

    ELSE.
    CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
    EXPORTING
    wait = ‘X’.

    lv_type1 = 'S'.
    
    DO 1000 TIMES.
      SELECT COUNT(*) FROM lips WHERE vgbel = salesdocument1.
      IF sy-subrc = 0.
        EXIT.
      ENDIF.
    ENDDO.
    
    LOOP AT it_item.
      it_item-vbeln1 = salesdocument1.
    
      SELECT SINGLE * INTO @DATA(lw_lips) FROM lips WHERE vgbel = @it_item-vbeln1 AND vgpos = @it_item-posnr1.
      IF sy-subrc = 0.
        it_item-vbeln3 = lw_lips-vbeln.
        it_item-posnr3 = lw_lips-posnr.
      ENDIF.
    
      MODIFY it_item TRANSPORTING vbeln1 vbeln3 posnr3.
    ENDLOOP.
    

    ENDIF.
    ENDIF.

***3)创建备件换货销售订单
"大部分数据用创建退货销售订单的数据
IF i_ztype = ‘H’.
IF lv_error = ‘’.
CLEAR:salesdocument2.
REFRESH:it_return.

  "3.1)抬头赋值
  it_header_in-doc_type      = 'ZSP'.            "订单类型 备件退货订单类型
  it_header_in-purch_no_c    = 'H:' && lv_bstkd.  "采购订单号
  DO 10 TIMES.
    SELECT COUNT(*) FROM vbkd WHERE bstkd = it_header_in-purch_no_c.
    IF sy-subrc = 0.
      it_header_in-purch_no_c    = 'H' && it_header_in-purch_no_c.
    ELSE.
      EXIT.
    ENDIF.
  ENDDO.
  "3.2项目文本
  LOOP AT order_text.
    REPLACE '退货' WITH '换货' INTO order_text-text_line.
    MODIFY order_text TRANSPORTING text_line.
  ENDLOOP.


  "3.3 掉BAPI
  CALL FUNCTION 'SD_SALESDOCUMENT_CREATE'
    EXPORTING
      sales_header_in     = it_header_in
  •     sales_header_inx    = it_header_inx
      IMPORTING
        salesdocument_ex    = salesdocument2
      TABLES
        return              = it_return
        sales_items_in      = it_items_in2
    
  •     sales_items_inx     = it_items_inx
        sales_partners      = it_partners
        sales_schedules_in  = it_schedules_in
    
  •     sales_schedules_inx = it_schedules_inx
        sales_conditions_in = order_conditions_in2
       sales_conditions_inx = order_conditions_inx2
        sales_text          = order_text
        extensionin         = lt_bapiparex.
    
    DELETE it_return WHERE id = 'V4' AND  number = '219'.
    
    IF salesdocument2 IS INITIAL.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    
      lv_error = 'X'.
      lv_type2 = 'E'.
    
      LOOP AT it_return WHERE type CA 'AE'.
        IF sy-tabix = 1.
          lv_mess = '创建换货订单失败:' && it_return-message.
        ELSE.
          lv_mess = lv_mess && ',' && it_return-message.
        ENDIF.
      ENDLOOP.
      lv_mess2 = lv_mess.
    
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
    
      lv_type2 = 'S'.
    
      LOOP AT it_item.
        it_item-vbeln2 = salesdocument2.
        it_item-posnr2 = it_item-posnr1.
        MODIFY it_item TRANSPORTING vbeln2 posnr2.
      ENDLOOP.
    ENDIF.
    

    ENDIF.
    ENDIF.

    IF lv_error = ‘’.
    e_type = ‘S’.
    e_msg = ‘处理成功’.
    ELSE.
    IF salesdocument1 <> ‘’.
    e_type = ‘I’.
    e_msg = ‘退货订单创建成功:’ && salesdocument1 && ‘//换货订单创建失败,’ && lv_mess.
    ELSE.
    e_type = ‘E’.
    e_msg = ‘处理失败,’ && lv_mess.
    ENDIF.
    ENDIF.

***4)更新接口返回表item
LOOP AT item.
item-vbeln = |{ item-vbeln ALPHA = IN }|.
item-posnr = |{ item-posnr ALPHA = IN }|.
READ TABLE it_item WITH KEY vbeln = item-vbeln
posnr = item-posnr.
IF sy-subrc = 0.
item-vbeln1 = it_item-vbeln1.
item-posnr1 = it_item-posnr1.
item-vbeln3 = it_item-vbeln3.
item-posnr3 = it_item-posnr3.
item-vbeln2 = it_item-vbeln2.
item-posnr2 = it_item-posnr2.
ENDIF.
MODIFY item TRANSPORTING vbeln1 posnr1 vbeln3 posnr3 vbeln2 posnr2.
ENDLOOP.

***5)更新sap接口记录表
DATA:lt_07 TYPE TABLE OF ztsd007 WITH HEADER LINE.
DATA:lv_xh TYPE ztsd007-xh.
DATA:lv_xhitem TYPE ztsd007-xhitem.
DATA:lv_date TYPE sy-datum.
DATA:lv_time TYPE sy-uzeit.
CLEAR:lv_xh,lv_xhitem,lt_07[].

lv_date = sy-datum.
lv_time = sy-uzeit.

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

IF item[] IS INITIAL.
CLEAR lt_07.
lt_07-xh = lv_xh.
lt_07-xhitem = 1.
lt_07-cgsqd = i_cgsqd.
lt_07-zname = i_zname.
lt_07-ztype = i_ztype.
lt_07-zdate = lv_date.
lt_07-ztime = lv_time.
lt_07-ztype3 = e_type.
lt_07-mess3 = e_msg.
lt_07-zyy = i_zyy.
APPEND lt_07.
ELSE.
LOOP AT it_item.
CLEAR lt_07.
ADD 1 TO lv_xhitem.

  lt_07-xh = lv_xh.
  lt_07-xhitem = lv_xhitem.
  lt_07-cgsqd = i_cgsqd.
  lt_07-zname = i_zname.
  lt_07-ztype = i_ztype.
  lt_07-zdate = lv_date.
  lt_07-ztime = lv_time.
  lt_07-ztype3 = e_type.
  lt_07-mess3 = e_msg.
  lt_07-zyy   = i_zyy.
  lt_07-vbeln = it_item-vbeln.
  lt_07-posnr = it_item-posnr.
  lt_07-matnr = it_item-matnr.
  lt_07-menge = it_item-menge.
  lt_07-ztype1 = lv_type1.
  lt_07-mess1 = lv_mess1.
  lt_07-vbeln1 = it_item-vbeln1.
  lt_07-posnr1 = it_item-posnr1.
  lt_07-vbeln3 = it_item-vbeln3.
  lt_07-posnr3 = it_item-posnr3.
  lt_07-ztype2 = lv_type2.
  lt_07-mess2 = lv_mess2.
  lt_07-vbeln2 = it_item-vbeln2.
  lt_07-posnr2 = it_item-posnr2.
  APPEND lt_07.
ENDLOOP.

ENDIF.

IF lt_07[] IS NOT INITIAL.
MODIFY ztsd007 FROM TABLE lt_07.
COMMIT WORK.
ENDIF.

ENDFUNCTION.

FUNCTION /sc1/ftd_mm_migo. *"---------------------------------------------------------------------- *"*"本地接口: *"  TABLES *"      ET_RETURN STRUCTURE  /SC1/FTD_MM_BAPIRET *"      IT_INPUT STRUCTURE  /SC1/S_WIS_INPUT *"----------------------------------------------------------------------   DATA: lt_po          TYPE STANDARD TABLE OF /sc1/s_wis_input,         lt_inbound_do  TYPE STANDARD TABLE OF /sc1/s_wis_input,         lt_outbound_do TYPE STANDARD TABLE OF /sc1/s_wis_input,         lt_tl          TYPE STANDARD TABLE OF /sc1/s_wis_input,"铁笼物料做无采购订单收货         lt_ekpo        TYPE STANDARD TABLE OF ty_ekpo,         lt_return      TYPE STANDARD TABLE OF /sc1/ftd_mm_bapiret,         lt_/sc1/mm_migo_log TYPE STANDARD TABLE OF /sc1/mm_migo_log.   "拆分数据&过滤掉已经收货成功的数据   PERFORM split_data TABLES it_input       "传入参数                             lt_po          "采购订单                             lt_inbound_do  "内向交货                             lt_outbound_do "外向交货                             lt_tl          "铁笼物料                             lt_ekpo.   "采购订单收货   PERFORM action_po TABLES lt_po  lt_ekpo  lt_return lt_/sc1/mm_migo_log.   "内向交货收货   PERFORM action_inbound_do TABLES lt_inbound_do  lt_return lt_/sc1/mm_migo_log.   "外向交货收货   PERFORM action_outbound_do TABLES lt_outbound_do  lt_return lt_/sc1/mm_migo_log.   "铁笼物料收货   PERFORM action_tl TABLES lt_tl  lt_return lt_/sc1/mm_migo_log.   "保存日志   PERFORM save_log TABLES lt_return lt_/sc1/mm_migo_log.   "编辑消息   PERFORM edit_msg TABLES lt_return et_return . ENDFUNCTION. *----------------------------------------------------------------------* ***INCLUDE /SC1/LFTD_MM_WISF03. *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *&      Form  GET_DATA_MIO1_NEW *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_ITEM[]  text *      -->P_LS_HEAD  text *      <--P_LT_RETURN1  text *      <--P_LV_EBELN  text *      <--P_LV_VBELN  text *----------------------------------------------------------------------* FORM action_po TABLES   pt_po STRUCTURE /sc1/s_wis_input                         pt_ekpo TYPE ty_t_ekpo                         et_return STRUCTURE /sc1/ftd_mm_bapiret                         et_/sc1/mm_migo_log STRUCTURE /sc1/mm_migo_log.   DATA: lt_po_sh     TYPE STANDARD TABLE OF ty_po_sh.   DATA: ls_po_sh     TYPE ty_po_sh.   DATA: lt_ekbe      TYPE STANDARD TABLE OF ekbe,         lt_ekbe_sum  TYPE STANDARD TABLE OF ekbe,         ls_ekbe_sum  TYPE ekbe,         ls_po        TYPE /sc1/s_wis_input,         lv_menge_temp TYPE ekpo-menge,         lv_end_flg    TYPE char1,         lt_ekpo_temp  TYPE ty_t_ekpo.   DATA:ls_return TYPE /sc1/ftd_mm_bapiret .   FIELD-SYMBOLS:<ls_ekpo> TYPE ty_ekpo,                 <ls_po>   TYPE  /sc1/s_wis_input.   CHECK pt_po[] IS NOT INITIAL.   READ TABLE et_return with KEY type = 'E' TRANSPORTING NO FIELDS .   CHECK sy-subrc <> 0.   "(2)根据上一步获得的信息,获取每个项目当前待入库的剩余量;   "(2)-1:获取采购订单历史数据   IF pt_ekpo[] IS NOT INITIAL.     SELECT ebeln            ebelp            menge            shkzg       FROM ekbe       INTO CORRESPONDING FIELDS OF TABLE lt_ekbe       FOR ALL ENTRIES IN pt_ekpo[]       WHERE ebeln = pt_ekpo-ebeln         AND ebelp = pt_ekpo-ebelp.   ENDIF.   "(2)-2:计算已收货总数量   LOOP AT lt_ekbe ASSIGNING FIELD-SYMBOL(<ls_ekbe>).     IF <ls_ekbe>-shkzg = 'H'.       <ls_ekbe>-menge  = <ls_ekbe>-menge * -1.     ENDIF.     CLEAR <ls_ekbe>-shkzg.     COLLECT <ls_ekbe> INTO lt_ekbe_sum.   ENDLOOP.   "(2)-3:计算每个行项目的剩余库存   LOOP AT pt_ekpo ASSIGNING <ls_ekpo>.     READ TABLE  lt_ekbe_sum INTO ls_ekbe_sum                          WITH KEY ebeln = <ls_ekpo>-ebeln                                   ebelp = <ls_ekpo>-ebelp .     IF sy-subrc = 0."采购订单部分收货       <ls_ekpo>-menge_re =  <ls_ekpo>-menge - ls_ekbe_sum-menge.     ELSE."采购订单没有进行过收货       <ls_ekpo>-menge_re = <ls_ekpo>-menge.     ENDIF.   ENDLOOP.   "(3)(4)入库数量分配   SORT pt_po BY matnr.   LOOP AT pt_po ASSIGNING <ls_po>.     MOVE-CORRESPONDING <ls_po> TO ls_po_sh.     "先本全收货     LOOP AT pt_ekpo ASSIGNING <ls_ekpo> WHERE matnr = <ls_po>-matnr AND ebeln = <ls_po>-vbeln.       "(本次收货数量 - 采购剩余数量) 大于0说明采购订单剩余量不够收货用,采购订单剩余收货数量一定为0       IF ( <ls_po>-lfimg - <ls_ekpo>-menge_re ) >= 0.         <ls_ekpo>-menge_sh = <ls_ekpo>-menge_sh + <ls_ekpo>-menge_re.         "SKU入库数量         <ls_po>-lfimg = <ls_po>-lfimg - <ls_ekpo>-menge_re.         ls_po_sh-lfimg = <ls_ekpo>-menge_re."采购订单本次收货数量=采购订单剩余数量 1         <ls_ekpo>-menge_re = 0.             "采购订单剩余收货数量一定为0           2,1和2的赋值顺序不能变         ls_po_sh-ebeln = <ls_ekpo>-ebeln.         ls_po_sh-ebelp = <ls_ekpo>-ebelp.         COLLECT ls_po_sh INTO lt_po_sh.       ELSE."采购订单剩余量>本次收货量         <ls_ekpo>-menge_sh = <ls_ekpo>-menge_sh + <ls_po>-lfimg .         <ls_ekpo>-menge_re = <ls_ekpo>-menge_re - <ls_po>-lfimg.         ls_po_sh-lfimg = <ls_po>-lfimg.  "收货数量         ls_po_sh-ebeln = <ls_ekpo>-ebeln.         ls_po_sh-ebelp = <ls_ekpo>-ebelp.         COLLECT ls_po_sh INTO lt_po_sh.         <ls_po>-lfimg = 0. "待收货数量为0,结束         EXIT.       ENDIF.     ENDLOOP.     "如果本全收货后还有剩余,则在剩下的po中同物料进行收货     IF <ls_po>-lfimg  > 0."       LOOP AT pt_ekpo ASSIGNING <ls_ekpo> WHERE matnr = <ls_po>-matnr .         IF  <ls_ekpo>-ebeln <> <ls_po>-vbeln.           IF ( <ls_po>-lfimg - <ls_ekpo>-menge_re ) >= 0.             ls_po_sh-lfimg = <ls_ekpo>-menge_re."收货数量           ELSE.             ls_po_sh-lfimg = <ls_po>-lfimg."收货数量           ENDIF.           ls_po_sh-ebeln = <ls_ekpo>-ebeln.           ls_po_sh-ebelp = <ls_ekpo>-ebelp.           COLLECT ls_po_sh INTO lt_po_sh.           "SKU入库数量           <ls_po>-lfimg = <ls_po>-lfimg - <ls_ekpo>-menge_re.           "SKU剩余入库数量           <ls_ekpo>-menge_re = <ls_ekpo>-menge_re - <ls_po>-lfimg.           IF <ls_po>-lfimg <= 0."SKU入库数量已分配完成,结束分配             EXIT.           ELSEIF <ls_po>-lfimg > 0."SKU入库数量未分配完,需要继续分配           ENDIF.         ENDIF.       ENDLOOP.     ENDIF.   ENDLOOP.   SORT pt_ekpo BY matnr.   LOOP AT pt_po INTO ls_po.     IF ls_po-lfimg > 0."没有       ls_return-uuid = ls_po-uuid.       ls_return-type = 'E'.       ls_return-message =  '库存数量不足'.       APPEND ls_return TO et_return.       DELETE  lt_po_sh WHERE matnr = ls_po-matnr.     ENDIF.   ENDLOOP.   "收货   SORT lt_po_sh BY ebeln ebelp.   PERFORM goodsmvt_create_new TABLES et_return  USING lt_po_sh.   PERFORM edit_log TABLES pt_po                           et_return                           et_/sc1/mm_migo_log. ENDFORM.                    " GET_DATA_MIO1_NEW *&---------------------------------------------------------------------* *&      Form  GOODSMVT_CREATE *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *  -->  p1        text *  <--  p2        text *----------------------------------------------------------------------* FORM goodsmvt_create  TABLES et_return STRUCTURE /sc1/ftd_mm_bapiret                       USING pt_ekpo TYPE ty_t_ekpo                            ps_po    TYPE /sc1/s_wis_input.   "BAPI_GOODSMVT_CREATE 用内表 begin   DATA lv_mblnr            TYPE mseg-mblnr.   DATA ls_goodsmvt_header  TYPE bapi2017_gm_head_01.   DATA ls_code             LIKE  bapi2017_gm_code.   DATA ls_goodsmvt_item    TYPE bapi2017_gm_item_create.   DATA lt_goodsmvt_item    TYPE STANDARD TABLE OF  bapi2017_gm_item_create.   DATA lt_return           TYPE STANDARD TABLE OF bapiret2.   DATA ls_return           TYPE bapiret2.   "BAPI_GOODSMVT_CREATE 用内表 end   DATA: ls_ekpo            TYPE ty_ekpo.   DATA: ls_et_return       TYPE /sc1/ftd_mm_bapiret.   LOOP AT pt_ekpo INTO ls_ekpo.     CLEAR ls_goodsmvt_item.     ls_goodsmvt_item-material  = ps_po-matnr.     ls_goodsmvt_item-move_type =  '101'.    "移动类型     ls_goodsmvt_item-mvt_ind   = 'B'.       "移动标识     ls_goodsmvt_item-entry_qnt = ls_ekpo-menge_sh.     ls_goodsmvt_item-entry_uom = ps_po-meins.     ls_goodsmvt_item-plant     = ps_po-werks.     ls_goodsmvt_item-stge_loc  = ps_po-lgort.     ls_goodsmvt_item-batch     = ps_po-charg.     ls_goodsmvt_item-prod_date = ps_po-hsdat."生产日期     ls_goodsmvt_item-expirydate = ps_po-vfdat."货架寿命到期日     ls_goodsmvt_item-vendrbatch = ps_po-licha."供应商批次     ls_goodsmvt_item-stck_type  = ps_po-insmk.     ls_goodsmvt_item-po_number  = ls_ekpo-ebeln.     ls_goodsmvt_item-po_item    = ls_ekpo-ebelp.     IF ls_goodsmvt_item-entry_qnt IS NOT INITIAL.       APPEND ls_goodsmvt_item TO lt_goodsmvt_item.     ENDIF.   ENDLOOP.   ls_goodsmvt_header-pstng_date  = ps_po-wadat_ist."凭证中的过帐日期   ls_goodsmvt_header-doc_date    = sy-datum."凭证中的凭证日期   ls_goodsmvt_header-pr_uname    = sy-datum.    "用户名   ls_goodsmvt_header-ref_doc_no  = ls_ekpo-ebeln.   ls_code-gm_code                = '01'.  "按照采购订单收货   CALL FUNCTION 'BAPI_GOODSMVT_CREATE'     EXPORTING       goodsmvt_header  = ls_goodsmvt_header       goodsmvt_code    = ls_code     IMPORTING       materialdocument = lv_mblnr     TABLES       goodsmvt_item    = lt_goodsmvt_item       return           = lt_return.   READ TABLE lt_return WITH KEY  type = 'E' INTO ls_return.   IF  sy-subrc = 0.     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .     ls_et_return-uuid = ps_po-uuid.     ls_et_return-type = 'E'.     LOOP AT lt_return INTO ls_return WHERE type = 'E' .       CONCATENATE ls_et_return-message ls_return-message '|' INTO ls_et_return-message.     ENDLOOP.   ELSE.     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'       EXPORTING         wait = 'X'.     ls_et_return-uuid = ps_po-uuid.     ls_et_return-type = 'S'.     ls_et_return-message = ps_po-vbeln && '收货成功'.   ENDIF.   APPEND ls_et_return TO et_return. ENDFORM.                    " GOODSMVT_CREATE *&---------------------------------------------------------------------* *&      Form  ACTION_INBOUND_DO *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_INBOUND_DO  text *      -->P_LT_EKPO  text *      -->P_ET_RETURN  text *----------------------------------------------------------------------* FORM action_inbound_do  TABLES pt_inbound_do STRUCTURE /sc1/s_wis_input                           et_return STRUCTURE /sc1/ftd_mm_bapiret                         et_/sc1/mm_migo_log STRUCTURE /sc1/mm_migo_log.   DATA: lt_do_temp    TYPE STANDARD TABLE OF /sc1/s_wis_input,         ls_inbound_do TYPE /sc1/s_wis_input,         lv_end_flg    TYPE char1,         lv_exec_flg   TYPE char1.   CHECK pt_inbound_do[] IS NOT INITIAL.   READ TABLE et_return with KEY type = 'E' TRANSPORTING NO FIELDS .   CHECK sy-subrc <> 0.   SORT pt_inbound_do BY vbeln posnr.   LOOP AT pt_inbound_do INTO ls_inbound_do.     APPEND ls_inbound_do TO lt_do_temp.     AT END OF vbeln.       lv_end_flg = 'X'.     ENDAT.     IF lv_end_flg = 'X'.       CLEAR: lv_end_flg,lv_exec_flg.       "如果遇出错,剩余数据不进行收货       READ TABLE et_return with KEY type = 'E' TRANSPORTING NO FIELDS.       IF sy-subrc = 0.         CLEAR: lt_do_temp.         CONTINUE.       ENDIF.       "比较接口传入的信息和系统中的内向交货信息,行项目数或者数量不相同,则进行修改操作       PERFORM inbound_do_update TABLES  lt_do_temp et_return                                CHANGING lv_exec_flg.       "批次拆分       PERFORM inbound_do_batch_split TABLES  lt_do_temp et_return                                    CHANGING lv_exec_flg.       "拣配       PERFORM do_picking TABLES  lt_do_temp et_return                                CHANGING lv_exec_flg.       "过账       PERFORM inbound_do_confirm TABLES  lt_do_temp et_return                                CHANGING lv_exec_flg.       PERFORM edit_log TABLES lt_do_temp                               et_return                               et_/sc1/mm_migo_log.       CLEAR: lt_do_temp,lv_end_flg.     ENDIF.   ENDLOOP. ENDFORM.                    " ACTION_INBOUND_DO *&---------------------------------------------------------------------* *&      Form  ACTION_OUTBOUND_DO *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_INBOUND_DO  text *      -->P_LT_EKPO  text *      -->P_ET_RETURN  text *----------------------------------------------------------------------* FORM action_outbound_do  TABLES pt_outbound_do STRUCTURE /sc1/s_wis_input                           et_return STRUCTURE /sc1/ftd_mm_bapiret                         et_/sc1/mm_migo_log STRUCTURE /sc1/mm_migo_log.   DATA: lt_do_temp  TYPE STANDARD TABLE OF /sc1/s_wis_input,         ls_outbound_do TYPE /sc1/s_wis_input,         lv_end_flg  TYPE char1,         lv_exec_flg TYPE char1.   CHECK pt_outbound_do[] IS NOT INITIAL.   READ TABLE et_return with KEY type = 'E' TRANSPORTING NO FIELDS .   CHECK sy-subrc <> 0.   SORT pt_outbound_do BY vbeln posnr.   "从数据库表获取交货数量并与传入数量进行对比(以传入数量为准) 在小于等于数据库交货数量的情况下对交货进行修改   LOOP AT pt_outbound_do INTO ls_outbound_do.     APPEND ls_outbound_do TO lt_do_temp.     AT END OF vbeln.       lv_end_flg = 'X'.     ENDAT.     IF lv_end_flg = 'X'.       CLEAR: lv_end_flg,lv_exec_flg.       READ TABLE et_return with KEY type = 'E' TRANSPORTING NO FIELDS.       IF sy-subrc = 0.         CLEAR lt_do_temp.         CONTINUE.       ENDIF.       "收货       PERFORM goodsmvt_create_outbound_do TABLES lt_do_temp et_return                                         CHANGING lv_exec_flg.       PERFORM edit_log TABLES lt_do_temp                               et_return                               et_/sc1/mm_migo_log.       CLEAR lt_do_temp.     ENDIF.   ENDLOOP. ENDFORM.                    " ACTION_INBOUND_DO *&---------------------------------------------------------------------* *&      Form  GR_INBOUND_DO *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_DO_TEMP  text *----------------------------------------------------------------------* FORM inbound_do_update   TABLES pt_inbound_do STRUCTURE /sc1/s_wis_input                                  et_return STRUCTURE /sc1/ftd_mm_bapiret                          CHANGING pv_exec_flg      TYPE c.  .   "BAPI_INB_DELIVERY_CHANGE 用变量 begin   DATA:ls_header_data TYPE bapiibdlvhdrchg.   DATA:ls_header_control TYPE bapiibdlvhdrctrlchg.   DATA:ls_delivery TYPE bapiibdlvhdrchg-deliv_numb.   DATA:lt_return  LIKE TABLE OF bapiret2 WITH HEADER LINE.   DATA:ls_return  LIKE bapiret2 .   DATA:ls_item_data TYPE bapiibdlvitemchg,        lt_item_data TYPE STANDARD TABLE OF bapiibdlvitemchg.   DATA:ls_item_control TYPE bapiibdlvitemctrlchg,        lt_item_control TYPE STANDARD TABLE OF bapiibdlvitemctrlchg.   "BAPI_INB_DELIVERY_CHANGE 用变量 end   DATA: lt_lips TYPE STANDARD TABLE OF lips,         ls_lips TYPE lips,         ls_inbound_do TYPE /sc1/s_wis_input,         ls_do   TYPE /sc1/s_wis_input,         lv_end_flg TYPE char1,         lv_msg     TYPE char255,         ls_et_return TYPE /sc1/ftd_mm_bapiret,         lt_inbound_do_temp TYPE STANDARD TABLE OF /sc1/s_wis_input,         ls_inbound_do_temp TYPE /sc1/s_wis_input.   CHECK pv_exec_flg IS  INITIAL.   LOOP AT pt_inbound_do INTO ls_inbound_do.     ls_inbound_do_temp-vbeln = ls_inbound_do-vbeln.     ls_inbound_do_temp-posnr = ls_inbound_do-posnr.     ls_inbound_do_temp-lfimg = ls_inbound_do-lfimg.     COLLECT ls_inbound_do_temp INTO lt_inbound_do_temp.   ENDLOOP.   READ TABLE pt_inbound_do INTO ls_inbound_do INDEX 1.   SELECT * FROM lips     INTO CORRESPONDING FIELDS OF TABLE lt_lips     WHERE vbeln = ls_inbound_do-vbeln.   "1.比较订单行项目数和传入信息一致(接口传入行项目3条,订单4条,修改内向交货的行项目为3条(删除未传入的行项目))   "2.比较行项目数量,同理(数量以接口传入数量为主)   LOOP AT lt_lips INTO ls_lips .     READ TABLE lt_inbound_do_temp INTO ls_inbound_do_temp WITH KEY vbeln = ls_lips-vbeln                                                          posnr = ls_lips-posnr .     IF sy-subrc = 0.       IF ls_lips-lfimg <> ls_inbound_do_temp-lfimg.         CLEAR ls_item_data.         ls_item_data-deliv_numb           =  ls_lips-vbeln. "被拆分DN号         ls_item_data-deliv_item           =  ls_lips-posnr.        "被拆分DN Item         ls_item_data-material             =  ls_lips-matnr.        "物料         ls_item_data-dlv_qty              =  ls_inbound_do_temp-lfimg.  "交货数量,         ls_item_data-dlv_qty_imunit       =  ls_inbound_do_temp-lfimg.         ls_item_data-sales_unit           =  ls_lips-vrkme.        "被拆分DN销售位         ls_item_data-sales_unit_iso       =  ls_lips-meins.        "被拆分DN基本位         ls_item_data-fact_unit_nom        =  ls_lips-umvkz.        "销售数量转换成SKU的分子(因子)         ls_item_data-fact_unit_denom      =  ls_lips-umvkn.        "销售数量转换为 SKU 的值(分母)         APPEND ls_item_data TO lt_item_data.         CLEAR ls_item_control.         ls_item_control-deliv_numb        = ls_lips-vbeln.         "被拆分DN号         ls_item_control-deliv_item        = ls_lips-posnr.         "被拆分DN Item         ls_item_control-chg_delqty        = 'X'.                   "数量修改标志         APPEND ls_item_control TO lt_item_control.       ENDIF.     ELSE."如果没有找到对应的行项目,则删除操作       CLEAR:ls_item_data.       ls_item_data-deliv_numb      = ls_lips-vbeln.       ls_item_data-deliv_item      = ls_lips-posnr.       ls_item_data-material        = ls_lips-matnr.       ls_item_data-batch           = ls_lips-charg.       ls_item_data-dlv_qty         = ls_lips-lfimg.       ls_item_data-dlv_qty_imunit  = '0'.       ls_item_data-hieraritem      = ls_lips-posnr.       ls_item_data-usehieritm      = 1.       ls_item_data-fact_unit_nom   = ls_lips-umvkz.       ls_item_data-fact_unit_denom = ls_lips-umvkn.       ls_item_data-base_uom        = ls_lips-meins.       ls_item_data-sales_unit      = ls_lips-vrkme.       APPEND ls_item_data TO lt_item_data.       CLEAR ls_item_data.       ls_item_control-deliv_numb = ls_lips-vbeln.       ls_item_control-deliv_item = ls_lips-posnr.       ls_item_control-del_item   = 'X'.       APPEND ls_item_control TO lt_item_control.     ENDIF.   ENDLOOP.   IF lt_item_data IS NOT INITIAL.     DATA: ls_techn_control TYPE bapidlvcontrol.     ls_header_data-deliv_numb       = ls_inbound_do-vbeln.     ls_header_control-deliv_numb    = ls_inbound_do-vbeln.     ls_delivery                     = ls_inbound_do-vbeln.     ls_techn_control-upd_ind        = 'U'.     CALL FUNCTION 'BAPI_INB_DELIVERY_CHANGE'       EXPORTING         header_data    = ls_header_data         header_control = ls_header_control         delivery       = ls_delivery         techn_control  = ls_techn_control       TABLES         item_data      = lt_item_data         item_control   = lt_item_control         return         = lt_return.     READ TABLE lt_return INTO ls_return WITH KEY  type  = 'E' .     IF sy-subrc = 0.       CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .       LOOP AT lt_return INTO ls_return WHERE type  = 'E'.         CALL FUNCTION 'MESSAGE_TEXT_BUILD'           EXPORTING             msgid               = sy-msgid             msgnr               = sy-msgno             msgv1               = sy-msgv1             msgv2               = sy-msgv2             msgv3               = sy-msgv3             msgv4               = sy-msgv4           IMPORTING             message_text_output = lv_msg.         CLEAR ls_et_return.       ENDLOOP.       ls_et_return-message = '交货'&& ls_lips-vbeln && lv_msg.       ls_et_return-type = 'E'.       ls_et_return-uuid = ls_inbound_do-uuid.       APPEND ls_et_return TO lt_return.     ELSE.       CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'         EXPORTING           wait = 'X'.     ENDIF.   ENDIF. ENDFORM.                    " GR_INBOUND_DO *&---------------------------------------------------------------------* *&      Form  ACTION_TL *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_OUTBOUND_DO  text *      -->P_ET_RETURN  text *----------------------------------------------------------------------* FORM action_tl  TABLES pt_tl STRUCTURE /sc1/s_wis_input                           et_return STRUCTURE /sc1/ftd_mm_bapiret                         et_/sc1/mm_migo_log STRUCTURE /sc1/mm_migo_log.                    .   "BAPI_GOODSMVT_CREATE 用内表 begin   DATA lv_mblnr            TYPE mseg-mblnr.   DATA ls_goodsmvt_header  TYPE bapi2017_gm_head_01.   DATA ls_code             LIKE  bapi2017_gm_code.   DATA ls_goodsmvt_item    TYPE bapi2017_gm_item_create.   DATA lt_goodsmvt_item    TYPE STANDARD TABLE OF  bapi2017_gm_item_create.   DATA lt_return           TYPE STANDARD TABLE OF bapiret2.   DATA ls_return           TYPE bapiret2.   "BAPI_GOODSMVT_CREATE 用内表 end   DATA: ls_tl              TYPE /sc1/s_wis_input.   DATA: ls_et_return       TYPE /sc1/ftd_mm_bapiret.   CHECK pt_tl[] IS NOT INITIAL.   READ TABLE et_return with KEY type = 'E' TRANSPORTING NO FIELDS .   CHECK sy-subrc <> 0.   LOOP AT pt_tl INTO ls_tl.     CLEAR ls_goodsmvt_item.     ls_goodsmvt_item-material  = ls_tl-matnr.     ls_goodsmvt_item-move_type =  '501'.    "无采购订单的收货     ls_goodsmvt_item-mvt_ind   = ''.        "移动标识     ls_goodsmvt_item-entry_qnt = ls_tl-lfimg.     ls_goodsmvt_item-entry_uom = ls_tl-meins.     ls_goodsmvt_item-plant     = ls_tl-werks.     ls_goodsmvt_item-stge_loc  = ls_tl-lgort.     ls_goodsmvt_item-batch     = ls_tl-charg.     ls_goodsmvt_item-prod_date = ls_tl-hsdat."生产日期     ls_goodsmvt_item-expirydate = ls_tl-vfdat."货架寿命到期日     ls_goodsmvt_item-vendrbatch = ls_tl-licha."供应商批次     ls_goodsmvt_item-stck_type  = ls_tl-insmk.     IF ls_goodsmvt_item-entry_qnt IS NOT INITIAL.       APPEND ls_goodsmvt_item TO lt_goodsmvt_item.     ENDIF.   ENDLOOP.   ls_goodsmvt_header-pstng_date  = ls_tl-wadat_ist."凭证中的过帐日期   ls_goodsmvt_header-doc_date    = sy-datum."凭证中的凭证日期   ls_goodsmvt_header-pr_uname    = sy-uname.    "用户名   ls_code-gm_code                = '05'.  "其他   CALL FUNCTION 'BAPI_GOODSMVT_CREATE'     EXPORTING       goodsmvt_header  = ls_goodsmvt_header       goodsmvt_code    = ls_code     IMPORTING       materialdocument = lv_mblnr     TABLES       goodsmvt_item    = lt_goodsmvt_item       return           = lt_return.   READ TABLE lt_return WITH KEY  type = 'E' INTO ls_return.   IF  sy-subrc = 0.     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .     ls_et_return-uuid = ls_tl-uuid.     ls_et_return-type = 'E'.     LOOP AT lt_return INTO ls_return WHERE type = 'E' .       CONCATENATE ls_et_return-message ls_return-message '|' INTO ls_et_return-message.     ENDLOOP.   ELSE.     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'       EXPORTING         wait = 'X'.     ls_et_return-uuid = ls_tl-uuid.     ls_et_return-type = 'S'.     ls_et_return-message = ls_tl-vbeln && '收货成功'.   ENDIF.   APPEND ls_et_return TO et_return.   PERFORM edit_log TABLES pt_tl                           et_return                           et_/sc1/mm_migo_log. ENDFORM.                    " ACTION_TL *&---------------------------------------------------------------------* *&      Form  INBOUND_DO_PICKING *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_DO_TEMP  text *      -->P_ET_RETURN  text *      -->P_ENDIF  text *----------------------------------------------------------------------* FORM do_picking  TABLES pt_inbound_do STRUCTURE /sc1/s_wis_input                             et_return STRUCTURE /sc1/ftd_mm_bapiret                             CHANGING pv_exec_flg      TYPE c.  .   "BAPI用变量 begin   DATA: lt_vbpok    TYPE TABLE OF vbpok,         ls_vbpok    TYPE vbpok,         lt_prott    TYPE TABLE OF prott,         ls_prott    TYPE prott,         ls_vbkok    TYPE vbkok.   "BAPI用变量 end   DATA: lt_lips       TYPE STANDARD TABLE OF lips,         ls_lips       TYPE lips,         ls_inbound_do TYPE /sc1/s_wis_input,         lv_msg        TYPE char255,         ls_et_return  TYPE /sc1/ftd_mm_bapiret.   CHECK pv_exec_flg IS  INITIAL.   READ TABLE pt_inbound_do INTO ls_inbound_do INDEX 1.   SELECT * FROM lips     INTO CORRESPONDING FIELDS OF TABLE lt_lips     WHERE vbeln = ls_inbound_do-vbeln.   LOOP AT lt_lips INTO ls_lips.     ls_vbpok-vbeln_vl = ls_lips-vbeln.     ls_vbpok-posnr_vl = ls_lips-posnr.     ls_vbpok-vbeln    = ls_lips-vgbel.     ls_vbpok-posnn    = ls_lips-vgpos.     ls_vbpok-meins    = ls_lips-meins.     ls_vbpok-vrkme    = ls_lips-vrkme.     ls_vbpok-pikmg    = ls_lips-lfimg.     ls_vbpok-ndifm    = 0.     ls_vbpok-brgew    = ls_lips-brgew.     ls_vbpok-gewei    = ls_lips-gewei.     ls_vbpok-volum    = ls_lips-volum.     ls_vbpok-voleh    = ls_lips-voleh.     ls_vbpok-charg    = ls_lips-charg.     ls_vbpok-matnr    = ls_lips-matnr.     ls_vbpok-orpos    = 0.     APPEND ls_vbpok TO lt_vbpok.     CLEAR: ls_vbpok.   ENDLOOP.   ls_vbkok-vbeln_vl = ls_inbound_do-vbeln.   CALL FUNCTION 'SD_DELIVERY_UPDATE_PICKING'     EXPORTING       vbkok_wa      = ls_vbkok       synchron      = 'X'     TABLES       vbpok_tab     = lt_vbpok       prot          = lt_prott     EXCEPTIONS       error_message = 1.   LOOP AT lt_prott INTO ls_prott WHERE msgty CA 'EA'.     EXIT.   ENDLOOP.   IF sy-subrc <> 0.     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'       EXPORTING         wait = 'X'.   ELSE.     pv_exec_flg = 'E'.     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.     CALL FUNCTION 'FORMAT_MESSAGE'       EXPORTING         id        = ls_prott-msgid         no        = ls_prott-msgno         v1        = ls_prott-msgv1         v2        = ls_prott-msgv2         v3        = ls_prott-msgv3         v4        = ls_prott-msgv4       IMPORTING         msg       = lv_msg       EXCEPTIONS         not_found = 1         OTHERS    = 2.     ls_et_return-uuid    = ls_inbound_do-uuid.     ls_et_return-type    = 'E'.     ls_et_return-message = lv_msg.     APPEND ls_et_return TO et_return.   ENDIF. ENDFORM.                    " INBOUND_DO_PICKING *&---------------------------------------------------------------------* *&      Form  INBOUND_DO_CONFIRM *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_DO_TEMP  text *      -->P_ET_RETURN  text *      <--P_LV_EXEC_FLG  text *----------------------------------------------------------------------* FORM inbound_do_confirm  TABLES pt_inbound_do STRUCTURE /sc1/s_wis_input                                  et_return STRUCTURE /sc1/ftd_mm_bapiret                         CHANGING pv_exec_flg      TYPE c.   "bapi 用变量---begin   DATA: ls_header_data      TYPE bapiibdlvhdrcon,         ls_header_control   TYPE bapiibdlvhdrctrlcon,         lw_delivery         TYPE bapiobdlvhdrcon-deliv_numb,         lt_return           TYPE TABLE OF bapiret2 ,         ls_return           TYPE bapiret2.   "bapi 用变量---end   DATA: ls_inbound_do TYPE /sc1/s_wis_input,         ls_et_return  TYPE /sc1/ftd_mm_bapiret,          lv_msg       TYPE char255.   CHECK pv_exec_flg IS INITIAL.   READ TABLE pt_inbound_do INTO ls_inbound_do INDEX 1.   ls_header_data-deliv_numb     = ls_inbound_do-vbeln."交货号.   ls_header_control-deliv_numb  = ls_inbound_do-vbeln."交货号.   ls_header_control-post_gi_flg = 'X'   .   lw_delivery                   = ls_inbound_do-vbeln."交货号.   CALL FUNCTION 'BAPI_INB_DELIVERY_CONFIRM_DEC'     EXPORTING       header_data    = ls_header_data       header_control = ls_header_control       delivery       = lw_delivery     TABLES       return         = lt_return.   LOOP AT lt_return INTO ls_return WHERE type CA 'EA'.     EXIT.   ENDLOOP.   IF sy-subrc <> 0.     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'       EXPORTING         wait = 'X'.     ls_et_return-uuid    = ls_inbound_do-uuid.     ls_et_return-type    = 'S'.     ls_et_return-message = '收货成功'.     APPEND ls_et_return TO et_return.   ELSE.     pv_exec_flg = 'E'.     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.     CALL FUNCTION 'FORMAT_MESSAGE'       EXPORTING         id        = ls_return-id         no        = ls_return-number         v1        = ls_return-message_v1         v2        = ls_return-message_v2         v3        = ls_return-message_v3         v4        = ls_return-message_v4       IMPORTING         msg       = lv_msg       EXCEPTIONS         not_found = 1         OTHERS    = 2.     ls_et_return-uuid    = ls_inbound_do-uuid.     ls_et_return-type    = 'E'.     ls_et_return-message = lv_msg.     APPEND ls_et_return TO et_return.   ENDIF. ENDFORM.                    " INBOUND_DO_CONFIRM *&---------------------------------------------------------------------* *&      Form  INBOUND_DO_CONFIRM *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_DO_TEMP  text *      -->P_ET_RETURN  text *      <--P_LV_EXEC_FLG  text *----------------------------------------------------------------------* FORM outbound_do_confirm  TABLES pt_inbound_do STRUCTURE /sc1/s_wis_input                                  et_return STRUCTURE /sc1/ftd_mm_bapiret                         CHANGING pv_exec_flg      TYPE c.   "bapi 用变量---begin   DATA: ls_header_data      TYPE bapiobdlvhdrcon,         ls_header_control   TYPE bapiobdlvhdrctrlcon,         lw_delivery         TYPE bapiobdlvhdrcon-deliv_numb,         lt_return           TYPE TABLE OF bapiret2 ,         ls_return           TYPE bapiret2.   "bapi 用变量---end   DATA: ls_inbound_do TYPE /sc1/s_wis_input,         ls_et_return  TYPE /sc1/ftd_mm_bapiret,          lv_msg       TYPE char255.   CHECK pv_exec_flg IS INITIAL.   READ TABLE pt_inbound_do INTO ls_inbound_do INDEX 1.   ls_header_data-deliv_numb     = ls_inbound_do-vbeln."交货号.   ls_header_control-deliv_numb  = ls_inbound_do-vbeln."交货号.   ls_header_control-post_gi_flg = 'X'   .   lw_delivery                   = ls_inbound_do-vbeln."交货号.   CALL FUNCTION 'BAPI_OUTB_DELIVERY_CONFIRM_DEC'     EXPORTING       header_data    = ls_header_data       header_control = ls_header_control       delivery       = lw_delivery     TABLES       return         = lt_return.   LOOP AT lt_return INTO ls_return WHERE type CA 'EA'.     EXIT.   ENDLOOP.   IF sy-subrc <> 0.     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'       EXPORTING         wait = 'X'.     ls_et_return-uuid    = ls_inbound_do-uuid.     ls_et_return-type    = 'S'.     ls_et_return-message = '收货成功'.     APPEND ls_et_return TO et_return.   ELSE.     pv_exec_flg = 'E'.     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.     CALL FUNCTION 'FORMAT_MESSAGE'       EXPORTING         id        = ls_return-id         no        = ls_return-number         v1        = ls_return-message_v1         v2        = ls_return-message_v2         v3        = ls_return-message_v3         v4        = ls_return-message_v4       IMPORTING         msg       = lv_msg       EXCEPTIONS         not_found = 1         OTHERS    = 2.     ls_et_return-uuid    = ls_inbound_do-uuid.     ls_et_return-type    = 'E'.     ls_et_return-message = lv_msg.     APPEND ls_et_return TO et_return.   ENDIF. ENDFORM.                    " INBOUND_DO_CONFIRM *&---------------------------------------------------------------------* *&      Form  SPLIT_DATA *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_IT_INPUT  text *      -->P_LT_PO  text *      -->P_LT_INBOUND_DO  text *      -->P_LT_OUTBOUND_DO  text *      -->P_LT_TL  text *----------------------------------------------------------------------* FORM split_data  TABLES   pt_input      STRUCTURE /sc1/s_wis_input                           pt_po          STRUCTURE /sc1/s_wis_input                           pt_inbound_do  STRUCTURE /sc1/s_wis_input                           pt_outbound_do STRUCTURE /sc1/s_wis_input                           pt_tl          STRUCTURE /sc1/s_wis_input                           pt_ekpo        TYPE ty_t_ekpo.   DATA: ls_input       TYPE /sc1/s_wis_input,         lv_new_flg     TYPE char1,         lv_action      TYPE char15,         lv_matkl       TYPE mara-matkl,         lt_/sc1/mm_migo_log TYPE STANDARD TABLE OF /sc1/mm_migo_log,         ls_/sc1/mm_migo_log TYPE /sc1/mm_migo_log.   FIELD-SYMBOLS: <ls_input> TYPE /sc1/s_wis_input.   "检查此次需要收货是否有已经处理完成的数据,已完成数据不再处理   IF pt_input[] IS NOT INITIAL.     SELECT * FROM  /sc1/mm_migo_log INTO TABLE lt_/sc1/mm_migo_log       FOR ALL ENTRIES IN pt_input       WHERE uuid = pt_input-uuid.   ENDIF.   SORT pt_input BY action vbeln posnr.   LOOP AT pt_input ASSIGNING <ls_input>.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'       EXPORTING         input  = <ls_input>-vbeln       IMPORTING         output = <ls_input>-vbeln.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'       EXPORTING         input  = <ls_input>-posnr       IMPORTING         output = <ls_input>-posnr.     CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'       EXPORTING         input        = <ls_input>-matnr       IMPORTING         output       = <ls_input>-matnr       EXCEPTIONS         length_error = 1         OTHERS       = 2.   ENDLOOP.   LOOP AT pt_input INTO ls_input.     AT NEW vbeln.       lv_new_flg = 'X'.     ENDAT.     IF lv_new_flg = 'X'.       CLEAR:lv_new_flg.       IF ls_input-action = '1'.         SELECT *           FROM ekpo           APPENDING CORRESPONDING FIELDS OF TABLE pt_ekpo           WHERE ebeln = ls_input-vbeln.         IF sy-subrc = 0.           lv_action = 'PO'.         ELSE.           lv_action = 'INBOUND_DO'.         ENDIF.       ELSEIF ls_input-action = '2'.         lv_action = 'OUTBOUND_DO'.       ENDIF.     ENDIF.     "检查此次需要收货是否有已经处理完成的数据,已完成数据不再处理     READ TABLE lt_/sc1/mm_migo_log INTO ls_/sc1/mm_migo_log with KEY uuid = ls_input-uuid.     IF sy-subrc = 0.       CONTINUE.     ENDIF.     SELECT SINGLE matkl FROM mara INTO lv_matkl       WHERE matnr = ls_input-matnr         AND matkl = 'YS000013'."铁笼     IF sy-subrc = 0.       APPEND ls_input TO pt_tl.       CONTINUE.     ENDIF.     CASE lv_action.       WHEN 'PO'.         APPEND ls_input TO pt_po.       WHEN 'INBOUND_DO'.         APPEND ls_input TO pt_inbound_do.       WHEN 'OUTBOUND_DO'.         APPEND ls_input TO pt_outbound_do.       WHEN OTHERS.     ENDCASE.   ENDLOOP. ENDFORM.                    " SPLIT_DATA *&---------------------------------------------------------------------* *&      Form  INBOUND_DO_BATCH_SPLIT *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_DO_TEMP  text *      -->P_ET_RETURN  text *      <--P_LV_EXEC_FLG  text *----------------------------------------------------------------------* FORM inbound_do_batch_split TABLES pt_inbound_do STRUCTURE /sc1/s_wis_input                                  et_return STRUCTURE /sc1/ftd_mm_bapiret                          CHANGING pv_exec_flg      TYPE c.  .   "bapi用变量begin   DATA: ls_header_data     TYPE bapiobdlvhdrchg, "Delivery header         ls_header_control  TYPE bapiobdlvhdrctrlchg, "delivery header control         lt_item_data       TYPE STANDARD TABLE OF  bapiobdlvitemchg,         ls_item_data       TYPE  bapiobdlvitemchg,         lt_item_control    TYPE STANDARD TABLE OF bapiobdlvitemctrlchg,         ls_item_control    TYPE bapiobdlvitemctrlchg,         lt_item_data_spl   TYPE STANDARD TABLE OF /spe/bapiobdlvitemchg,         ls_item_data_spl   TYPE /spe/bapiobdlvitemchg,         ls_techn_control   TYPE bapidlvcontrol,         lt_return          TYPE STANDARD TABLE OF bapiret2,         ls_return          type bapiret2.   DATA: lv_message         TYPE c LENGTH 220.   "bapi用变量end   DATA: ls_inbound_do TYPE /sc1/s_wis_input,         lt_lips            TYPE STANDARD TABLE OF lips,         ls_lips            TYPE lips,         ls_et_teturn       TYPE /sc1/ftd_mm_bapiret,         lv_vbeln_batch     TYPE lips-vbeln..   READ TABLE pt_inbound_do INTO ls_inbound_do INDEX 1.   SELECT *     FROM lips     INTO TABLE lt_lips    WHERE vbeln = ls_inbound_do-vbeln.   lv_vbeln_batch = '900000'.   LOOP AT pt_inbound_do INTO ls_inbound_do.     READ TABLE lt_lips INTO ls_lips WITH KEY vbeln = ls_inbound_do-vbeln                                              posnr = ls_inbound_do-posnr.     "批次拆分出来的新行     CLEAR: ls_item_data.     lv_vbeln_batch = lv_vbeln_batch + 1.     ls_item_data-deliv_numb = ls_inbound_do-vbeln..     ls_item_data-deliv_item =  lv_vbeln_batch.     ls_item_data-hieraritem = ls_inbound_do-posnr.        "项目层次中的高级项目-批次拆分字段     ls_item_data-usehieritm = '1'.                        "使用层次项目-批次拆分字段     ls_item_data-material   = ls_inbound_do-matnr.     ls_item_data-batch      = ls_inbound_do-charg.     ls_item_data-dlv_qty    = ls_inbound_do-lfimg.     ls_item_data-fact_unit_nom   = ls_lips-umvkz.     ls_item_data-fact_unit_denom = ls_lips-umvkn.     APPEND ls_item_data TO lt_item_data.     "批次拆分出来的新行     CLEAR: ls_item_control.     ls_item_control-deliv_numb = ls_inbound_do-vbeln.     ls_item_control-deliv_item = lv_vbeln_batch.     ls_item_control-chg_delqty = 'X'.     APPEND ls_item_control TO lt_item_control.     CLEAR: ls_item_control.     ls_item_data_spl-deliv_numb = ls_inbound_do-vbeln.     ls_item_data_spl-deliv_item = lv_vbeln_batch.     ls_item_data_spl-stge_loc   = ls_inbound_do-lgort."库存地点     APPEND ls_item_data_spl TO lt_item_data_spl.   ENDLOOP.   ls_header_data-deliv_numb    = ls_inbound_do-vbeln.   ls_header_control-deliv_numb = ls_inbound_do-vbeln.   ls_techn_control-upd_ind     = 'U'.   CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'     EXPORTING       header_data    = ls_header_data       header_control = ls_header_control       delivery       = ls_inbound_do-vbeln       techn_control  = ls_techn_control     TABLES       item_data      = lt_item_data       item_control   = lt_item_control       item_data_spl  = lt_item_data_spl       return         = lt_return.   LOOP AT lt_return INTO ls_return WHERE type CA 'EA'.     EXIT.   ENDLOOP.   IF sy-subrc <> 0.     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'       EXPORTING         wait = 'X'.   "更改库存地点   CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'     EXPORTING       header_data    = ls_header_data       header_control = ls_header_control       delivery       = ls_inbound_do-vbeln       techn_control  = ls_techn_control     TABLES       item_data      = lt_item_data       item_control   = lt_item_control       item_data_spl  = lt_item_data_spl       return         = lt_return.   ELSE.     pv_exec_flg = 'E'.     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.     CALL FUNCTION 'FORMAT_MESSAGE'       EXPORTING         id        = ls_return-id         no        = ls_return-number         v1        = ls_return-message_v1         v2        = ls_return-message_v2         v3        = ls_return-message_v3         v4        = ls_return-message_v4       IMPORTING         msg       = lv_message       EXCEPTIONS         not_found = 1         OTHERS    = 2.     ls_et_teturn-uuid = ls_inbound_do-uuid.     ls_et_teturn-type = 'E'.     ls_et_teturn-message = lv_message.     APPEND ls_et_teturn TO et_return.   ENDIF. ENDFORM.                    " INBOUND_DO_BATCH_SPLIT 帮我分析一下,让你写出这样的代码,你作为顾问应该提怎么样的需求,总结一下
07-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值