会計伝票登録 BAPI BAPI_ACC_DOCUMENT_POST

会計伝票登録 BAPI BAPI_ACC_DOCUMENT_POST と OBJ_TYPE、BUS_ACT について

BAPI_ACC_DOCUMENT_POST は、FI 会計伝票を自動登録する際に使用する BAPI ですが、 BAPI を実行する際にどのような値を設定すればよいのかよく分からないパラメーターがいくつか存在します。 今回は、EXPORT パラメーター DOCUMENTHEADER の OBJ_TYPE、BUS_ACT の2つのパラメーターについて解説します。

EXPORT パラメーター DOCUMENTHEADER-OBJ_TYPE は、会計伝票のヘッダー項目 BKPF-AWTYP「参照取引」に対応するパラメーターです。 このパラメーターに値を指定しないで BAPI を実行すると、

51-1.jpg

このようなエラーで伝票登録が失敗することがあります。 エラーメッセージで「必須項目」と表示されれば、何か値を指定しなければと考えることになります。

以下の画面コピーは、Tr-Cd: FB01 を使ってマニュアルで会計伝票を登録した際のヘッダーデータです。

51-2.jpg

上記のように、SAP GUI で会計伝票をマニュアルで登録すると、参照取引には値 'BKPF' が自動的に更新されます。 そこで、同様の伝票を BAPI で登録するために、パラメーター DOCUMENTHEADER-OBJ_TYPE に値 'BKPF' を設定をして実行すると、

51-3.jpg

のようなエラーで伝票登録が失敗します。 インターネット等で調べると、BAPI で会計伝票を登録するには、 'BKPF' の代わりに 'BKPFF' を指定すればよいとの情報をよく見かけます。 しかし、実際に値 'BKPFF' を指定して BAPI を実行しても、

51-4.jpg

のように、同じようなエラーでまた失敗してしまいます。

参照取引コードは、テーブル TTYP「会計用対象タイプ」で管理されています。

51-5.jpg

BAPI のパラメーター DOCUMENTHEADER-OBJ_TYPE には、このテーブルに登録されているコードを指定すればよいので、 手当たり次第に TTYP に設定されたコードを試してみると、例えば、

documentheader-obj_type = 'IDOC'.
documentheader-obj_key = 'TEST'.
documentheader-obj_sys = 'TEST'.

のように、OBY_TYPE に 'IDOC' を指定して、OBJ_KEY、OBJ_SYS にダミー値を渡して BAPI を実行すると、 会計伝票登録が成功したりします。

しかし、会計伝票の参照取引 BKPF-AWTYP は、その会計伝票が何のオブジェクトから生成されたのかを識別するためのパラメーターで、 本来 'IDOC' は、IDoc データを受信して自動的に生成された会計伝票に更新されるコードです。 全く IDoc に関係ない会計伝票登録で参照取引コード 'IDOC' を指定するのは、本来好ましいことではないかもしれません。

では、改めて、どのような値を DOCUMENTHEADER のパラメーターに指定してあげればよいのでしょうか? 他のオブジェクト(例えば、SD 請求伝票や MM 入出庫伝票など)の参照なしで、普通に会計伝票を登録する場合には、

・参照取引パラメーター DOCUMENTHEADER-OBJ_TYPE には何も値を指定しない。
・参照キーパラメーター DOCUMENTHEADER-OBJ_KEY にも何も値を指定しない
・参照システムパラメーター DOCUMENTHEADER-OBJ_SYS にも何も値を指定しない
・伝票タイプパラメーター DOCUMENTHEADER-DOC_TYPE に会計伝票タイプ(例えば、'AB')を指定する。

このルールで DOCUMENTHEADER パラメーターを指定してみてください。

51-6.jpg

のように、参照取引コード BKPF-AWTYP に自動的に値 'BKPFF' が設定され、会計伝票登録が成功します。

最初に紹介したように、BAPI のエラーメッセージから参照取引パラメーターが必須指定と誤解してしまうと、 パラメーター設定の迷宮に入り込んでしまうのですが、 参照取引パラメーターは指定しない、と同時に参照キー、参照システムも指定しない、 その代わりに会計伝票タイプを指定すれば、簡単に BAPI で会計伝票を登録することができます。 なお、この方法は、SAP ノート 561175「FI 伝票を参照とした BAPI 転記」で紹介されていますので、 気になる方は SAP ノートを読んでみてください。

続いて、EXPORT パラメーター DOCUMENTHEADER-BUS_ACT ですが、これは、会計伝票のヘッダー項目 BKPF-GLVOR「取引」に対応するパラメーターです。 この項目は、会計伝票画面に表示されないシステム項目なので、どんな値を指定すればよいのか全く見当がつきません。 しかし、値を指定しないで BAPI を実行すると、

51-7.jpg

のようにエラーが発生して伝票登録に失敗します。

BUS_ACT パラメーターについて、BAPI_ACC_DOCUMENT_POST の汎用モジュール文書の冒頭に以下のような記述があります。

 このメソッドを使用して、特定の取引について会計管理で転記を登録できます。

 利用可能な ( 取引):
