iDempiere 通貨レートの使い方|会計 操作マニュアル・技術仕様
📖 会計の全体像: 会計の全体図 も合わせてご覧ください。
通貨レートは、伝票金額をある通貨から別の通貨へ換算する際に使用する為替レートを定義するウィンドウです。通貨ペア・レートタイプ・有効期間ごとにレートを登録し、多通貨の伝票処理や会計転記の換算に使われます。
📌 ポイント: 換算に使用されるのは掛算レート(MultiplyRate)のみです。割算レートは表示用で、片方を入力するともう片方は逆数として自動計算されます。
通貨レートでできること
Section titled “通貨レートでできること”- 通貨ペアごとの為替レート登録(元通貨 → 目標通貨)
- 通貨レートタイプ別のレート管理(スポット等の複数タイプ)
- 有効開始日〜有効終了日による期間管理
- 掛算レート入力による割算レートの自動計算(逆数)
通貨レートは単一タブ構成です。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 通貨レート | C_Conversion_Rate | 約10項目 | 通貨ペア・タイプ・期間ごとの換算レート |
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 メニューから開く<br/>会計管理 > 会計設定 > 通貨レート"] --> B["➕ 新規ボタン"]
B --> C["💱 通貨・目標通貨を選択<br/>(例: USD → JPY)"]
C --> D["🏷️ 通貨レートタイプを選択<br/>(例: スポット)"]
D --> E["📅 有効開始日・有効終了日<br/>を設定"]
E --> F["🔢 掛算レートを入力<br/>(割算レートは自動計算)"]
F --> G["💾 保存<br/>(期間重複チェックが実行される)"]
⚠️ 注意: 同一の通貨ペア・レートタイプで有効期間が重複するレコードは保存できません(
MConversionRate.beforeSave()の重複チェック)。レート改定時は既存レコードの有効終了日を確認してから新しい期間を登録してください。
アクセス方法
Section titled “アクセス方法”メニューから「会計管理 > 会計設定 > 通貨レート」を開きます。
- ツールバーの「新規」ボタンをクリック
- レート情報を入力:
- 通貨: 換算元の通貨(例:
USD) - 目標通貨: 換算先の通貨(例:
JPY) - 通貨レートタイプ: 適用するレートタイプ
- 有効開始日: この日を含む適用開始日(必須)
- 有効終了日: この日を含む適用終了日(保存時に必須)
- 掛算レート: 元通貨額に掛けるレート(例:
150.25)
- 通貨: 換算元の通貨(例:
- 「保存」をクリック
項目リファレンス
Section titled “項目リファレンス”通貨レートタブ
Section titled “通貨レートタブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 通貨 | 必須 | 選択 | 換算元の通貨 |
| 目標通貨 | 必須 | 選択 | 換算先の通貨 |
| 通貨レートタイプ | 必須 | 選択 | レートの種類(スポット等) |
| 有効開始日 | 必須 | 日付 | 適用開始日(当日を含む) |
| 有効終了日 | - | 日付 | 適用終了日(保存時には入力必須) |
| 掛算レート | 必須 | 数値 | 元通貨に掛けて目標通貨額を算出(0より大きい値) |
| 割算レート | 必須 | 数値 | 表示用。掛算レートの逆数が自動セット |
| 有効 | 必須 | チェック | レコードの有効フラグ |
全項目は 画面リファレンス: 通貨レート を参照してください。
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 保存時に「有効終了日」の必須エラーになります
Section titled “Q. 保存時に「有効終了日」の必須エラーになります”MConversionRate.beforeSave() は有効終了日(ValidTo)が未入力の場合に FillMandatory エラーを返します。画面上の必須マークは有効開始日のみですが、保存には有効終了日も必要です。また有効終了日は有効開始日より後の日付でなければなりません。
Q. 「期間が重複している」エラーで保存できません
Section titled “Q. 「期間が重複している」エラーで保存できません”同じ通貨ペア(通貨・目標通貨)・同じ通貨レートタイプ・同じクライアント/組織で、有効期間が既存レコードと重なると保存できません。日次でレートを更新する運用では、期間を 1 日単位(開始日=終了日)で登録すると重複を避けられます。
Q. USD→JPY を登録すれば JPY→USD の換算もできますか?
Section titled “Q. USD→JPY を登録すれば JPY→USD の換算もできますか?”いいえ。換算は登録された方向の掛算レートのみを使用するため、逆方向の換算が必要な場合は JPY→USD のレコードを別途登録してください(割算レートは表示用で、逆方向換算には使われません)。
Q. レートを 0 やマイナスで登録できますか?
Section titled “Q. レートを 0 やマイナスで登録できますか?”できません。beforeSave() で掛算レートが 0 以下の場合はエラーになります。
🛠 技術仕様(開発者向け)
通貨レートは C_Conversion_Rate テーブル(アクセスレベル: System+Client)に格納され、MConversionRate クラス(526行)が保存時バリデーションと換算計算(convert / getRate)を担います。伝票の会計処理・多通貨換算のすべてがこのクラスの静的メソッドを経由します。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MConversionRate {
+convert(ctx, Amt, CurFrom, CurTo, ConvDate, ConvType, Client, Org) BigDecimal$
+convertBase(ctx, Amt, CurFrom, ConvDate, ConvType, Client, Org) BigDecimal$
+getRate(CurFrom, CurTo, ConvDate, ConvType, Client, Org) BigDecimal$
+setMultiplyRate(MultiplyRate) void
+setDivideRate(DivideRate) void
#beforeSave(newRecord) boolean
}
class X_C_Conversion_Rate {
<<generated>>
}
class PO {
<<abstract>>
}
MConversionRate --|> X_C_Conversion_Rate
X_C_Conversion_Rate --|> PO
MConversionRate ..> MCurrency : 精度参照
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MConversionRate.java
関連DBテーブル
Section titled “関連DBテーブル”C_Conversion_Rate(通貨レート)
Section titled “C_Conversion_Rate(通貨レート)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_Conversion_Rate_ID | ID | PK | レートID | 主キー |
| C_Currency_ID | Table | Y | 換算元通貨 | |
| C_Currency_ID_To | Table | Y | 目標通貨 | |
| C_ConversionType_ID | TableDirect | Y | 通貨レートタイプ | |
| ValidFrom | Date | Y | 有効開始日 | |
| ValidTo | Date | N | 有効終了日 | beforeSave で実質必須 |
| MultiplyRate | Number | Y | 掛算レート | callout: CalloutEngine.rate |
| DivideRate | Number | Y | 割算レート | callout: CalloutEngine.rate |
ビジネスロジック
Section titled “ビジネスロジック”beforeSave() のバリデーション
Section titled “beforeSave() のバリデーション”MConversionRate.beforeSave() の処理(ソース確認済み):
- 同一通貨チェック: 通貨と目標通貨が同じ場合はエラー
- レート正値チェック: 掛算レートが 0 以下の場合はエラー
- 有効終了日必須: ValidTo が null の場合は FillMandatory エラー
- 期間整合性: ValidTo が ValidFrom より前の場合はエラー
- 期間重複チェック: 同一通貨ペア・レートタイプ・クライアント/組織で、有効レコードの期間と重複する場合はエラー
逆数の自動計算
Section titled “逆数の自動計算”setMultiplyRate() は掛算レートをセットすると同時に割算レート(1/rate)を、setDivideRate() はその逆を自動セットします。画面では両カラムの callout org.compiere.model.CalloutEngine.rate が同じ動作を提供します。
flowchart TD
A[convert 呼び出し] --> B{通貨が同じ?}
B -->|Yes| C[金額をそのまま返却]
B -->|No| D[getRate で掛算レートを検索<br/>通貨ペア+タイプ+換算日が期間内]
D --> E{レートあり?}
E -->|No| F[null 返却<br/>(呼び出し側でエラー処理)]
E -->|Yes| G[金額 × MultiplyRate]
G --> H[目標通貨の標準精度で丸め]
拡張ポイント
Section titled “拡張ポイント”- Callout:
MultiplyRate/DivideRateにorg.compiere.model.CalloutEngine.rateが定義済み(逆数の自動計算) - レート自動取込: 外部レート API からの取込は、
MConversionRateを生成する定期プロセス(Scheduler 登録の Java プロセス)として実装するのが定石です - Model Validator: レート変動幅の妥当性チェック等を
modelChangeで追加できます
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”日次レートの外部API自動取込や、社内レート・税関レートなど複数レートタイプの運用設計も、OSGi プラグインで安全に実装できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。