ABAP VA31创建销售计划协议

发现VA31和VA01使用相同程序SAPMV45A,所以也是使用相同底层bapi:SD_SALESDOCUMENT_CREATE和SD_SALESDOCUMENT_CHANGE


   DATA:
    ls_header  TYPE bapisdhd1,  "表头
    ls_headerx TYPE bapisdhd1x, "表头标志
    ls_item    TYPE bapisditm,  "行项目
    ls_itemx   TYPE bapisditmx,
    ls_partner TYPE bapiparnr,
    lt_partner TYPE STANDARD TABLE OF bapiparnr,
    lt_item    TYPE STANDARD TABLE OF bapisditm,
    lt_itemx   TYPE STANDARD TABLE OF bapisditmx,
    lt_return  TYPE STANDARD TABLE OF bapiret2,
    ls_output  LIKE bapisdhd,
    lv_posnr   TYPE posnr_va,
    lv_msg     TYPE bapi_msg.

  READ TABLE gt_excel1 TRANSPORTING NO FIELDS WITH KEY icon = gc_red.
  IF sy-subrc EQ 0.
    MESSAGE '存在报错,请检查' TYPE 'S' DISPLAY LIKE 'E'.
    EXIT.
  ENDIF.

  " 按照客户合并创建
  LOOP AT gt_excel1 INTO DATA(ls_group) WHERE icon NE gc_green AND flag = '' GROUP BY ( kunnr = ls_group-kunnr ).

* Header
    CLEAR:ls_header,ls_headerx.
    ls_header-doc_type   = ls_group-auart.
*    ls_header-ct_valid_f = sy-datum.
    ls_header-sales_org  = p_vkorg.
    ls_header-distr_chan = ls_group-vtweg.  "分销渠道
    ls_header-division   = '10'.  "产品组
    ls_header-purch_no_c = ls_group-auart.

    ls_headerx-doc_type   = 'X'.
*    ls_headerx-ct_valid_f = 'X'.
    ls_headerx-sales_org  = 'X'.
    ls_headerx-purch_no_c = 'X'.
    ls_headerx-distr_chan = 'X'.  "分销渠道
    ls_headerx-division   = 'X'.  "产品组
    ls_headerx-updateflag = 'I'.

    CLEAR:lv_posnr,lt_item,lt_itemx,lt_partner.
    LOOP AT GROUP ls_group ASSIGNING FIELD-SYMBOL(<fs_excel>).

      CLEAR ls_item.
      lv_posnr = lv_posnr + 10.
      <fs_excel>-posnr = lv_posnr.
      ls_item-itm_number = lv_posnr.
      ls_item-material   = <fs_excel>-matnr.   "物料
      ls_item-cust_mat35 = <fs_excel>-maktx.
      APPEND ls_item TO lt_item.

      ls_itemx-itm_number = lv_posnr.
      ls_itemx-material   = 'X'.
      ls_itemx-cust_mat35 = 'X'.
      ls_itemx-updateflag = 'I'.
      APPEND ls_itemx TO lt_itemx.
      CLEAR ls_itemx.

    ENDLOOP.

    "销售合作伙伴
    ls_partner-partn_role = 'AG'."售达方
    ls_partner-partn_numb = ls_group-kunnr."售达方编号
    APPEND ls_partner TO lt_partner.
    CLEAR ls_partner.

    ls_partner-partn_role = 'WE'."送达方
    ls_partner-partn_numb = ls_group-kunnr."送达方编号
    APPEND ls_partner TO lt_partner.
    CLEAR ls_partner.

    CLEAR:lt_return,ls_output.
    CALL FUNCTION 'SD_SALESDOCUMENT_CREATE'
      EXPORTING
*       SALESDOCUMENT    =
        sales_header_in  = ls_header
        sales_header_inx = ls_headerx
*       SENDER           =
*       BINARY_RELATIONSHIPTYPE       = ' '
*       INT_NUMBER_ASSIGNMENT         = ' '
*       BEHAVE_WHEN_ERROR   = ' '
*       LOGIC_SWITCH     = ' '
        business_object  = 'BUS2035'
*       TESTRUN          =
*       CONVERT_PARVW_AUART = ' '
*       STATUS_BUFFER_REFRESH         = 'X'
      IMPORTING
*       SALESDOCUMENT_EX =
        sales_header_out = ls_output
