ABAP BAPI_PO_CREATE1で購買発注伝票作成

  BAPI

概要

アドオンプログラムで購買発注伝票を作成する場合使用するのがBAPI_PO_CREATE1だろう。
もちろん、バッチインプットでも出来ない事はないだろうが、カスタマイズに合わせて制御したり、
タブ移動を制御したりかなり大変なので、シンプルに作成したいのであればBAPI_PO_CREATE1を使用しよう。
この記事では、最低限これだけは入力しておけばできるであろうサンプルコードを記載するが、
カスタマイズによっては、必須項目が異なってたりする為、ご自身の環境・要件に合わせて
変更してもらいたい。

サンプルコード

DATA: wa_poheader     type  bapimepoheader.         "購買伝票ヘッダ
DATA: wa_poheaderx    type  bapimepoheaderx.        "購買伝票ヘッダインジケータ
DATA: it_poitem       type table of bapimepoitem.   "購買伝票明細
DATA: it_poitemx      type table of bapimepoitemx.  "購買伝票明細インジケータ
DATA: wa_poitem       like line of it_poitem.       "購買伝票明細のワークエリア
DATA: wa_poitemx      like line of it_poitemx.      "購買伝票明細インジケータのワークエリア
DATA: it_bapiret2     type table of bapiret2.       "エラーテーブル
DATA: wa_bapiret2     like line of it_bapiret2.     "エラーテーブルのワークエリア
DATA: v_ebeln         TYPE ebeln.                   "購買伝票番号

* 購買伝票ヘッダの編集処理
clear: wa_poheader.
wa_poheader-comp_code    = '0123'.
wa_poheader-doc_type     = 'NB'.
wa_poheader-vendor       = '0001000000'.
wa_poheader-creat_date   = sy-datum.
wa_poheader-purch_org    = 'D000'.
wa_poheader-pur_group    = 'X01'.
wa_poheader-doc_date     = sy-datum.

clear: wa_poheaderx.
wa_poheaderx-comp_code   = 'X'.  "更新するフィールドにXをつける
wa_poheaderx-doc_type    = 'X'.
wa_poheaderx-vendor      = 'X'.
wa_poheaderx-creat_date  = 'X'.
wa_poheaderx-purch_org   = 'X'.
wa_poheaderx-pur_group   = 'X'.
wa_poheaderx-doc_date    = 'X'.

* 購買伝票明細の編集処理
clear: wa_poitem.
wa_poitem-po_item    = '00010'.
wa_poitem-material   = '000000000200000000'.
wa_poitem-plant      = 'D001'.
wa_poitem-tax_code   = 'V1'.
wa_poitem-quantity   = 1.
APPEND wa_poitem to it_poitem.

clear: wa_poitem.
wa_poitemx-po_item      = '00010'.
wa_poitemx-po_itemx     = 'X'.  "更新するフィールドにXをつける
wa_poitemx-plant        = 'X'.
wa_poitemx-tax_code     = 'X'.
wa_poitemx-material     = 'X'.
wa_poitemx-quantity     = 'X'.
APPEND wa_poitemx to it_poitemx.

* BAPIの呼び出し
CALL FUNCTION 'BAPI_PO_CREATE1'
  EXPORTING
    poheader         = wa_poheader
    poheaderx        = wa_poheaderx
*   TESTRUN          = 'X' 設定時はテスト実行
  IMPORTING
    exppurchaseorder = v_ebeln
  TABLES
    return           = it_bapiret2
    poitem           = it_poitem
    poitemx          = it_poitemx
*   poschedule       =
*   poschedulex      =
  .


IF NOT v_ebeln IS INITIAL.
* データベースのコミット
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = 'X'.

**** 正常時の処理記述 ****

ELSE.
  LOOP AT it_bapiret2 INTO wa_bapiret2 WHERE type = 'E'.

**** 異常時の処理記述 ****

  ENDLOOP.
ENDIF.

Dataの定義方法はこちらを参照
複数レコードの取得はこちらを参照