服务订单SO创建

FUNCTION Z_SD_SALESORDER_CREATE.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(IM_HEADER) LIKE  VBAK STRUCTURE  VBAK
*"  EXPORTING
*"     VALUE(EX_SALESORDER) TYPE  VBELN
*"  TABLES
*"      IT_ITEM STRUCTURE  VBAP
*"      IT_RETURN STRUCTURE  BAPIRET2 OPTIONAL
*"----------------------------------------------------------------------

  PERFORM FRM_INIT_SALESORDER_HEADER USING IM_HEADER.

  PERFORM FRM_INIT_SALESORDER_ITEM TABLES IT_ITEM USING IM_HEADER.

  PERFORM FRM_INIT_SOPARTNER  USING IM_HEADER-KUNNR.

  PERFORM FRM_INIT_SALESORDER_CONDITION TABLES IT_ITEM.

  PERFORM FRM_CREATE_SALESORDER CHANGING EX_SALESORDER.

*  APPEND LINES OF GT_RETURN TO IT_RETURN.

  IT_RETURN[] = GT_RETURN[].
ENDFUNCTION.

 

 

FORM FRM_INIT_SALESORDER_HEADER  USING P_HEADER STRUCTURE VBAK.

  CLEAR GS_SALESORDER_HEADER.
* Mandatory entries:
  GS_SALESORDER_HEADER-DOC_TYPE = 'ZRWF'."入网费

  GS_SALESORDER_HEADER-SALES_ORG = '8001'.   "Sales organization
  GS_SALESORDER_HEADER-DISTR_CHAN = '20'.    "Distribution channel
  GS_SALESORDER_HEADER-DIVISION = '00'.    " Division

* Optional entries:
  GS_SALESORDER_HEADER-DOC_DATE = SY-DATUM. "Document date     (订单日期)
  GS_SALESORDER_HEADER-REF_1 = P_HEADER-IHREZ. "Customer PO No.  (POS订单号码)
*  GS_SALESORDER_HEADER-ORD_REASON = U_HEADER-ZDDLX. "Order reason.  (订单类型)
*  GS_SALESORDER_HEADER-TELEPHONE = U_HEADER-ZLXDH. "Telephone Number.  (联系电话)
*  GS_SALESORDER_HEADER-NAME = U_HEADER-ZLSR.      "Name of order.  (联系人)
**  GS_SALESORDER_HEADER-DOC_DATE = SY-DATUM.      "Name of order.  (联系人)

* Change index
  GS_SALESORDER_HEADERX-UPDATEFLAG = 'I'.   "Sales document type
  GS_SALESORDER_HEADERX-DOC_TYPE = 'X'.   "Sales document type
  GS_SALESORDER_HEADERX-SALES_ORG = 'X'.   "Sales organization
  GS_SALESORDER_HEADERX-DISTR_CHAN = 'X'.    "Distribution channel
  GS_SALESORDER_HEADERX-DIVISION = 'X'.    " Division

  GS_SALESORDER_HEADERX-DOC_DATE = 'X'. "Document date     (订单日期)
  GS_SALESORDER_HEADERX-REF_1 = 'X'. "Customer PO No.  (POS订单号码)
*  GS_SALESORDER_HEADERX-ORD_REASON = 'X'. "Order reason.  (订单类型)
*  GS_SALESORDER_HEADERX-TELEPHONE = 'X'. "Telephone Number.  (联系电话)
*  GS_SALESORDER_HEADERX-NAME = 'X'.      "Name of order.  (联系人)
*  GS_SALESORDER_HEADERX-DOC_DATE = 'X'.      "Name of order.  (联系人)

  CLEAR GS_LOGIC_SWITCH.
*  GS_LOGIC_SWITCH-COND_HANDL = 'X'.
  GS_LOGIC_SWITCH-PRICING = 'G'.
ENDFORM.                    " FRM_INIT_SALESORDER_HEADER

 

 

