受注伝票変更BAPI

BAPI_SALESORDER_CHANGE

概要

受注伝票を変更するBAPIです。販売伝票カテゴリが「C:受注」の伝票タイプのデータのみ変更可能です。基本的な使い方は受注登録BAPIと同様ですが、後続伝票がある場合などの状況により挙動が変化するため、受注変更の方が正しくパラメータを設定するのが難しくなっています。

尚、返品受注や基本契約などの変更は伝票カテゴリが異なるので別のBAPIを利用します。

パラメータ

受注伝票のテーブル構成に近い形でパラメータも構成されています。受注登録BAPI用のパラメータ構成に近いですが、取引先機能変更用パラメータなど変更BAPI特有のパラメータもあります。

基本的に受注変更のBAPIでは変更したい項目のみパラメータに設定します。変更しない項目も含め利用している項目を全てパラメータに設定すると、変更できない項目はBAPIの入力チェックでエラーになります。そのため変更不要な項目は設定しない方が安全です。
(例えば、受注が請求済みの場合は金額項目が変更不可になる。)
パラメータ一覧
種別パラメータ説明
インポートSALESDOCUMENT受注伝票番号
ORDER_HEADER_IN受注伝票ヘッダ
ORDER_HEADER_INX受注ヘッダチェックリスト
SIMULATIONシミュレーションモード
BEHAVE_WHEN_ERRORエラー処理
INT_NUMBER_ASSIGNMENT明細番号内部採番
LOGIC_SWITCH販売管理チェックボックス: 論理スイッチ
NO_STATUS_BUF_INITNo 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条件チェックボックス
EXTENSIONINVBAK、VBAP、VBEP のカスタマ拡張

受注ヘッダ関連のパラメータを設定する

受注ヘッダ(ORDER_HEADER_IN)には変更したい項目を設定し、対となるパラメータの受注ヘッダチェックリスト(ORDER_HEADER_INX)に更新区分「U」、と変更項目に「X」を設定します。設定方法は受注登録BAPIと同様です。

取引先機能を変更する場合は取引先変更(PARTNERCHANGES)のパラメータに設定します。パラメータには伝票番号、明細番号と更新区分、引先機能、変更前と変更後の取引先コードを設定します。ヘッダの取引先を変更する場合は明細番号には「000000」を設定します。

BAPIの制限事項で受注先(取引先機能=「AG」)の変更はできません。また、取引先機能のIDは、画面に表示される値でなく内部コード値で設定する必要があるので注意してください。(例えば、出荷先「SH」の場合は内部コード値は「WE」)
設定例:ORDER_HEADER_IN
項目項目名称設定値
PURCH_NO_C得意先発注番号PO-1234
設定例:ORDER_HEADER_INX
項目項目名称設定値
UPDATEFLAG更新区分U
PURCH_NO_C得意先発注番号X
設定例:PARTNERCHANGES
項目項目名称設定値
DOCUMENT伝票番号0000001234
ITM_NUMBER明細番号000000
UPDATEFLAG更新区分U
PARTN_ROLE取引先機能X
P_NUMB_OLD取引先コード(変更前)X
P_NUMB_NEW取引先コード(変更後)X
ADDR_LINKアドレス番号X

受注明細関連のパラメータを設定する

受注明細(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)
ITM_NUMBER販売伝票明細000010000020000030
MATERIAL品目コードMAT0001
SHORT_TEXT品目テキスト品目A
PLANTプラント1000
設定例:ORDER_ITEMS_INX
項目項目名称設定値(1)設定値(2)設定値(3)
ITM_NUMBER販売伝票明細000010000020000030
UPDATEFLAG更新区分DUI
MATERIAL品目コードX
SHORT_TEXT品目テキストX
PLANTプラントX
設定例:ORDER_SCHEDULES_IN
項目項目名称設定値(1)設定値(2)
ITM_NUMBER販売伝票明細000020000030
SCHED_LINE納入日程行00010001
REQ_DATE納入日程日付2014060120140611
REQ_QTY受注数量3
設定例:ORDER_SCHEDULES_INX
項目項目名称設定値(1)設定値(2)
ITM_NUMBER販売伝票明細000020000030
SCHED_LINE納入日程行00010001
UPDATEFLAG更新区分UI
REQ_DATE納入日程日付XX
REQ_QTY受注数量X

価格のパラメータを設定する

明細の価格変更は、条件(ORDER_CONDITIONS_IN)に変更したい項目を設定します。主な設定項目は、明細番号、条件タイプ、条件レート、通貨コード、条件単位、価格条件単位です。対となるパラメータとして条件チェックリスト(ORDER_CONDITIONS_INX)があります。チェックリストパラメータの使い方は受注ヘッダと同じです。

金額しか変更しない場合も通貨コードや条件単位、価格条件単位は設定する必要があります。また、条件レートの項目は、内部形式(※)でなく外部形式で設定する必要があるので注意してください。
※例えば日本円(JPY)の場合はプログラム上は1/100の数値になっている。123円は1.23と格納される。
設定例:ORDER_CONDITIONS_IN
項目項目名称設定値
ITM_NUMBER販売伝票明細000010
COND_TYPE条件タイプPR00
COND_VALUE条件レート456
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

サンプルコード

通常の汎用モジュールを実行するのと同様にCALL FUNCTIONで実行します。受注変更のBAPIの内部ではコミットされないため、正常終了時は明示的にコミットを実行する必要があります。

BAPIは例外を発生させない仕様なので、エラー判定はRETURNパラメータにメッセージタイプが「E」のレコードが1件以上あるかどうかで判定をします。
DATA: LS_ORDER_HEADER_IN      TYPE BAPISDH1,
      LS_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               = '0000001234'. " 受注伝票番号
LS_ORDER_HEADER_IN-PURCH_NO_C  = 'PO-1234'.    " 得意先発注番号
LS_ORDER_HEADER_INX-UPDATEFLAG = 'U'.          " 更新区分
LS_ORDER_HEADER_INX-PURCH_NO_C = 'X'.
*             :
*          (以下略)

CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
  EXPORTING
    SALESDOCUMENT        = LV_SALESDOCUMENT
    ORDER_HEADER_IN      = LS_ORDER_HEADER_IN
    ORDER_HEADER_INX     = LS_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.
関連記事

コメントの投稿

非公開コメント

プロフィール

Z*

Author:Z*

このブログではSAPの技術情報について解説をしていきます。

2017年:ブログをリニューアルしました。(旧Zの高速道路)

カテゴリ
最新記事
最新コメント
月別アーカイブ
検索フォーム
リンク