BAPI创建销售合同,利用BAPI对自定义字段赋值

*&---------------------------------------------------------------------*
*& Report Z_TEST_LUOLIN_001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_test_luolin_001.
DATA: ls_cont_hdr_in  TYPE bapisdhd1,
      ls_cont_hdr_inx TYPE bapisdhd1x,
      lv_salesdoc     TYPE bapivbeln-vbeln,
      lt_return       TYPE TABLE OF bapiret2,
      lt_partner      TYPE TABLE OF bapiparnr,
      lt_item_in      TYPE TABLE OF bapisditm,
      lt_item_inx     TYPE TABLE OF bapisditmx,
      lt_cond_in      TYPE TABLE OF bapicond,
      lt_cond_inx     TYPE TABLE OF bapicondx,
      lv_msg          TYPE string.

DATA: lt_extensionin  TYPE TABLE OF bapiparex.


DATA :
  ls_bape_vbak  TYPE bape_vbak,
  ls_bape_vbakx TYPE bape_vbakx,
  ls_exten      TYPE bapiparex,
  lt_exten      TYPE STANDARD TABLE OF bapiparex,
  ls_extenx     TYPE bapiparex,
  lt_extenx     TYPE STANDARD TABLE OF bapiparex.

DATA logic_switch TYPE  bapisdls.

START-OF-SELECTION.
  " prepare contract header data
  ls_cont_hdr_in-doc_type = 'ZCQ'. " contract type( cq->km)
  ls_cont_hdr_in-purch_no_c = 'po_num'. " purchase order
  ls_cont_hdr_in-sales_org = '1001'. " sales organization
  ls_cont_hdr_in-distr_chan = '20'. " distribution channel
  ls_cont_hdr_in-division = '00'. " division
  ls_cont_hdr_in-ct_valid_f = '20190705'. " contract valid from date
  ls_cont_hdr_in-ct_valid_t = '20191231'. " contract valid to date

  ls_cont_hdr_inx-doc_type = 'x'.
  ls_cont_hdr_inx-purch_no_c = 'x'.
  ls_cont_hdr_inx-sales_org = 'x'.
  ls_cont_hdr_inx-distr_chan = 'x'.
  ls_cont_hdr_inx-division = 'x'.
  ls_cont_hdr_inx-ct_valid_f = 'x'.
  ls_cont_hdr_inx-ct_valid_t = 'x'.

* Prepare Contract Item Data
  APPEND INITIAL LINE TO lt_item_in ASSIGNING FIELD-SYMBOL(<fs_item_in>).
  <fs_item_in>-itm_number = '000010'.
  <fs_item_in>-material = '9S110001'.
*  <fs_item_in>-plant = '1000'.
*  <fs_item_in>-ship_point = '1000'.
  <fs_item_in>-target_qty = '10'.
  <fs_item_in>-target_qu = 'KG'. " pc->st

  APPEND INITIAL LINE TO lt_item_inx ASSIGNING FIELD-SYMBOL(<fs_item_inx>).
  <fs_item_inx>-itm_number = 'x'.
  <fs_item_inx>-material = 'x'.
*  <fs_item_inx>-plant = 'x'.
*  <fs_item_inx>-ship_point = 'x'.
  <fs_item_inx>-target_qty = 'x'.
  <fs_item_inx>-target_qu = 'x'.
* prepare Partner details
  APPEND INITIAL LINE TO lt_partner ASSIGNING FIELD-SYMBOL(<fs_partner>).
  <fs_partner>-partn_role = 'AG'. " sold to party
  <fs_partner>-partn_numb = '0000100000'.

  APPEND INITIAL LINE TO lt_cond_in ASSIGNING FIELD-SYMBOL(<fs_cond_in>).
  <fs_cond_in>-itm_number = '000010'. "
  <fs_cond_in>-cond_st_no = '010'. "
  <fs_cond_in>-cond_type = 'ZCB6'. "
  <fs_cond_in>-cond_value = '11.000000000'. "
  <fs_cond_in>-currency = 'CNY'. "
  <fs_cond_in>-cond_unit = 'KG'. "

  APPEND INITIAL LINE TO lt_cond_in ASSIGNING <fs_cond_in>.
  <fs_cond_in>-itm_number = '000010'. "
  <fs_cond_in>-cond_st_no = '010'. "
  <fs_cond_in>-cond_type = 'ZPR0'. "
  <fs_cond_in>-cond_value = '11.000000000'. "
  <fs_cond_in>-currency = 'CNY'. "
  <fs_cond_in>-cond_unit = 'KG'. "

  APPEND INITIAL LINE TO lt_cond_inx ASSIGNING FIELD-SYMBOL(<fs_cond_inx>).
  <fs_cond_inx>-itm_number = '000010'. "
  <fs_cond_inx>-cond_st_no = '010'. "
  <fs_cond_inx>-cond_type = 'ZCB6'. "
  <fs_cond_inx>-updateflag = 'I'. "
  <fs_cond_inx>-cond_value = 'X'. "
  <fs_cond_inx>-currency = 'X'. "
  <fs_cond_inx>-cond_unit = 'X'. "
  APPEND INITIAL LINE TO lt_cond_inx ASSIGNING <fs_cond_inx>.
  <fs_cond_inx>-itm_number = '000010'. "
  <fs_cond_inx>-cond_st_no = '174'. "
  <fs_cond_inx>-cond_type = 'ZPR0'. "
  <fs_cond_inx>-updateflag = 'I'. "
  <fs_cond_inx>-cond_value = 'X'. "
  <fs_cond_inx>-currency = 'X'. "
  <fs_cond_inx>-cond_unit = 'X'. "