・通常は総勘定元帳のみに影響する転記 (RFBU)
・請求: 販売管理における請求について、会計管理では関連する請求データが提供されています。
  (SD00) 請求伝票
・会計管理では、 請求書受領から発生するロジスティクスシステムのデータを使用することが
 できます。 (RMRP)
・在庫移動は販売管理のトランザクションまたは在庫転記により開始されます。 ロジスティクス
 の内部では、これは 在庫管理の倉庫在庫変更につながります。 これは会計管理においては転記
 となります。 このため、会計管理ではロジスティクスから関連するデータが提供されています。
  (RMWA)

かなり難解な日本語なのですが、SD、MM トランザクションを参照した転記や棚卸資産に関係する転記でなければ、 取引パラメーター DOCUMENTHEADER-BUS_ACT には、固定値 'RFBU' を指定すればよいと解釈できます。 実際に、

documentheader-bus_act = 'RFBU'.

の1行を追加して BAPI を実行すると、

51-8.jpg

以上のように、会計伝票登録が成功します。

なお、パラメーター DOCUMENTHEADER-BUS_ACT の値は、プログラム LACC9F10 のサブルーチン CHECK_GLVOR でチェック処理が行われているようですので、 興味のある方は、ソースコードから取引パラメーターの仕様を解析してみてください。

最後に、今回の動作検証で使用した会計伝票登録プログラムのコースコードを公開します。 とても単純な仕様で、BAPI_ACC_DOCUMENT_POST を使って、 借方、貸方双方に同じ当座預金勘定(コード 111300)、金額(1,000 円)を転記する会計伝票を登録しています。 今回説明した DOCUMENTHEADER パラメーターの設定方法さえ分かれば、 このような簡単なコーディングで会計伝票を登録することができます。

REPORT ZFU00001.


********************************************************************
* データ宣言
********************************************************************

DATA: documentheader LIKE bapiache09,
 accountgl LIKE bapiacgl09 OCCURS 0 WITH HEADER LINE,
 currencyamount LIKE bapiaccr09 OCCURS 0 WITH HEADER LINE,
 return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.


********************************************************************
* メイン処理
********************************************************************

start-of-selection.


*-------------------------------------------------------------------
* 会計伝票登録 BAPI のパラメーターを初期化する。
*-------------------------------------------------------------------

REFRESH: accountgl,
 currencyamount,
 return.

 CLEAR: documentheader,
 accountgl,
 currencyamount,
 return.

*-------------------------------------------------------------------
* ヘッダーデータを編集する。
*-------------------------------------------------------------------

* OBJ_TYPE、OBJ_KEY、OBJ_SYS を指定せずに、
* DOC_TYP に会計伝票タイプを指定さえすれば、
* BKPF-AWTYP = 'BKPFF' の会計伝票が生成される。

documentheader-doc_type = 'AB'.

* 普通の会計伝票登録であれば、BUS_ACT は 'PFBU' 固定で OK。

documentheader-bus_act = 'RFBU'.

 documentheader-username = sy-uname. "登録ユーザー名
documentheader-comp_code = 'F001'. "会社コード
documentheader-doc_date = sy-datum. "伝票日付
documentheader-pstng_date = sy-datum. "転記日付

*-------------------------------------------------------------------
* 借方GL明細データを作成する。
*-------------------------------------------------------------------

CLEAR accountgl.
 accountgl-itemno_acc = 1. "明細番号
accountgl-gl_account = '0000111300'. "勘定コード
APPEND accountgl.

 CLEAR currencyamount.
 currencyamount-itemno_acc = 1. "明細番号
currencyamount-currency = 'JPY'. "通貨コード
currencyamount-amt_doccur = 1000. "転記金額
APPEND currencyamount.

*-------------------------------------------------------------------
* 貸方GL明細データを作成する。
*-------------------------------------------------------------------

CLEAR accountgl.
 accountgl-itemno_acc = 2. "明細番号
accountgl-gl_account = '0000111300'. "勘定コード
APPEND accountgl. 

 CLEAR currencyamount.
 currencyamount-itemno_acc = 2. "明細番号
currencyamount-currency = 'JPY'. "通貨コード
currencyamount-amt_doccur = 1000 * -1. "転記金額(マイナス=貸方)
APPEND currencyamount.

*-------------------------------------------------------------------
* 会計伝票登録の BAPI 汎用モジュールを実行する。
*-------------------------------------------------------------------

CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
 EXPORTING
 documentheader = documentheader
 TABLES
 accountgl = accountgl
 currencyamount = currencyamount
 return = return.

* 汎用モジュールが正常終了した場合は、コミット処理を行う。

IF sy-subrc = 0.

* エラーメッセージが出力されていた場合は、コミット処理を中止する。

LOOP AT return.
 IF return-type CA 'EA'.
 EXIT.
 ENDIF.
 ENDLOOP.

 IF return-type CN 'EA'.

* コミット処理の BAPI 汎用モジュールを実行する。

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
 EXPORTING
 wait = 'X'.

 ENDIF.

 ENDIF.

* メッセージを画面に出力する。

LOOP AT return.
 WRITE: / return-message.
 ENDLOOP.

 

posted @ 2019-05-07 11:11  Park_SAP  阅读(11368)  评论(0编辑  收藏  举报