スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

受注伝票登録BAPI

BAPI_SALESORDER_CREATEFROMDAT2

概要

受注伝票を新規登録するBAPIです。販売伝票カテゴリが「C:受注」の伝票タイプのデータのみ登録可能です。パラメータが多く非常に高機能なのが特徴で、コツは要りますが設定値次第で多彩なデータを登録することができます。ただし万能というわけではなく、請求計画などBAPIのパラメータに未対応の項目もあるので使う際には確認が必要です。

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

パラメータ

受注伝票のテーブル構成に近い形でBAPIのパラメータも構成されています。
(受注ヘッダ、明細、納入日程行、条件、取引先機能など)

受注登録のBAPIでは値の初期値提案機能があり、すべてのパラメータに値を設定する必要はありません。登録時にブランクの項目はマスタがあるものはマスタから初期設定されます。
(例えば、パラメータに品目コードを設定すると品目テキストは自動で初期提案されるのでBAPIに設定しなくてもよい)

このような初期提案機能があるため、項目値が未設定なのか明示的にブランクを設定しているのかを判別するために、BAPIにはチェックボックス(またはチェックリスト)というパラメータがあります。

受注を登録するのに必要なパラメータはその環境のカスタマイズにより異なりますが、一般的な出荷ありの明細を登録するには最低限以下のパラメータ設定が必要です。
【必要なパラメータ】
受注ヘッダ、取引先機能(の受注先)、受注明細、納入日程行、条件とそれぞれのチェックボックスのパラメータ
パラメータ一覧
種別パラメータ説明
インポート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参照キーの出力テーブル
EXTENSIONINVBAK、VBAP、VBEP のカスタマ拡張
PARTNERADDRESSESアドレス (組織/会社) 用 BAPI 参照構造

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

受注ヘッダ(ORDER_HEADER_IN)には多くの項目がありますが、必須項目は販売伝票タイプ、販売組織、流通チャネル、製品部門です。対となるパラメータとして受注ヘッダチェックリスト(ORDER_HEADER_INX)があります。

チェックリストには更新区分(I:登録、U:変更、D:削除)の設定、および更新する受注ヘッダの項目に「X」を設定します。項目にブランクを設定したい場合は、マスタから初期値提案がされないようにチェックリストの項目に「X」を設定します。

受注先の項目は受注ヘッダではなく取引先機能(ORDER_PARTNERS)のパラメータにあります。
取引先機能パラメータは、取引先機能、得意先コード、明細番号の入力が必要です。ヘッダの取引先の場合は明細番号に「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取引先機能AGWERERG
PARTN_NUMB得意先コードCUST0001CUST0123CUST0001CUST0001
ITM_NUMBER明細番号000000000000000000000000

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

受注明細(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納入日程日付20140601
REQ_QTY受注数量5
設定例:ORDER_SCHEDULES_INX
項目項目名称設定値
ITM_NUMBER販売伝票明細000010
SCHED_LINE納入日程行0001
UPDATEFLAG更新区分I
REQ_DATE納入日程日付X
REQ_QTY受注数量X

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

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

チェックリストパラメータの使い方は受注ヘッダと同じですが、条件マスタから価格が提案されている場合は、更新区分=Uを設定することでマスタの金額の変更もできます。

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

サンプルコード

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

BAPIは例外を発生させない仕様なので、エラー判定はRETURNパラメータにメッセージタイプが「E」のレコードが1件以上あるかどうかで判定をします。
DATA: LS_ORDER_HEADER_IN      TYPE BAPISDHD1,
      LS_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.

* パラメータに値を設定する
LS_ORDER_HEADER_IN-DOC_TYPE = 'TA'. " 販売伝票タイプ
*             :
*          (以下略)

CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
  EXPORTING
    ORDER_HEADER_IN      = LS_ORDER_HEADER_IN
    ORDER_HEADER_INX     = LS_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'.

* エラーメッセージがない場合
IF SY-SUBRC <> 0.
  COMMIT WORK AND WAIT.
ELSE.
  ROLLBACK WORK.
ENDIF.

コメントの投稿

非公開コメント

プロフィール

Z*

Author:Z*

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

このブログを気に入って頂いた方は、リンクを張っていただけると嬉しいです。

カテゴリ
最新記事
最新コメント
月別アーカイブ
検索フォーム
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。