「SAP SDモジュールとは」No.7 出荷伝票登録BAPI・変更BAPI
INDEX LINK
はじめに
第6回では、受注伝票登録BAPIの中で、提案値を上書き/削除する方法、ロングテキストの更新方法、EXTENSION利用方法を説明しました。
第7回では、出荷伝票登録BAPI、及び出荷伝票変更BAPIの利用方法の説明を行っていきます。
1.出荷伝票登録BAPI (受注参照出荷)
出荷伝票登録BAPI(BAPI_OUTB_DELIVERY_CREATE_SLS)についてです。
このBAPIは、受注伝票を参照して出荷伝票を新規登録するBAPIです。入力するパラメータ数が少なく、設定できる項目が非常に限られているため、
受注伝票を参照して出荷伝票を作成するという用途がメインになります。
なお、在庫転送用の発注参照出荷や参照なし出荷の登録は、別のBAPIを利用します。
1-1.パラメータ
出荷ポイントや納入期日などの出荷伝票登録画面(VL01N)の抽出条件項目と、参照元の受注明細、シリアル番号のパラメータで構成されています。
保管場所やロットなどの基本的な項目をパラメータから設定することができないため、これらの項目を出荷伝票に設定するには、
事前に受注伝票で設定しておくか、出荷伝票登録後に変更画面で入力するかのどちらかになります。
1-2.パラメータ一覧
▷インポート
パラメータ // 説明
SHIP_POINT // 出荷ポイント
DUE_DATE // 期日
DEBUG_FLG // デバッグフラグ
NO_DEQUEUE // デキューしない
▷エクスポート
DELIVERY // 出荷伝票番号
NUM_DELIVERIES // 出荷伝票数
▷テーブル
SALES_ORDER_ITEMS // 受注明細
SERIAL_NUMBERS // シリアル番号
EXTENSION_IN // 拡張
DELIVERIES // 出荷伝票一覧
CREATED_ITEMS // 登録明細
EXTENSION_OUT // 拡張
RETURN // リターンテーブル
1-3.参照元受注明細のパラメータを設定する
受注明細(SALES_ORDER_ITEMS)には、参照元の受注の参照伝票、参照明細、出荷数量実績を設定します。
受注の全明細を参照して出荷伝票を作成する場合は、参照明細(REF_ITEM)の項目はブランクにして、参照伝票(REF_DOC)のみ設定したレコードをパラメータに設定します。
出荷数量実績(販売単位)の項目を未設定にすると、受注明細の全数量が出荷伝票にコピーされます。
受注明細の一部数量を出荷する場合は、出荷数量実績(販売単位)の項目に値を設定します。
▷設定例:SALES_ORDER_ITEMS (全受注明細を出荷)
項目 // 項目名称 // 設定値
REF_DOC // 参照伝票 // 0000005410
REF_ITEM // 参照明細 // (ブランク)
DLV_QTY // 出荷数量実績(販売単位) // (ブランク)
▷設定例:SALES_ORDER_ITEMS (指定明細を出荷)
項目 // 項目名称 // 設定値 // 設定値
REF_DOC // 参照伝票 // 0000005410 // 0000005410
REF_ITEM // 参照明細 // 000010 // 000020
DLV_QTY // 出荷数量実績(販売単位) // 7 // 3
1-4.シリアル番号のパラメータを設定する
シリアル番号管理の品目の場合には、シリアル番号(SERIAL_NUMBERS)に参照伝票、参照明細、シリアル番号を設定することができます。
▷設定例:SERIAL_NUMBERS
項目 // 項目名称 // 設定値 // 設定値 // 設定値
REF_DOC // 参照伝票 // 0000005410 // 0000005410 // 0000005410
REF_ITEM // 参照明細 // 000010 // 000010 // 000010
SERIALNO // シリアル番号 // SN000001 // SN000002 // SN000003
1-5.サンプルコード
通常の汎用モジュールを実行するのと同様にCALL FUNCTIONで実行します。
出荷登録のBAPIの内部ではコミットされないため、正常終了時は明示的にコミットを実行する必要があります。
BAPIは例外を発生させない仕様なので、エラー判定はRETURNパラメータにメッセージタイプが「E」のレコードが1件以上あるかどうかで判定をします。
DATA: LSTR_SALES_ORDER_ITEMS TYPE BAPIDLVREFTOSALESORDER,
LT_SALES_ORDER_ITEMS TYPE TABLE OF BAPIDLVREFTOSALESORDER,
LT_SERIAL_NUMBERS TYPE TABLE OF BAPIDLVSERIALNUMBER,
LV_DELIVERY TYPE BAPISHPDELIVNUMB-DELIV_NUMB,
LT_RETURN TYPE TABLE OF BAPIRET2.
* パラメータに値を設定する
LSTR_SALES_ORDER_ITEMS-REF_DOC = ‘0000005410’. ” 参照伝票
LSTR_SALES_ORDER_ITEMS-REF_ITEM = ‘000010’. ” 参照明細
* :
* (以下略)
CALL FUNCTION ‘BAPI_OUTB_DELIVERY_CREATE_SLS’
EXPORTING
DELIVERY = LV_DELIVERY
TABLES
SALES_ORDER_ITEMS = LT_SALES_ORDER_ITEMS
SERIAL_NUMBERS = LT_SERIAL_NUMBERS
RETURN = LT_RETURN
.
* エラーメッセージの取得
READ TABLE LT_RETURN WITH KEY TYPE = ‘E’.
* エラーメッセージがない場合
IF SY-SUBRC <> 0.
COMMIT WORK AND WAIT.
ELSE.
ROLLBACK WORK.
ENDIF.
(サンプルコード 以上です。)
上記のように、出荷伝票登録を行うことができます。
2.出荷伝票変更BAPI
出荷伝票変更BAPI(BAPI_OUTB_DELIVERY_CHANGE)
出荷伝票を変更するBAPIです。未リリースのBAPIため、今後パラメータや挙動などが変わる可能性があるため、本番利用にはリスクがあります。
出荷伝票変更画面(VL02N)に近い変更をBAPIから行うことができます。出庫確認処理には未対応です。
出荷伝票の変更は他には内部用の汎用モジュールがありますが、未リリースのものがあり、パラメータ設定を誤るとショートダンプが発生することがあります。
2-1.パラメータ
出荷伝票ヘッダ、明細、取引先、住所など、出荷伝票のテーブル構成に近い形でパラメータも構成されています。
出荷伝票変更BAPIでは変更したい項目のみパラメータに設定します。変更のBAPIでは後続伝票がある場合に変更不可な項目もあるため、
変更可能な項目のみパラメータに設定するようにします。
2-2.パラメータ一覧
種別 // パラメータ // 説明
インポート // HEADER_DATA // 出荷伝票ヘッダ
HEADER_CONTROL // 出荷伝票ヘッダ 管理データ
DELIVERY // 出荷伝票番号
TECHN_CONTROL // 技術管理データ
HEADER_DATA_SPL // 出荷伝票ヘッダSPL
HEADER_CONTROL_SPL // 管理データSPL
SENDER_SYSTEM // 論理システム
テーブル // HEADER_PARTNER // 出荷伝票: 取引先変更
HEADER_PARTNER_ADDR // 出荷伝票の取引先の住所変更
HEADER_DEADLINES // 出荷伝票ヘッダの日付変更
ITEM_DATA // 出荷伝票明細データ変更
ITEM_CONTROL // 出荷伝票明細 管理データ
ITEM_SERIAL_NO // 出荷伝票明細シリアル番号
SUPPLIER_CONS_DATA // 仕入先受託品在庫
EXTENSIONIN1 // 拡張1
EXTENSIONIN2 // 拡張2
RETURN // リターンパラメータ
TOKENREFFERENCE // CSLトークン参照
ITEM_DATA_SPL // 明細データSPL
COLLECTIVE_CHANGE_ITEMS // 一括変更
NEW_ITEM_DATA // 出荷明細
NEW_ITEM_DATA_SPL // 出荷明細SPL
NEW_ITEM_ORG // 出荷明細組織単位
ITEM_DATA_DOCU_BATCH // 出荷明細ごとの文書ロット
3.請求伝票登録BAPI
請求伝票登録BAPI(BAPI_BILLINGDOC_CREATEMULTIPLE)
請求伝票を登録するBAPIです。パラメータに複数の明細を設定することで、一括請求画面(VF04)のように複数の請求伝票を登録することができます。
このBAPIでは内部でコミット処理が実施されるため、請求伝票を登録したくない場合は、パラメータのTESTRUNに「X」を設定して実行する必要があります。
3-1.パラメータ
請求伝票の登録に必要なパラメータは、処理予定明細データのテーブル(BILLINGDATAIN)です。
処理予定条件のテーブル(CONDITIONDATAIN)に値を設定することで条件レコードを追加することができます。
参照元伝票にすでに同じ条件タイプがある場合は、参照元伝票の条件タイプの方が価格決定表上で優先順位が高くなり、BAPIで設定した条件タイプは無効になります。
3-2.パラメータ一覧
▷インポート
パラメータ // 説明
CREATORDATAIN // 入取り込まれる日付の順序
TESTRUN // シミュレーション実行(‘X’)、更新実行(‘ ‘)
POSTING // 転記カテゴリ
▷テーブル
BILLINGDATAIN // 処理予定明細データのテーブル
CONDITIONDATAIN // 処理予定条件のテーブル
CCARDDATAIN // 処理予定支払方法のテーブル
TEXTDATAIN // 請求インタフェースの通信構造テキスト
ERRORS // 前明細の不正処理に関する情報
RETURN // エラー処理のテーブル
SUCCESS // 正常に処理された明細のテーブル
3-3.処理予定明細のパラメータを設定する
処理予定明細データのテーブル(BILLINGDATAIN)には、請求日と参照伝票番号、参照明細番号、先行伝票の伝票カテゴリを設定します。
先行伝票の伝票カテゴリは受注伝票参照の場合は「C」、出荷参照の場合は「J」です。先行伝票の伝票カテゴリを正しく設定しないと伝票フローが生成されないので注意が必要です。
3-4.設定例:BILLINGDATAIN
項目 // 項目名称 // 設定値
ORDBILLTYP // 提案請求タイプ // F2
BILL_DATE // 請求日 // 20141031
REF_DOC // 参照伝票番号 // 0000001234
REF_ITEM // 参照明細番号 // 000010
REF_DOC_CA // 先行伝票の伝票カテゴリ // C
3-5.価格のパラメータを設定する
価格を変更したい場合は、処理予定条件のテーブル(CONDITIONDATAIN)に条件を設定します。
別テーブルへのポインタには、処理予定明細データのテーブル(BILLINGDATAIN)の行番号を指定します。
▷設定例:CONDITIONDATAIN
項目 // 項目名称 // 設定値
DATA_INDEX // 別テーブルへのポインタ // 1
COND_TYPE // 条件タイプ // RB00
COND_VALUE // 条件金額/率 // 257
COND_CURR // 条件通貨 // JPY
3-6.サンプルコード
通常の汎用モジュールを実行するのと同様にCALL FUNCTIONで実行します。請求伝票登録のBAPIは内部でコミットされるため、ロールバックすることはできません。
請求登録のBAPIは、パラメータで複数請求伝票を作成するようにした場合、エラーが発生しても登録可能な伝票のみ登録されます。
そのため、RETURNパラメータにメッセージタイプが「E」のレコードが1件以上あってもSUCCESSパラメータに伝票番号が1件以上ある場合は正常終了(一部エラーあり)として扱う必要があります。
DATA: LSTR_BILLINGDATAIN TYPE BAPIVBRK,
LT_BILLINGDATAIN TYPE TABLE OF BAPIVBRK,
LT_CONDITIONDATAIN TYPE TABLE OF BAPIKOMV,
LT_SUCCESS TYPE TABLE OFBAPIVBRKSUCCESS,
LT_RETURN TYPE TABLE OF BAPIRET2.
* パラメータに値を設定する
LS_BILLINGDATAIN-BILL_DATE = ‘20230531’. ” 請求日
LSTR_BILLINGDATAIN-REF_DOC = ‘0080001004’. ” 参照伝票番号
LSTR_BILLINGDATAIN-REF_ITEM = ‘000010’. ” 参照明細番号
LSTR_BILLINGDATAIN-REF_DOC_CA = ‘J’. ” 先行伝票の伝票カテゴリ
* :
* (以下略)
CALL FUNCTION ‘BAPI_BILLINGDOC_CREATEMULTIPLE’
EXPORTING
TESTRUN = ‘ ‘
TABLES
BILLINGDATAIN = LT_BILLINGDATAIN
CONDITIONDATAIN = LT_CONDITIONDATAIN
RETURN = LT_RETURN
SUCCESS = LT_SUCCESS
.
* 登録伝票番号の取得
READ TABLE LT_SUCCESS.
* 登録伝票がある場合
IF SY-SUBRC = 0.
” 正常処理.
ELSE.
” エラー処理.
ENDIF.
(サンプルコードは以上です。)
まとめ
上記のように、出荷伝票の登録、変更BAPIはパラメータがシンプルになっております。
請求伝票登録のBAPIに関しても同様にシンプルになっております。また、コミット込みの動作であることは注意が必要です。