SAP SD 销售订单批导

18 篇文章 1 订阅

销售订单创建BAPI:BAPI_SALESORDER_CREATEFROMDAT2

退货销售订单创建BAPI: BAPI_CUSTOMERRETURN_CREATE

  DATA:
    LS_ORDER_HEADER     TYPE  BAPISDHD1,
    LV_VBELN            TYPE  BAPIVBELN-VBELN,
    LS_RETURN           TYPE  BAPIRET2,
    LT_RETURN           TYPE  STANDARD TABLE OF BAPIRET2,
    LT_ORDER_ITEM       TYPE  STANDARD TABLE OF BAPISDITM,
    LS_ORDER_ITEM       TYPE  BAPISDITM,
    LT_ORDER_PARTNERS   TYPE  STANDARD TABLE OF BAPIPARNR,
    LS_ORDER_PARTNERS   TYPE  BAPIPARNR,
    LT_ORDER_SCHEDULES  TYPE  STANDARD TABLE OF BAPISCHDL,
    LS_ORDER_SCHEDULES  TYPE  BAPISCHDL,
    LT_ORDER_CONDITIONS TYPE  STANDARD TABLE OF BAPICOND,
    LS_ORDER_CONDITIONS TYPE  BAPICOND.

  DATA: LT_TEMP          TYPE STANDARD TABLE OF ZSDS_SALES_ORDER_ALV.
  DATA: LS_TEMP          TYPE ZSDS_SALES_ORDER_ALV.
  DATA: LV_POSNR         TYPE VBAP-POSNR.
  DATA: LV_MESSAGE       TYPE STRING .
  DATA: LV_ALL_MESSAGE   TYPE STRING .
  DATA: LV_FLAG          TYPE CHAR01.





LT_TEMP = GT_DATA.
SORT LT_TEMP BY ZINDEX.
DELETE ADJACENT DUPLICATES FROM LT_TEMP COMPARING ZINDEX.  "这里是根据销售订单去重

LOOP AT LT_TEMP INTO LS_TEMP WHERE ICONS NE ICON_GREEN_LIGHT.
    CLEAR:LS_ORDER_HEADER,LS_ORDER_HEADER,LT_RETURN,LS_RETURN,LV_VBELN,LT_ORDER_ITEM,LS_ORDER_ITEM
    ,LV_MESSAGE,LV_ALL_MESSAGE,LV_VBELN,LV_FLAG,LS_ORDER_PARTNERS,LT_ORDER_PARTNERS,LS_ORDER_SCHEDULES,LT_ORDER_SCHEDULES,
    LS_ORDER_CONDITIONS,LT_ORDER_CONDITIONS.
    "抬头-数据
    LS_ORDER_HEADER-DOC_TYPE    = LS_TEMP-AUART.       "订单类型
    LS_ORDER_HEADER-SALES_ORG   = LS_TEMP-VKORG.       "销售组织
    LS_ORDER_HEADER-DISTR_CHAN  = LS_TEMP-VTWEG.       "分销渠道
    IF LS_TEMP-SPART = '0'.
      LS_ORDER_HEADER-DIVISION    = '00'.       "产品组
    ENDIF.

    LS_ORDER_HEADER-PURCH_NO_C  = LS_TEMP-BSTDK.       "客户的采购订单号
    LS_ORDER_HEADER-PURCH_DATE  = LS_TEMP-BSTNK.       "Customer Reference Date
    LS_ORDER_HEADER-PURCH_DATE  = LS_TEMP-BSTDK.       "Customer Reference Date
    LS_ORDER_HEADER-REQ_DATE_H  = LS_TEMP-VDATU.       "Requested Delivery Date
    LS_ORDER_HEADER-DOC_DATE    = LS_TEMP-AUDAT .      "Document Date (Date Received/Sent)
    LS_ORDER_HEADER-PMNTTRMS    = LS_TEMP-ZTERM .      "Terms of payment key
    LS_ORDER_HEADER-INCOTERMS1  = LS_TEMP-INCOV .      "Incoterms
    LS_ORDER_HEADER-INCOTERMS2L = LS_TEMP-INCO2_L .    "Incoterms Location 1
    LS_ORDER_HEADER-SHIP_COND   = LS_TEMP-VSBED .      "Shipping Conditions
    LS_ORDER_HEADER-SHIP_TYPE   = LS_TEMP-VSART .      "Shipping Type
    LS_ORDER_HEADER-CURRENCY    = LS_TEMP-WAERS .      "货币


    LOOP AT GT_DATA INTO GS_DATA WHERE ZINDEX = LS_TEMP-ZINDEX AND ICONS NE ICON_GREEN_LIGHT.
      CLEAR:LS_ORDER_ITEM.
      LV_POSNR = LV_POSNR + 10.
