0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Currency Conversion directly in CDS VIEW

Last updated at Posted at 2024-08-22

CDS VIEW上で直接通貨換算を行う方法

執筆の経緯

システム間連携のためをAPI作成することになったが、カスタムCDS VIEWではカスタムクエリの様に、通貨の換算処理をすることができないため、テーブルから換算前後の通貨を複合キーにすることで比率を呼び出し、換算を実施しようとした。しかし、カスタムCDSアプリではループ処理を回すような記述?が使用できないためSAP標準の関数を使用することとした。その調査を実施したため備忘として書き残す。

サンプルコード

CURRENCY_CONVERSION
currency_conversion(
    amount => DataSauce.NetAmount,
    source_currency => DataSauce.TransactionCurrency,
    target_currency => cast( 'USD' as ABAP.CUKY( 5 ) ),
    exchange_rate_date => DataSauce.ConversionDate,
    exchange_rate_type => 'M',
    error_handling => 'SET_TO_NULL',
    round => 'false',
    decimal_shift => 'true',
    decimal_shift_back => 'false'
)  

各パラメータの詳細

パラメータ名称 データ型  制御項目
amount CURR 換算対象の金額
source_currency CUKY 換算元の通貨
target_currency CUKY 換算後の通貨
exchange_rate_date DATS 換算レートの基準日
exchange_rate_type CHAR 換算レートタイプ
client CLNT クライアント番号(パブクラでは指定不要)
round CHAR 四捨五入の要否。trueの場合、returnが丸められる。
decimal_shift CHAR trueの場合引数は変換前に、変換元通貨の小数点以下の桁数を引いた 2^10倍される。
decimal_shift_back CHAR trueの場合引数は変換前に、変換元通貨の小数点以下の桁数を引いた 2^10除される。
error_handling CHAR エラー時の挙動を制御。nullもしくはerrorを返却する。

本関数で実現可能なこと

CURRENCY_CONVERSIONでは、正式なパラメータamountに渡された値の通貨変換が可能。 returnはamountに渡された実際のパラメータと同じ技術的属性を持つデータ型CURRを保持し、通貨変換は、パッケージSFIBのデータベーステーブルTCURに保存されたクライアント固有のルールに基づいて実行される。 これらのルールは、Trcd:OB08 を使用して編集可能。

警告
本関数では換算元の金額と換算レートの少数第3位以下がデフォルトで丸められるため誤差が発生する。
金額的なインパクトは少ないが、完全な値が欲しい場合は換算レートと伝票のテーブルを使用して直接換算を実施する必要がある。

まとめ

一部の制約はあるものの一部用途では活用出来るというのが所感。
デフォルトで丸め誤差が発生するため、AP,AR,受発注側でのレポート利用は、クライアントの反応を見た感じでは利用は困難というのが所感。デフォルトの丸め誤差については、無効化が不可であるとの情報を受領しており、今後の機能拡充も見込めないとのこと。さらなる詳細については後述のリファレンスを確認されたし。

リファレンス

ABAP CDS - Conversion Functions for Units and Currencies

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?