*       SALES_HEADER_STATUS =
      TABLES
        return           = lt_return
        sales_items_in   = lt_item
        sales_items_inx  = lt_itemx
        sales_partners   = lt_partner.

    CLEAR lv_msg.
    LOOP AT lt_return INTO DATA(ls_return) WHERE type CA 'AEX'.
      PERFORM frm_message_set USING ls_return-message
                      CHANGING lv_msg.
    ENDLOOP.
    IF sy-subrc NE 0.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
      gs_excel1-vbeln = ls_output-doc_number.
      gs_excel1-icon = gc_green.
      gs_excel1-msg = '创建成功'.
      MODIFY gt_excel1 FROM gs_excel1 TRANSPORTING icon msg vbeln WHERE kunnr = ls_group-kunnr.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
      gs_excel1-icon = gc_red.
      gs_excel1-msg = lv_msg.
      MODIFY gt_excel1 FROM gs_excel1 TRANSPORTING icon msg WHERE kunnr = ls_group-kunnr.
    ENDIF.

  ENDLOOP.

  " 存在的则新增行
  LOOP AT gt_excel1 INTO DATA(ls_excel1) WHERE icon NE gc_green AND flag = 'X' ."GROUP BY ( kunnr = ls_group-kunnr ).

    DATA(lv_tabix) = sy-tabix.
* Header
    CLEAR:ls_header,ls_headerx.
    ls_header-doc_type   = ls_excel1-auart.
    ls_header-ct_valid_f = sy-datum.
    ls_header-sales_org  = p_vkorg.
    ls_header-distr_chan = '20'.  "分销渠道
    ls_header-division   = '10'.  "产品组
    ls_header-purch_no_c = ls_excel1-auart.

    ls_headerx-doc_type   = 'X'.
    ls_headerx-ct_valid_f = 'X'.
    ls_headerx-sales_org  = 'X'.
    ls_headerx-purch_no_c = 'X'.
    ls_headerx-distr_chan = 'X'.  "分销渠道
    ls_headerx-division   = 'X'.  "产品组
    ls_headerx-updateflag = 'U'.

    SELECT MAX( posnr )
      FROM vbap
      INTO @lv_posnr
     WHERE vbeln = @ls_excel1-vbeln.

    CLEAR ls_item.
    lv_posnr = lv_posnr + 10.
    ls_item-itm_number = lv_posnr.
    ls_item-material   = ls_excel1-matnr.   "物料
    ls_item-cust_mat35 = ls_excel1-maktx.
    APPEND ls_item TO lt_item.

    ls_itemx-itm_number = lv_posnr.
    ls_itemx-material   = 'X'.
    ls_itemx-cust_mat35 = 'X'.
    ls_itemx-updateflag = 'I'.
    APPEND ls_itemx TO lt_itemx.
    CLEAR ls_itemx.

    CLEAR:lt_return,ls_output.
    CALL FUNCTION 'SD_SALESDOCUMENT_CHANGE'
      EXPORTING
        salesdocument    = ls_excel1-vbeln
        order_header_in  = ls_header
        order_header_inx = ls_headerx
*       SIMULATION       = ' '
*       INT_NUMBER_ASSIGNMENT       = ' '
*       BEHAVE_WHEN_ERROR           = ' '
*       BUSINESS_OBJECT  = ' '
*       CONVERT_PARVW_AUART         = ' '
*       CALL_FROM_BAPI   = ' '
*       LOGIC_SWITCH     =
*       I_CRM_LOCK_MODE  = ' '
*       NO_STATUS_BUF_INIT          = ' '
      IMPORTING
        sales_header_out = ls_output
*       SALES_HEADER_STATUS         =
      TABLES
        return           = lt_return
        item_in          = lt_item
        item_inx         = lt_itemx.

    CLEAR lv_msg.
    LOOP AT lt_return INTO ls_return WHERE type CA 'AEX'.
      PERFORM frm_message_set USING ls_return-message
                      CHANGING lv_msg.
    ENDLOOP.
    IF sy-subrc NE 0.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
      gs_excel1-vbeln = ls_output-doc_number.
      gs_excel1-posnr = lv_posnr.
      gs_excel1-icon = gc_green.
      gs_excel1-msg = '创建成功'.
      MODIFY gt_excel1 FROM gs_excel1 INDEX lv_tabix TRANSPORTING icon msg vbeln posnr .
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
      gs_excel1-icon = gc_red.
      gs_excel1-msg = lv_msg.
      MODIFY gt_excel1 FROM gs_excel1 INDEX lv_tabix TRANSPORTING icon msg ."WHERE vbeln = ls_excel1-vbeln.
    ENDIF.

  ENDLOOP.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值