ABAP 請求伝票(Invoice)の保存時のユーザExit(User-Exit)

  BADI/User-Exit

概要

請求伝票(Invoice)の保存時のユーザExitについて受注伝票や出荷伝票のユーザExitのMV45AFZZ・MV50AFZ1にはuserexit_save_document やuserexit_save_document_prepareというフォームが用意されている。

その為、保存ボタンを押した際の処理は上記で書けばいいというのが明確にわかる。しかし、請求伝票(RV60AFZZ)には上記名称のフォームはなく、以下のフォームだけが用意されている。

USEREXIT_ACCOUNT_PREP_KOMKCV

USEREXIT_ACCOUNT_PREP_KOMPCV

USEREXIT_NUMBER_RANGE

USEREXIT_PRICING_PREPARE_TKOMK

USEREXIT_PRICING_PREPARE_TKOMP

必ず会計転記と同タイミングで処理して良いのであればUSEREXIT_ACCOUNT_PREP_KOMKCV等で
処理して問題ないだろう。しかし、会計転記がエラーとなった場合(請求伝票が採番されて登録されたタイミング)等で
処理をしたい場合は適切な場所が存在しない。
そんな時は汎用モジュール:RV_INVOICE_DOCUMENT_ADDに以下記述が存在しているか確認してみよう
※古い環境だと無いようです。
PERFORM userexit_save_document prepare
IN PROGRAM saplv60a IF FOUND.
 
上記述があってもフォーム自体は用意されていない為、RV60AFZZに自身ででフォームを追加して処理を書こう。

サンプルコード

*** INCLUDE RV60AFZZ
FORM userexit_save_document_prepare.

* 構造: XVBRK
* 内部テーブル: XVBRP
  LOOP AT xvbrp WHERE vbeln = xvbrk_key-vbeln.
  ENDLOOP.

ENDFORM.

ユーザExitはXVBRK(ヘッダ有り)のループ内で動作する為、XVBRKを使う事ができる。また、明細はXVBRPから取得する事ができるが、このテーブル内の伝票番号は$0000000Xという値の為、ヘッダテーブルと紐づける事ができない。標準プログラムではこの紐づけの為に、XVBRK_KEYという構造をもっている為、その変数を使用して明細を取得しよう。