FORM FRM_INIT_SALESORDER_ITEM  TABLES  IT_ITEM STRUCTURE VBAP
                               USING   P_HEADER STRUCTURE VBAK.
  DATA : LS_ITEM  TYPE VBAP,
         LV_MATNR TYPE MATNR,
         LV_POSNR TYPE POSNR.

  CLEAR : GS_SALESORDER_ITEM,
          GT_SALESORDER_ITEM,
          GT_SALESORDER_CONDITIONS,
          GT_SALESORDER_CONDITIONX.

  CLEAR : GS_SALESORDER_SCHLINE,
          GT_SALESORDER_SCHLINE,
          GS_SALESORDER_SCHLINEX,
          GT_SALESORDER_SCHLINEX.

  CLEAR LV_POSNR.

  LOOP AT IT_ITEM INTO LS_ITEM.
    ADD 10 TO LV_POSNR.
*** Items
*   Convert Article no. (商品款号)
    PERFORM FRM_CONVERT_ARTICLE USING LS_ITEM-MATNR CHANGING LV_MATNR.

    GS_SALESORDER_ITEM-ITM_NUMBER = LV_POSNR."'10'. "Item (行项目号)
    GS_SALESORDER_ITEM-MATERIAL = LV_MATNR."70  ”Article  (商品款号)
    GS_SALESORDER_ITEM-BATCH = LS_ITEM-CHARG."70  ”Article  (商品款号)
    GS_SALESORDER_ITEM-PLANT = LS_ITEM-WERKS."P_HEADER-WERKS.  "Site ()
    GS_SALESORDER_ITEM-STORE_LOC = LS_ITEM-LGORT."Storage location
    GS_SALESORDER_ITEM-TARGET_QTY = '1'."Target quantity in sales units (商品件数)
*    gs_salesorder_item-target_qu = 'ST'.
    APPEND GS_SALESORDER_ITEM TO GT_SALESORDER_ITEM.

    GS_SALESORDER_ITEMX-UPDATEFLAG = 'I'.
    GS_SALESORDER_ITEMX-ITM_NUMBER = LV_POSNR.
    GS_SALESORDER_ITEMX-MATERIAL = 'X'.
    GS_SALESORDER_ITEMX-BATCH  = 'X'.
    GS_SALESORDER_ITEMX-PLANT = 'X'.
    GS_SALESORDER_ITEMX-STORE_LOC = 'X'.
*    gs_salesorder_itemx-sales_unit = 'X'.
    GS_SALESORDER_ITEMX-TARGET_QTY = 'X'.
*    gs_salesorder_itemx-target_qu = 'X'.
    APPEND GS_SALESORDER_ITEMX TO GT_SALESORDER_ITEMX.

*** Scheuld line
    CLEAR GS_SALESORDER_SCHLINE.
    GS_SALESORDER_SCHLINE-ITM_NUMBER = LV_POSNR.
    GS_SALESORDER_SCHLINE-SCHED_LINE = '0001'.
    GS_SALESORDER_SCHLINE-REQ_QTY = '1'.
*    gs_salesorder_schline-req_date = '20140830'.
    APPEND GS_SALESORDER_SCHLINE TO GT_SALESORDER_SCHLINE.

    CLEAR GS_SALESORDER_SCHLINEX.
    GS_SALESORDER_SCHLINEX-ITM_NUMBER = LV_POSNR.
    GS_SALESORDER_SCHLINEX-SCHED_LINE = '0001'.
    GS_SALESORDER_SCHLINEX-UPDATEFLAG = 'I'.
*    gs_salesorder_schlinex-req_date = 'X'.
    GS_SALESORDER_SCHLINEX-REQ_QTY = 'X'.
    APPEND GS_SALESORDER_SCHLINEX TO GT_SALESORDER_SCHLINEX.

* Conditions
    CLEAR GS_SALESORDER_CONDITIONS.
    GS_SALESORDER_CONDITIONS-ITM_NUMBER = LV_POSNR.
*    GS_SALESORDER_CONDITIONS-COND_COUNT = '10'.
    GS_SALESORDER_CONDITIONS-COND_TYPE = 'ZF01'.
    GS_SALESORDER_CONDITIONS-COND_VALUE = LS_ITEM-NETPR.
