概要
アドオンプログラムで購買発注伝票を作成する場合使用するのが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.
最近のコメント