*销售订单行项目
      LS_ORDER_ITEM-ITM_NUMBER = LV_POSNR.
      LS_ORDER_ITEM-MATERIAL   = GS_DATA-MATNR.
      LS_ORDER_ITEM-PLANT      = GS_DATA-WERKS.
      LS_ORDER_ITEM-SALES_UNIT = GS_DATA-MEINS.
      LS_ORDER_ITEM-STORE_LOC  = GS_DATA-LGORT.
      APPEND LS_ORDER_ITEM TO LT_ORDER_ITEM.


*交货计划行
      LS_ORDER_SCHEDULES-ITM_NUMBER = LV_POSNR.
      LS_ORDER_SCHEDULES-REQ_QTY    = GS_DATA-KWMENG.
      APPEND LS_ORDER_SCHEDULES TO LT_ORDER_SCHEDULES.


*定价条件
      IF GS_DATA-KBETR IS NOT INITIAL.

        LS_ORDER_CONDITIONS-ITM_NUMBER = LV_POSNR.   "itm_number
        LS_ORDER_CONDITIONS-COND_TYPE  = GS_DATA-KSCHL .             "定价条件
        LS_ORDER_CONDITIONS-COND_VALUE = GS_DATA-KBETR.
        LS_ORDER_CONDITIONS-CURRENCY   = GS_DATA-WAERS.
        LS_ORDER_CONDITIONS-COND_UNIT  = GS_DATA-MEINS.
        APPEND LS_ORDER_CONDITIONS TO LT_ORDER_CONDITIONS.

      ENDIF.

      IF GS_DATA-KBETR1 IS NOT INITIAL .
        LS_ORDER_CONDITIONS-ITM_NUMBER = LV_POSNR.   "itm_number
        LS_ORDER_CONDITIONS-COND_TYPE  = GS_DATA-KSCHL1 .             "定价条件
        LS_ORDER_CONDITIONS-COND_VALUE = GS_DATA-KBETR1.
        LS_ORDER_CONDITIONS-CURRENCY   = GS_DATA-WAERS.     "
        LS_ORDER_CONDITIONS-COND_UNIT   = GS_DATA-MEINS.
        APPEND LS_ORDER_CONDITIONS TO LT_ORDER_CONDITIONS.


      ENDIF.

      IF GS_DATA-KBETR2 IS NOT INITIAL .
        LS_ORDER_CONDITIONS-ITM_NUMBER = LV_POSNR.   "itm_number
        LS_ORDER_CONDITIONS-COND_TYPE  = GS_DATA-KSCHL2 .             "定价条件
        LS_ORDER_CONDITIONS-COND_VALUE = GS_DATA-KBETR2.
        LS_ORDER_CONDITIONS-CURRENCY   = GS_DATA-WAERS.
        LS_ORDER_CONDITIONS-COND_UNIT   = GS_DATA-MEINS.   "
        APPEND LS_ORDER_CONDITIONS TO LT_ORDER_CONDITIONS.

      ENDIF.

      IF GS_DATA-KBETR3 IS NOT INITIAL .
        LS_ORDER_CONDITIONS-ITM_NUMBER = LV_POSNR.   "itm_number
        LS_ORDER_CONDITIONS-COND_TYPE  = GS_DATA-KSCHL3 .             "定价条件
        LS_ORDER_CONDITIONS-COND_VALUE = GS_DATA-KBETR3.
        LS_ORDER_CONDITIONS-CURRENCY   = GS_DATA-WAERS.
        LS_ORDER_CONDITIONS-COND_UNIT   = GS_DATA-MEINS.
        APPEND LS_ORDER_CONDITIONS TO LT_ORDER_CONDITIONS.


      ENDIF.

      IF GS_DATA-KBETR4 IS NOT INITIAL .
        LS_ORDER_CONDITIONS-ITM_NUMBER = LV_POSNR.   "itm_number
        LS_ORDER_CONDITIONS-COND_TYPE  = GS_DATA-KSCHL4 .             "定价条件
        LS_ORDER_CONDITIONS-COND_VALUE = GS_DATA-KBETR4.
        LS_ORDER_CONDITIONS-CURRENCY   = GS_DATA-WAERS.
        LS_ORDER_CONDITIONS-COND_UNIT  = '%'.
        APPEND LS_ORDER_CONDITIONS TO LT_ORDER_CONDITIONS.


      ENDIF.

      IF GS_DATA-KBETR5 IS NOT INITIAL .
        LS_ORDER_CONDITIONS-ITM_NUMBER = LV_POSNR.   "itm_number
        LS_ORDER_CONDITIONS-COND_TYPE  = GS_DATA-KSCHL5 .             "定价条件
        LS_ORDER_CONDITIONS-COND_VALUE = GS_DATA-KBETR5.
        LS_ORDER_CONDITIONS-CURRENCY   = GS_DATA-WAERS.
        LS_ORDER_CONDITIONS-COND_UNIT   = GS_DATA-MEINS.
        APPEND LS_ORDER_CONDITIONS TO LT_ORDER_CONDITIONS.

      ENDIF.

    ENDLOOP.

