[SD] BAPI - BAPI_SALESORDER_CREATEFROMDAT1 (판매오더 생성)

뇬두·2024년 9월 5일
0

SAP

목록 보기
1/3

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.

0개의 댓글