「SAP SDモジュールとは」No.5 受注伝票変更
INDEX LINK
1.はじめに
第4回では、受注伝票登録BAPIの概要と使用例について説明していきました。
第5回では、受注伝票変更BAPIの概要と使用例を説明していきます。
2.受注伝票変更BAPI 概要説明
受注伝票変更BAPI(BAPI_SALESORDER_CHANGE)
受注伝票の販売伝票カテゴリが「C:受注」の伝票タイプのデータ変更専用のBAPIになります。
返品受注や基本契約などの登録は、伝票カテゴリが異なるので別のBAPIを利用します。
基本的な使い方は受注登録BAPIと同様ですが、後続伝票がある場合などの状況により挙動が変化するため、
受注変更の方が正しくパラメータを設定するのが難しくなっています。
3. パラメータ一覧
受注伝票のテーブル構成に近い形でパラメータも構成されています。
受注登録BAPI用のパラメータ構成に近いですが、取引先機能変更用パラメータなど変更BAPI特有のパラメータもあります。
基本的に受注変更のBAPIでは変更したい項目のみパラメータに設定します。変更しない項目も含め利用している項目を全てパラメータに設定すると、
変更できない項目はBAPIの入力チェックでエラーになります。そのため変更不要な項目は設定しない方が適切です。
(例:受注が請求済の場合、金額項目が変更不可になります。)
・インポートパラメータ
SALESDOCUMENT 受注伝票番号
ORDER_HEADER_IN 受注伝票ヘッダ
ORDER_HEADER_INX 受注ヘッダチェックリスト
SIMULATION シミュレーションモード
BEHAVE_WHEN_ERROR エラー処理
INT_NUMBER_ASSIGNMENT 明細番号内部採番
LOGIC_SWITCH 販売管理チェックボックス: 論理スイッチ
NO_STATUS_BUF_INIT No Refresh of Status Buffer
・テーブル
RETURN リターンコード
ORDER_ITEMS_IN 受注伝票明細
ORDER_ITEMS_INX 受注伝票明細チェックテーブル
PARTNERS 通信項目: 販売管理伝票取引先: WWW
PARTNERCHANGES 取引先変更
PARTNERADDRESSES アドレス (組織/会社) 用 BAPI 参照構造
ORDER_CFGS_REF 選定: 参照データ
ORDER_CFGS_INST 選定: インスタンス
ORDER_CFGS_PART_OF 選定: 部分設定
ORDER_CFGS_VALUE 選定: 特性値
ORDER_CFGS_BLOB 内部選定データ (SCE)
ORDER_CFGS_VK 選定: バリアント条件キー
ORDER_CFGS_REFINST 選定: 参照明細/インスタンス
ORDER_SCHEDULES_IN 納入日程行
ORDER_SCHEDULES_INX 納入日程行チェックテーブル
ORDER_TEXT テキスト
ORDER_KEYS 参照キーの出力テーブル
ORDER_CONDITIONS_IN 条件
ORDER_CONDITIONS_INX 条件チェックボックス
EXTENSIONIN VBAK、VBAP、VBEP のカスタマ拡張
4.受注ヘッダ関連のパラメータ設定
受注ヘッダ(ORDER_HEADER_IN)には変更したい項目を設定し、対となるパラメータの受注ヘッダチェックリスト(ORDER_HEADER_INX)に更新区分「U」、
変更項目に「X」を設定します。設定方法は受注登録BAPIと同様です。
取引先機能を変更する場合、取引先変更(PARTNERCHANGES)のパラメータに設定します。パラメータには伝票番号、明細番号、更新区分、引先機能、変更前と変更後の取引先コードを設定します。
ヘッダの取引先を変更する場合は明細番号には「000000」を設定します。
BAPIの制限事項で受注先(取引先機能=「AG」)の変更はできません。また、取引先機能のIDは、画面に表示される値でなく内部コード値で設定する必要があるので注意が必要です。
(例:出荷先「SH」の場合、内部コード値は「WE」)
取引先のアドレスをマスタ値とは変更したい場合は、アドレス(PARTNERADDRESSES)のアドレス番号に任意の番号を設定し、
PARTNERCHANGESのADDR_LINKに同じ値を設定します。
・設定例:ORDER_HEADER_IN
項目//項目名称//設定値
PURCH_NO_C//得意先発注番号//HB23042801
・設定例:ORDER_HEADER_INX
項目//項目名称// 設定値
UPDATEFLAG//更新区分//U
PURCH_NO_C//得意先発注番号//X
・設定例:PARTNERCHANGES
項目//項目名称// 設定値
DOCUMENT//伝票番号//0000001001
ITM_NUMBER//明細番号//000000
UPDATEFLAG//更新区分//U
PARTN_ROLE//取引先機能//WE
P_NUMB_OLD//取引先コード(変更前)//TOKUI0001
P_NUMB_NEW//取引先コード(変更後)//TOKUI0002
ADDR_LINK//アドレス番号//0000000012
・設定例:PARTNERADDRESSES
ADDR_NO//アドレス番号//0000000012
NAME//名称 1//TEST得意先アドレス名称
CITY//市区町村//Tokyo
5.受注明細関連のパラメータ設定
受注明細(ORDER_ITEMS_IN)には明細番号と変更したい項目を設定します。
対となるパラメータとして受注明細チェックボックス(ORDER_ITEMS_INX)に更新区分(I:追加、U:変更、D:削除)と変更する項目に「X」を設定します。
納入日程行(ORDER_SCHEDULES_IN)の変更をする場合は、明細番号、納入日程行番号と更新したい項目を設定します。
対となるパラメータとして納入日程行チェックボックス(ORDER_SCHEDULES_INX)に更新区分と変更する項目に「X」を設定します。
明細のみを変更する場合も、受注ヘッダチェックリスト(ORDER_HEADER_INX)の更新区分に「U」を設定する必要があります。
また、納入日程行のみを変更する場合も、対応する明細の受注明細チェックボックス(ORDER_ITEMS_INX)の更新区分に「U」を設定する必要があります。
・設定例:ORDER_ITEMS_IN 1行目が削除、2行目が更新、3行目が追加の場合
項目//項目名称//設定値(1行目)// 設定値(2行目)// 設定値(3行目)
ITM_NUMBER//販売伝票明細//000010//000020//000030
MATERIAL//品目コード//(ブランク)// (ブランク)//MAT0001
SHORT_TEXT//品目テキスト//(ブランク)//品目TESTテキスト//(ブランク)
PLANT//プラント//(ブランク)// (ブランク)//1100
・設定例:ORDER_ITEMS_INX
項目//項目名称//設定値(1行目)// 設定値(2行目)// 設定値(3行目)
ITM_NUMBER//販売伝票明細//000010//000020//000030
UPDATEFLAG//更新区分//D//U//I
MATERIAL//品目コード//(ブランク)// (ブランク)//X
SHORT_TEXT//品目テキスト//(ブランク)//X//(ブランク)
PLANT//プラント//(ブランク)// (ブランク)//X
・設定例:ORDER_SCHEDULES_IN 1行目が更新、2行目が追加の場合
項目//項目名称//設定値(1行目)// 設定値(2行目)
ITM_NUMBER//販売伝票明細//000020//000030
SCHED_LINE//納入日程行//0001//0001
REQ_DATE//納入日程日付//20230428//20230429
REQ_QTY//受注数量//(ブランク)//4
・設定例:ORDER_SCHEDULES_INX
項目//項目名称//設定値(1行目)// 設定値(2行目)
ITM_NUMBER//販売伝票明細//000020//000030
SCHED_LINE//納入日程行//0001//0001
UPDATEFLAG//更新区分//U//I
REQ_DATE//納入日程日付//X//X
REQ_QTY//受注数量//(ブランク)//X
6. 価格のパラメータ設定
明細の価格変更は、条件(ORDER_CONDITIONS_IN)に変更したい項目を設定します。
主な設定項目は、明細番号、条件タイプ、条件レート、通貨コード、条件単位、価格条件単位です。
対となるパラメータとして条件チェックリスト(ORDER_CONDITIONS_INX)があります。チェックリストパラメータの使い方は受注ヘッダと同じです。
金額しか変更しない場合も通貨コードや条件単位、価格条件単位は設定する必要があります。
また、条件レートの項目は、内部形式(※)でなく外部形式で設定する必要があるので注意が必要です。
※例:日本円(JPY)の場合、プログラム上は1/100の数値になっています。1234円は12.34と格納されます。
・設定例:ORDER_CONDITIONS_IN
項目//項目名称//設定値
ITM_NUMBER//販売伝票明細//000010
COND_TYPE//条件タイプ//PR00
COND_VALUE//条件レート//2345
CURRENCY//通貨コード//JPY
COND_UNIT//条件単位//ST
COND_P_UNT//価格条件単位//1
・設定例:ORDER_CONDITIONS_INX
項目//項目名称//設定値
ITM_NUMBER//販売伝票明細//000010
COND_TYPE//条件タイプ//PR00
UPDATEFLAG//更新区分//U
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 BAPISDH1,
LSTR_ORDER_HEADER_INX TYPE BAPISDH1X,
LT_ORDER_ITEMS_IN TYPE TABLE OF BAPISDITM,
LT_ORDER_ITEMS_INX TYPE TABLE OF BAPISDITMX,
LT_PARTNERCHANGES TYPE TABLE OF BAPIPARNRC,
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.
* パラメータに値を設定する
LV_SALESDOCUMENT = ‘0000001001’. ” 受注伝票番号
LSTR_ORDER_HEADER_IN-PURCH_NO_C = ‘HC23042801’. ” 得意先発注番号
LSTR_ORDER_HEADER_INX-UPDATEFLAG = ‘U’. ” 更新区分
LSTR_ORDER_HEADER_INX-PURCH_NO_C = ‘X’.
* :
* (以下略)
CALL FUNCTION ‘BAPI_SALESORDER_CHANGE’
EXPORTING
SALESDOCUMENT = LV_SALESDOCUMENT
ORDER_HEADER_IN = LSTR_ORDER_HEADER_IN
ORDER_HEADER_INX = LSTR_ORDER_HEADER_INX
TABLES
RETURN = LT_RETURN
ORDER_ITEMS_IN = LT_ORDER_ITEMS_IN
ORDER_ITEMS_INX = LT_ORDER_ITEMS_INX
PARTNERCHANGES = LT_PARTNERCHANGES
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’.
* エラーメッセージがない場合
IF SY-SUBRC <> 0.
COMMIT WORK AND WAIT.
ELSE.
ROLLBACK WORK.
ENDIF.
(サンプルコードは以上です。)
受注伝票変更BAPIは、このような使い方になっております。