* PARTENER
    LS_ORDER_PARTNERS-PARTN_ROLE =  'AG' .
    LS_ORDER_PARTNERS-PARTN_NUMB = GS_DATA-KUNAG.
    APPEND  LS_ORDER_PARTNERS TO LT_ORDER_PARTNERS.

    LS_ORDER_PARTNERS-PARTN_ROLE =  'RE' .
    LS_ORDER_PARTNERS-PARTN_NUMB = GS_DATA-KUNAG.
    APPEND  LS_ORDER_PARTNERS TO LT_ORDER_PARTNERS.

    LS_ORDER_PARTNERS-PARTN_ROLE =  'RG' .
    LS_ORDER_PARTNERS-PARTN_NUMB = GS_DATA-KUNAG.
    APPEND  LS_ORDER_PARTNERS TO LT_ORDER_PARTNERS.

    LS_ORDER_PARTNERS-PARTN_ROLE =  'WE' .
    LS_ORDER_PARTNERS-PARTN_NUMB = GS_DATA-KUNAG.
    APPEND  LS_ORDER_PARTNERS TO LT_ORDER_PARTNERS.

    IF GS_DATA-PARVW IS NOT INITIAL .
      LS_ORDER_PARTNERS-PARTN_ROLE =  GS_DATA-PARVW .
      LS_ORDER_PARTNERS-PARTN_NUMB = GS_DATA-PATNR.
      APPEND  LS_ORDER_PARTNERS TO LT_ORDER_PARTNERS.
    ENDIF.

    IF LS_TEMP-AUART = 'ZRE2' OR LS_TEMP-AUART = 'ZRP2'.
      CALL FUNCTION 'BAPI_CUSTOMERRETURN_CREATE'
        EXPORTING
          RETURN_HEADER_IN     = LS_ORDER_HEADER
        IMPORTING
          SALESDOCUMENT        = LV_VBELN
        TABLES
          RETURN               = LT_RETURN
          RETURN_ITEMS_IN      = LT_ORDER_ITEM
          RETURN_CONDITIONS_IN = LT_ORDER_CONDITIONS
          RETURN_PARTNERS      = LT_ORDER_PARTNERS
          RETURN_SCHEDULES_IN  = LT_ORDER_SCHEDULES
*         ORDER_TEXT           = LT_ORDER_TEXT
*         PARTNERADDRESSES     = PARTNERADDRESSES
        .
      LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE CA 'EAX'.
        CALL FUNCTION 'MESSAGE_TEXT_BUILD'
          EXPORTING
            MSGID               = LS_RETURN-ID
            MSGNR               = LS_RETURN-NUMBER
            MSGV1               = LS_RETURN-MESSAGE_V1
            MSGV2               = LS_RETURN-MESSAGE_V2
            MSGV3               = LS_RETURN-MESSAGE_V3
            MSGV4               = LS_RETURN-MESSAGE_V4
          IMPORTING
            MESSAGE_TEXT_OUTPUT = LV_MESSAGE.
        CONCATENATE LV_ALL_MESSAGE LV_MESSAGE INTO LV_ALL_MESSAGE .
        LV_FLAG = 'X' .
      ENDLOOP.
    ELSE.
      CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
        EXPORTING
          ORDER_HEADER_IN     = LS_ORDER_HEADER
        IMPORTING
          SALESDOCUMENT       = LV_VBELN
        TABLES
          RETURN              = LT_RETURN
          ORDER_ITEMS_IN      = LT_ORDER_ITEM
          ORDER_CONDITIONS_IN = LT_ORDER_CONDITIONS
          ORDER_PARTNERS      = LT_ORDER_PARTNERS
          ORDER_SCHEDULES_IN  = LT_ORDER_SCHEDULES
*         ORDER_TEXT          = LT_ORDER_TEXT
*         PARTNERADDRESSES    = PARTNERADDRESSES
        .
      LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE CA 'EAX'.
        CALL FUNCTION 'MESSAGE_TEXT_BUILD'
          EXPORTING
            MSGID               = LS_RETURN-ID
            MSGNR               = LS_RETURN-NUMBER
            MSGV1               = LS_RETURN-MESSAGE_V1
            MSGV2               = LS_RETURN-MESSAGE_V2
            MSGV3               = LS_RETURN-MESSAGE_V3
            MSGV4               = LS_RETURN-MESSAGE_V4
          IMPORTING
            MESSAGE_TEXT_OUTPUT = LV_MESSAGE.
        CONCATENATE LV_ALL_MESSAGE LV_MESSAGE INTO LV_ALL_MESSAGE .
        LV_FLAG = 'X' .
      ENDLOOP.

    ENDIF.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值