「SAP SDモジュールとは」No.4 受注伝票登録
INDEX LINK
1.はじめに
第3回では、その他トランザクションの説明と、カスタマイズについて説明していきました。
第4回からは、SAP SDモジュールで用いられる各BAPIを、今回については受注伝票登録BAPIの概要と使用例を説明していきます。
2.概要説明
受注伝票登録BAPI(BAPI_SALESORDER_CREATEFROMDAT2)
受注伝票の販売伝票カテゴリが「C:受注」の伝票タイプのデータ登録専用のBAPIになります。
返品受注や基本契約などの登録は、伝票カテゴリが異なるので別のBAPIを利用します。
当BAPIはパラメータが多く非常に高機能なのが特徴で、特有の組み合わせの編集を行う必要がありますが、設定値次第で多彩なデータを登録することができます。
受注伝票のテーブル構成に近い形のBAPIのパラメータ構成になっています。
(受注ヘッダ、明細、納入日程行、条件、取引先機能など)
受注登録のBAPIでは、画面とは異なりますが、値の初期値提案機能があり、すべてのパラメータに値を設定する必要はありません。
登録時にブランクの項目はマスタがあるものはマスタから初期設定されます。
(例:パラメータに品目コードを設定すると品目テキストは自動で初期提案されるのでBAPIに設定しなくてもよい)
このような初期提案機能があるため、項目値が未設定なのか明示的にブランクを設定しているのかを判別するために、
BAPIには項目ごとのチェックボックス(またはチェックリスト)というパラメータがあります。
受注を登録するのに必要なパラメータはその環境のカスタマイズにより異なりますが、一般的な出荷ありの明細を登録するには、最低でも以下のパラメータ設定が必要です。
3.パラメータ一覧
・インポートパラメータ
SALESDOCUMENTIN 販売管理伝票番号
ORDER_HEADER_IN 受注ヘッダ
ORDER_HEADER_INX 受注ヘッダチェックリスト
SENDER 論理システム – 送信者
BINARY_RELATIONSHIPTYPE バイナリ関連タイプ (専用)
INT_NUMBER_ASSIGNMENT 明細番号内部採番
BEHAVE_WHEN_ERROR エラー処理
LOGIC_SWITCH 内部制御パラメータ
TESTRUN テスト実行
CONVERT 変換: 取引先機能 + 受注伝票タイプ
・エクスポート
SALESDOCUMENT 生成された伝票の番号
・テーブル
RETURN リターンメッセージ
ORDER_ITEMS_IN 受注明細
ORDER_ITEMS_INX 受注明細チェックボックス
ORDER_PARTNERS 伝票取引先
ORDER_SCHEDULES_IN 納入日程行
ORDER_SCHEDULES_INX 納入日程行チェックボックス
ORDER_CONDITIONS_IN 条件
ORDER_CONDITIONS_INX 条件チェックボックス
ORDER_CFGS_REF 選定: 参照データ
ORDER_CFGS_INST 選定: インスタンス
ORDER_CFGS_PART_OF 選定: 部分設定
ORDER_CFGS_VALUE 選定: 特性値
ORDER_CFGS_BLOB 内部選定データ (SCE)
ORDER_CFGS_VK 選定: バリアント条件キー
ORDER_CFGS_REFINST 選定: 参照明細/インスタンス
ORDER_CCARD クレジットカードデータ
ORDER_TEXT テキスト
ORDER_KEYS 参照キーの出力テーブル
EXTENSIONIN VBAK、VBAP、VBEP のカスタマ拡張
PARTNERADDRESSES アドレス (組織/会社) 用 BAPI 構造
4.受注ヘッダ関連のパラメータ設定
受注ヘッダ(ORDER_HEADER_IN)には多くの項目がありますが、必須項目は販売伝票タイプ、販売組織、流通チャネル、製品部門です。
対となるパラメータとして受注ヘッダチェックリスト(ORDER_HEADER_INX)があります。
チェックリストには更新区分(I:登録、U:変更、D:削除)の設定、および更新する受注ヘッダの項目に「X」を設定します。
項目にブランクを設定したい場合は、マスタから初期値提案がされないようにチェックリストの項目に「X」を設定します。
受注先の項目は受注ヘッダではなく取引先機能(ORDER_PARTNERS)のパラメータにあります。
取引先機能パラメータは、取引先機能、BPマスタの得意先コード、明細番号の入力が必要です。
ヘッダの取引先の場合は明細番号に「000000」を設定します。取引先機能には、受注先、出荷先、支払人などが設定可能で、受注先は必須なので最低1レコード必要です。
販売伝票タイプと取引先機能のIDは、画面に表示される値でなく内部コード値で設定する必要があるので注意が必要です。
(例:伝票タイプ「OR」の場合は「TA」、受注先「SP」の場合は「AG」など)
-
設定例:ORDER_HEADER_IN
項目//項目名称//設定値
DOC_TYPE//販売伝票タイプ//TA
SALES_ORG//販売組織//1000
DISTR_CHAN//流通チャネル//00
DIVISION//製品部門//00
-
設定例:ORDER_HEADER_INX
項目//項目名称// 設定値
UPDATEFLAG//更新区分//I
DOC_TYPE//販売伝票タイプ//X
SALES_ORG//販売組織//X
DISTR_CHAN//流通チャネル//X
DIVISION//製品部門//X
-
設定例:ORDER_PARTNERS (4レコード)
項目//項目名称// 設定値(1)//設定値(2)//設定値(3)//設定値(4)
PARTN_ROLE//取引先機能//AG//WE//RE//RG
PARTN_NUMB//得意先コード//CUST0001//CUST0123//CUST0001//CUST0001
ITM_NUMBER//明細番号//000000//000000//000000//000000
5.受注明細関連のパラメータ設定
受注明細(ORDER_ITEMS_IN)には明細番号、品目コード、プラント、販売単位などを設定します。
対となるパラメータとして受注明細チェックリスト(ORDER_ITEMS_INX)があります。
受注数量や納入日付の項目は、納入日程行のパラメータに設定します。
納入日程行(ORDER_SCHEDULES_IN)には明細番号、納入日程行番号、納入日程日付、受注数量などの項目を設定します。
対となるパラメータとして納入日程行チェックリスト(ORDER_SCHEDULES_INX)があります。チェックリストパラメータの使い方は、受注ヘッダと同じです。
納入日程行は、出荷計画のカスタマイズや利用可能在庫確認に依存して日程の再計算が行われたものが優先されるので、
BAPIで入力した納入日程がそのまま伝票に保存されない場合もあります。
販売単位の項目は、画面に表示される値でなく内部コード値で設定する必要があるので注意してください。
(例:数量単位「個」の場合は「ST」など)
-
設定例:ORDER_ITEMS_IN
項目//項目名称//設定値
ITM_NUMBER//販売伝票明細//000010
MATERIAL//品目コード//MAT0001
PLANT//プラント//1000
SALES_UNIT//販売単位//ST
-
設定例:ORDER_ITEMS_INX
項目//項目名称//設定値
ITM_NUMBER//販売伝票明細//000010
UPDATEFLAG//更新区分//I
MATERIAL//品目コード//X
PLANT//プラント//X
SALES_UNIT//販売単位//X
-
設定例:ORDER_SCHEDULES_IN
項目//項目名称//設定値
ITM_NUMBER//販売伝票明細//000010
SCHED_LINE//納入日程行//0001
REQ_DATE//納入日程日付//20230428
REQ_QTY//受注数量//3
-
設定例:ORDER_SCHEDULES_INX
項目//項目名称//設定値
ITM_NUMBER//販売伝票明細//000010
SCHED_LINE//納入日程行//0001
UPDATEFLAG//更新区分//I
REQ_DATE//納入日程日付//X
REQ_QTY//受注数量//X
6.価格のパラメータ設定
明細の価格は、条件(ORDER_CONDITIONS_IN)に設定します。
主な設定項目は、明細番号、条件タイプ、条件レート、通貨コード、条件単位、価格条件単位です。
対となるパラメータとして条件チェックリスト(ORDER_CONDITIONS_INX)があります。
チェックリストパラメータの使い方は受注ヘッダと同じですが、条件マスタから価格が提案されている場合は、
更新区分=Uを設定することで、マスタの金額の変更もできます。
条件レートの項目は、内部形式(※)でなく外部形式(実際の金額と同じ桁)で設定する必要があるので注意する必要があります。
※例:日本円(JPY)の場合、プログラム上は1/100の数値になっています。1234円は12.34と格納されます。
-
設定例:ORDER_CONDITIONS_IN
項目//項目名称//設定値
ITM_NUMBER//販売伝票明細//000010
COND_TYPE//条件タイプ//PR00
COND_VALUE//条件レート//135
CURRENCY//通貨コード//JPY
COND_UNIT//条件単位//ST
COND_P_UNT//価格条件単位//1
-
設定例:ORDER_CONDITIONS_INX
項目//項目名称//設定値
ITM_NUMBER//販売伝票明細//000010
COND_TYPE//条件タイプ//PR00
UPDATEFLAG//更新区分//I
COND_VALUE//条件レート//X
CURRENCY//通貨コード//X
COND_UNIT//条件単位//X
COND_P_UNT//価格条件単位//X
7.サンプルコード
通常の汎用モジュールを実行するのと同様にCALL FUNCTIONで実行します。
受注登録のBAPIの内部ではコミットされないため、正常終了時は明示的にコミットを、失敗時はロールバックを実行する必要があります。
BAPIは例外を発生させない仕様なので、エラー判定はRETURNパラメータにメッセージタイプが「E」のレコードが1件以上あるかどうかで判定をします。
DATA: LSTR_ORDER_HEADER_IN TYPE BAPISDHD1,
LSTR_ORDER_HEADER_INX TYPE BAPISDHD1X,
LT_ORDER_ITEMS_IN TYPE TABLE OF BAPISDITM,
LT_ORDER_ITEMS_INX TYPE TABLE OF BAPISDITMX,
LT_ORDER_PARTNERS TYPE TABLE OF BAPIPARNR,
LT_ORDER_SCHEDULES_IN TYPE TABLE OF BAPISCHDL,
LT_ORDER_SCHEDULES_INX TYPE TABLE OF BAPISCHDLX,
LT_ORDER_CONDITIONS_IN TYPE TABLE OF BAPICOND,
LT_ORDER_CONDITIONS_INX TYPE TABLE OF BAPICONDX,
LV_SALESDOCUMENT TYPE VBAK-VBELN,
LT_RETURN TYPE TABLE OF BAPIRET2.
* パラメータに値を設定する
LSTR_ORDER_HEADER_IN-DOC_TYPE = ‘TA’. ” 販売伝票タイプ
* :
* (以下略)
CALL FUNCTION ‘BAPI_SALESORDER_CREATEFROMDAT2’
EXPORTING
ORDER_HEADER_IN = LSTR_ORDER_HEADER_IN
ORDER_HEADER_INX = LSTR_ORDER_HEADER_INX
IMPORTING
SALESDOCUMENT = LV_SALESDOCUMENT
TABLES
RETURN = LT_RETURN
ORDER_ITEMS_IN = LT_ORDER_ITEMS_IN
ORDER_ITEMS_INX = LT_ORDER_ITEMS_INX
ORDER_PARTNERS = LT_ORDER_PARTNERS
ORDER_SCHEDULES_IN = LT_ORDER_SCHEDULES_IN
ORDER_SCHEDULES_INX = LT_ORDER_SCHEDULES_INX
ORDER_CONDITIONS_IN = LT_ORDER_CONDITIONS_IN
ORDER_CONDITIONS_INX = LT_ORDER_CONDITIONS_INX
.
* エラーメッセージの取得
READ TABLE LT_RETURN WITH KEY TYPE = ‘E’ TRANSPORTING NO FIELDS.
* エラーメッセージがない場合
IF SY-SUBRC <> 0.
COMMIT WORK AND WAIT.
ELSE.
ROLLBACK WORK.
ENDIF.
(サンプルコードは以上です。)
受注伝票登録BAPIは、このような使い方になっております。