BAPI_SALESORDER_CREATEFROMDAT1
판매오더 생성하는 BAPI
DATA : ls_header TYPE bapisdhead,
ls_items TYPE bapiitemin,
ls_partners TYPE bapipartnr,
lt_partners TYPE TABLE OF bapipartnr,
lt_items TYPE TABLE OF bapiitemin,
ls_return TYPE bapireturn1,
lv_vbeln TYPE vbak-vbeln,
lv_posnr TYPE vbap-posnr,
lv_tabix TYPE sy-tabix.
CLEAR : gs_data, ls_header, ls_items, ls_partners,
ls_return, lv_vbeln, lv_tabix.
REFRESH : lt_items, lt_partners.
* 헤더 데이터
ls_header-doc_type = 'ZOR'. "판매 유형
ls_header-sales_org = 'vkorg'. "영업 조직
ls_header-distr_chan = 'vtweg'. "유통 경로
ls_header-division = 'spart'. "제품군
ls_header-req_date_h = 'vdatu'. "납품 요청일
* 파트너 정보 설정(판매처)
ls_partners-partn_role = 'AG'. "파트너 역할 (AG = 판매처)
ls_partners-partn_numb = 'kunnr'. "판매처 (고객번호)
APPEND ls_partners TO lt_partners.
* 아이템 데이터(품목)
LOOP AT gt_data INTO gs_data.
lv_tabix = sy-tabix.
ls_items-material = 'matnr'. "자재 번호
ls_items-plant = 'werks'. "플랜트
ls_items-store_loc = 'lgort'. "저장 위치
ls_items-req_qty = 'kwmeng'."수량
ls_items-sales_unit = 'meins'. "단위
ls_items-currency = 'waerk'. "통화
APPEND ls_items TO lt_items.
CLEAR ls_items.
ENDLOOP.
* 판매 오더 생성
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT1'
EXPORTING
order_header_in = ls_header
* WITHOUT_COMMIT = ' '
* CONVERT_PARVW_AUART = 'X'
IMPORTING
salesdocument = lv_vbeln
* SHIP_TO_PARTY =
* BILLING_PARTY =
return = ls_return
TABLES
order_items_in = lt_items
order_partners = lt_partners
* ORDER_ITEMS_OUT =
* ORDER_CFGS_REF =
* ORDER_CFGS_INST =
* ORDER_CFGS_PART_OF =
* ORDER_CFGS_VALUE =
* ORDER_CCARD =
* ORDER_CFGS_BLOB =
* ORDER_SCHEDULE_EX =
.
CLEAR lv_tabix.
IF ls_return-type = 'S' OR
ls_return-type IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
lv_posnr = 10.
LOOP AT gt_data INTO gs_data.
lv_tabix = sy-tabix.
gs_data-vbeln = lv_vbeln. "판매오더번호
gs_data-posnr = lv_posnr. "품목
MODIFY gt_data FROM gs_data INDEX lv_tabix
TRANSPORTING vbeln posnr.
lv_posnr = lv_posnr + 10.
ENDLOOP.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
message e000 with ls_return-message.
ENDIF.