*    GS_SALESORDER_CONDITIONS-CONDVALUE = '10'.
    GS_SALESORDER_CONDITIONS-CURRENCY = 'CNY'.
    APPEND GS_SALESORDER_CONDITIONS TO GT_SALESORDER_CONDITIONS.

    CLEAR GS_SALESORDER_CONDITIONX.
    GS_SALESORDER_CONDITIONX-ITM_NUMBER = LV_POSNR.
*    GS_SALESORDER_CONDITIONS-COND_COUNT = '10'.
    GS_SALESORDER_CONDITIONX-COND_TYPE = 'ZF01'.
    GS_SALESORDER_CONDITIONX-UPDATEFLAG = 'I'.
    GS_SALESORDER_CONDITIONX-COND_VALUE = 'X'.
*  GS_SALESORDER_CONDITIONX-CONDVALUE = 'X'.
    GS_SALESORDER_CONDITIONX-CURRENCY = 'X'.
    APPEND GS_SALESORDER_CONDITIONX TO GT_SALESORDER_CONDITIONX.

  ENDLOOP.

ENDFORM.                    " FRM_INIT_SALESORDER_ITEM

 

 

FORM FRM_INIT_SOPARTNER  USING    P_CUSTOMER.
  DATA : LV_KUNNR TYPE KUNNR.

* Convert customer no. to internal no.(客户编码)
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  = P_CUSTOMER
    IMPORTING
      OUTPUT = LV_KUNNR.

* WE Ship to , AG Sold to
  CLEAR GS_SALESORDER_PARTNER.
*  gs_salesorder_partner-itm_number = '10'."
  GS_SALESORDER_PARTNER-PARTN_ROLE = 'WE'."SP
  GS_SALESORDER_PARTNER-PARTN_NUMB = LV_KUNNR.  "(客户编码)
*  gs_salesorder_partner-name = u_header-zkhmc.  "Name (客户名称)
  APPEND GS_SALESORDER_PARTNER TO GT_SALESORDER_PARTNER.
ENDFORM.                    " FRM_INIT_SOPARTNER

 

 

FORM FRM_INIT_SALESORDER_CONDITION  TABLES IT_ITEM STRUCTURE VBAP.

ENDFORM.                    " FRM_INIT_SALESORDER_CONDITION

 

 

FORM FRM_CREATE_SALESORDER  CHANGING P_SALESORDER.

  DATA : LV_SALESORDER TYPE BAPIVBELN-VBELN,
         LV_ERROR.

  REFRESH GT_RETURN.

  CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
    EXPORTING
      ORDER_HEADER_IN      = GS_SALESORDER_HEADER
      ORDER_HEADER_INX     = GS_SALESORDER_HEADERX
      LOGIC_SWITCH         = GS_LOGIC_SWITCH
    IMPORTING
      SALESDOCUMENT        = LV_SALESORDER
    TABLES
      RETURN               = GT_RETURN
      ORDER_ITEMS_IN       = GT_SALESORDER_ITEM
      ORDER_ITEMS_INX      = GT_SALESORDER_ITEMX
      ORDER_PARTNERS       = GT_SALESORDER_PARTNER
      ORDER_SCHEDULES_IN   = GT_SALESORDER_SCHLINE
      ORDER_SCHEDULES_INX  = GT_SALESORDER_SCHLINEX
      ORDER_CONDITIONS_IN  = GT_SALESORDER_CONDITIONS
      ORDER_CONDITIONS_INX = GT_SALESORDER_CONDITIONX.

  LOOP AT GT_RETURN INTO GS_RETURN WHERE TYPE = 'E' OR
                                         TYPE = 'X' OR
                                         TYPE = 'A'.
    EXIT.
  ENDLOOP.

  IF SY-SUBRC EQ 0.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = 'X'.

    P_SALESORDER = LV_SALESORDER.
  ENDIF.

  REFRESH : GT_SALESORDER_ITEM,
            GT_SALESORDER_ITEMX,
            GT_SALESORDER_PARTNER,
            GT_SALESORDER_SCHLINE,
            GT_SALESORDER_SCHLINEX,
            GT_SALESORDER_CONDITIONS,
            GT_SALESORDER_CONDITIONX.
ENDFORM.                    " FRM_CREATE_SALESORDER

 

转载于:https://www.cnblogs.com/sapSB/p/5771709.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值