トップ > 技術コラムNews > SAP技術情報 > 「SAP SDモジュールとは」No.5 受注伝票変更

更新日 

「SAP SDモジュールとは」No.5 受注伝票変更

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は、このような使い方になっております。

 

LINEで送る
Pocket

SAP案件紹介や独立前相談

ほとんどのSAPコンサルタントの方は、独立すると、まずは当社へご登録いただいております。

60秒で無料登録

案件情報やSAP技術情報を
気軽に受け取る

メルマガ登録

つの情報を送るだけで案件紹介へ

    御氏名
    メールアドレス
    電話番号
    生年月日

    つの情報を送るだけで案件紹介へ

      御氏名
      メールアドレス
      電話番号
      生年月日