*  ls_bape_vbak-zzcredit  = '10000'.  "信用额度
*  ls_bape_vbak-zzprojectno  = '项目号'.  "项目号
*  ls_bape_vbak-zzprojectname  = '项目名称'.  "项目名称
*  ls_bape_vbak-zzbigprojectname  = '战略地产名称'.  "战略地产名称
*  ls_bape_vbak-zzoalcbianma  = 'OA流程编码'.  "OA流程编码
*  ls_exten-structure   = 'BAPE_VBAK'.
*  ls_exten+30(960)     = ls_bape_vbak.
*  APPEND ls_exten TO lt_exten.
*  CLEAR:ls_exten.
*
*  ls_bape_vbak-zzcredit  = 'X'.  "信用额度
*  ls_bape_vbak-zzprojectno  = 'X'.  "项目号
*  ls_bape_vbak-zzprojectname  = 'X'.  "项目名称
*  ls_bape_vbak-zzbigprojectname  = 'X'.  "战略地产名称
*  ls_bape_vbak-zzoalcbianma  = 'X'.  "OA流程编码
*  ls_exten-structure   = 'BAPE_VBAKX'.
*  ls_exten+30(960)     = ls_bape_vbakx.
*  APPEND ls_extenx TO lt_extenx.
  CLEAR:ls_extenx.
  ls_bape_vbak-zzcredit  = '10000'.  "信用额度
  ls_bape_vbak-zzprojectno  = '项目号'.  "项目号
  ls_bape_vbak-zzprojectname  = '项目名称'.  "项目名称
  ls_bape_vbak-zzbigprojectname  = '战略地产名称'.  "战略地产名称
  ls_bape_vbak-zzoalcbianma  = 'OA流程编码'.  "OA流程编码
  ls_exten-structure   = 'BAPE_VBAK'.
*  ls_exten+30(960)     = ls_bape_vbak.
  ls_exten-VALUEPART1 = ls_bape_vbak.
  APPEND ls_exten TO lt_exten.
  CLEAR:ls_extenx.
  ls_bape_vbakx-zzcredit  = 'X'.  "信用额度
  ls_bape_vbakx-zzprojectno  = 'X'.  "项目号
  ls_bape_vbakx-zzprojectname  = 'X'.  "项目名称
  ls_bape_vbakx-zzbigprojectname  = 'X'.  "战略地产名称
  ls_bape_vbakx-zzoalcbianma  = 'X'.  "OA流程编码
  ls_extenx-structure   = 'BAPE_VBAKX'.
*  ls_extenx+30(960)     = ls_bape_vbakx.
  ls_extenx-VALUEPART1 = ls_bape_vbakx.
  APPEND ls_extenx TO lt_extenx.
  CLEAR:ls_extenx.

  logic_switch-pricing = 'G'. "G:执行手动输入价格条件,B:重新执行价格条件更新


  CALL FUNCTION 'BAPI_CONTRACT_CREATEFROMDATA'
    EXPORTING
*     SALESDOCUMENTIN         =
      contract_header_in      = ls_cont_hdr_in
      contract_header_inx     = ls_cont_hdr_inx
*     SENDER                  =
*     BINARY_RELATIONSHIPTYPE = ' '
*     INT_NUMBER_ASSIGNMENT   = ' '
*     BEHAVE_WHEN_ERROR       = ' '
      logic_switch            = logic_switch
*     TESTRUN                 =
*     CONVERT                 = ' '
    IMPORTING
      salesdocument           = lv_salesdoc
    TABLES
      return                  = lt_return
      contract_items_in       = lt_item_in
      contract_items_inx      = lt_item_inx
      contract_partners       = lt_partner
      contract_conditions_in  = lt_cond_in
      contract_conditions_inx = lt_cond_inx
*     CONTRACT_CFGS_REF       =
*     CONTRACT_CFGS_INST      =
*     CONTRACT_CFGS_PART_OF   =
*     CONTRACT_CFGS_VALUE     =
*     CONTRACT_CFGS_BLOB      =
*     CONTRACT_CFGS_VK        =
*     CONTRACT_CFGS_REFINST   =
*     contract_data_in        =
*     contract_data_inx       =
*     CONTRACT_TEXT           =
*     CONTRACT_KEYS           =
      extensionin             = lt_exten
*     PARTNERADDRESSES        =
      extensionex             = lt_extenx.
  .
  READ TABLE lt_return TRANSPORTING NO FIELDS WITH KEY type = 'e'.
  IF sy-subrc IS NOT INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    LOOP AT lt_return ASSIGNING FIELD-SYMBOL(<fs_return>).
      CALL FUNCTION 'FORMAT_MESSAGE'
        EXPORTING
          id        = <fs_return>-id
          lang      = 'en'
          no        = <fs_return>-number
          v1        = <fs_return>-message_v1
          v2        = <fs_return>-message_v2
          v3        = <fs_return>-message_v3
          v4        = <fs_return>-message_v4
        IMPORTING
          msg       = lv_msg
        EXCEPTIONS
          not_found = 1
          OTHERS    = 2.

      IF sy-subrc <> 0.
      ENDIF.
      WRITE :/ lv_msg.
    ENDLOOP.
    WRITE :/ 'contract:', lv_salesdoc , 'has been created' .
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

  ENDIF.

image.png

关键词: ABAP

网友评论

发表评论