コンテンツにスキップ

iDempiere 減価償却方法の使い方|固定資産管理 操作マニュアル・技術仕様

📖 固定資産管理の全体像: 固定資産管理の全体図 も合わせてご覧ください。

減価償却方法(Depreciation Methods)は、システムで利用可能な減価償却の計算方式(Depreciation Functions)を定義・確認するマスタウィンドウです。ここに登録された償却タイプ(DepreciationType)が、資産グループ・資産の償却計算時に呼び出される計算ロジックを決定します。

📌 ポイント: 償却タイプのコード(SL 等)はソースコード内の計算メソッドと 1:1 で対応しています。画面から行を追加しただけでは新しい計算方式は動作せず、対応する計算実装(IDepreciationMethod)が必要です。

  • 利用可能な償却計算方式の一覧確認
  • 償却タイプコード(DepreciationType)と名称の管理
  • 説明文による計算方式の文書化
  • 有効フラグによる利用可否の制御

シンプルな 1 タブ構成です。

タブ名テーブル項目数役割
Depreciation FunctionsA_Depreciation約6項目償却計算方式の定義(名称・タイプ・説明)
graph TD
    A["🚀 メニューから開く<br/>資産管理 > Depreciation Setup ><br/>Depreciation Methods"] --> B["🔍 標準登録済みの<br/>償却方式を確認<br/>(SL=定額法 等)"]
    B --> C{"新しい計算方式が<br/>必要?"}
    C -->|No| D["✅ 資産グループ・資産の<br/>償却設定で方式を選択"]
    C -->|Yes| E["🛠 IDepreciationMethod 実装を<br/>OSGi プラグインで開発"]
    E --> F["➕ 新規で償却タイプを登録<br/>(Name・DepreciationType)"]
    F --> D

メニューから開く 資産管理 > Depreciation Setup > Depreciation Methods 標準登録済みの 償却方式を確認 (SL=定額法 等) 新しい計算方式が 必要? 資産グループ・資産の 償却設定で方式を選択 IDepreciationMethod 実装を OSGi プラグインで開発 新規で償却タイプを登録 (Name・DepreciationType)

アクセス方法(メニューパス)

Section titled “アクセス方法(メニューパス)”

メニューから「資産管理 > Depreciation Setup > Depreciation Methods」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. 基本情報を入力:
    • Name: 償却方式の名称(必須)
    • DepreciationType: 計算ロジックと対応するタイプコード(必須・10文字)
    • 説明: 計算方式の説明
  3. 保存」をクリック

⚠️ 注意: タイプコードに対応する計算実装が存在しない場合、償却計算時に AssetNotSupportedException が発生します。新規コードの追加は計算実装とセットで行ってください。

項目名必須説明
クライアント必須選択テナント
組織必須選択対象組織
Name必須文字列償却方式の名称
DepreciationType必須文字列計算ロジック対応コード(例: SL)
説明-文字列計算方式の説明
有効必須チェック利用可否

全項目一覧はリファレンス参照

標準実装されている償却タイプ

Section titled “標準実装されている償却タイプ”

ソースコード(MDepreciation.invoke())で分岐が実装されている償却タイプは以下の通りです。

タイプコード計算メソッド内容
SLapply_SL定額法(Straight Line)
ARH_VARapply_ARH_VAR可変償却(ARHIPAC 実装)
ARH_AD1apply_ARH_AD1加速償却 1(ARHIPAC 実装)
ARH_AD2apply_ARH_AD2加速償却 2(ARHIPAC 実装)
ARH_ZEROapply_ARH_ZERO償却なし(最終期調整も不要)

標準の MDepreciation に組み込みで実装されている分岐は上表の 5 タイプです。日本の定率法をコード分岐に頼らず追加する場合は、IDepreciationMethod インターフェースの OSGi 実装として計算ロジックを登録します。

Q. 画面で行を追加したのに償却計算がエラーになります

Section titled “Q. 画面で行を追加したのに償却計算がエラーになります”

DepreciationType に対応する計算実装が見つからない場合、MDepreciation.invoke()AssetNotSupportedException を送出します。タイプコードと計算実装(組み込み分岐または IDepreciationMethod)の対応を確認してください。

Q. 登録済みの方式を変更するとすぐ反映されますか?

Section titled “Q. 登録済みの方式を変更するとすぐ反映されますか?”

MDepreciation はイミュータブルキャッシュ(markImmutable() / 静的 get())を持つため、コード上はキャッシュ経由で参照されます。変更が即時反映されない場合はキャッシュリセットを実施してください。

🛠 技術仕様(開発者向け)

減価償却方法は A_Depreciation テーブル(削除可・アクセスレベル 7)に格納されるマスタです。MDepreciation クラス(520行)が償却タイプごとの計算ディスパッチを実装し、ImmutablePOSupport 相当のキャッシュ(markImmutable()・静的 get())を提供します。

classDiagram
    class MDepreciation {
        +get(A_Depreciation_ID) MDepreciation
        +get(depreciationType) MDepreciation
        +getPrecision() int
        +requireLastPeriodAdjustment() boolean
        +invoke(assetwk, assetAcct, period, accumDep, method) BigDecimal
        +canInvoke(...) boolean
        +markImmutable() MDepreciation
    }
    class X_A_Depreciation {
        <<generated>>
    }
    class IDepreciationMethod {
        <<interface>>
        +caclulateDepreciation(dto) BigDecimal
    }
    class MDepreciationWorkfile {
        +getA_Asset_Cost() BigDecimal
        +getA_Accumulated_Depr() BigDecimal
    }
    class PO {
        <<abstract>>
    }
    MDepreciation --|> X_A_Depreciation
    X_A_Depreciation --|> PO
    MDepreciation ..> IDepreciationMethod : delegates if provided
    MDepreciation ..> MDepreciationWorkfile : calculates for

+get(A_Depreciation_ID) MDepreciation +get(depreciationType) MDepreciation +getPrecision() int +requireLastPeriodAdjustment() boolean +invoke(assetwk, assetAcct, period, accumDep, method) BigDecimal +canInvoke(...) boolean +markImmutable() MDepreciation <> <> +caclulateDepreciation(dto) BigDecimal +getA_Asset_Cost() BigDecimal +getA_Accumulated_Depr() BigDecimal <> > X_A_Depreciation X_A_Depreciation --

パッケージ: org.compiere.model ソースファイル: org.adempiere.base/src/org/compiere/model/MDepreciation.java

カラム名必須説明備考
A_Depreciation_IDIDPK主キー
AD_Client_IDTableDirectYクライアント
AD_Org_IDTableDirectY組織
NameStringY名称120文字
DepreciationTypeStringY償却タイプコード10文字
DescriptionStringN説明
TextMemoN詳細説明
ProcessedYesNoY処理済み既定値 N
IsActiveYesNoY有効

invoke() — 償却額計算のディスパッチ

Section titled “invoke() — 償却額計算のディスパッチ”

invoke(MDepreciationWorkfile, MAssetAcct, A_Current_Period, Accum_Dep, IDepreciationMethod) の処理:

  1. canInvoke() チェック(false なら 0 を返却)
  2. IDepreciationMethod が渡された場合: DepreciationDTO(取得原価・残存価額・耐用月数・供用開始日・累計償却額等)を組み立てて caclulateDepreciation(dto) に委譲
  3. 渡されない場合は DepreciationType の文字列で組み込みメソッドへ分岐(SL / ARH_VAR / ARH_AD1 / ARH_AD2 / ARH_ZERO)
  4. 未知のタイプは AssetNotSupportedException を送出
  5. 結果を getPrecision() 桁で HALF_UP 丸め

償却タイプが ARH_ZERO 以外の場合に true を返し、最終期の端数調整(帳簿価額との差額調整)が必要であることを示します。

MDepreciation.get(ctx, id) / get(ctx, depreciationType) はイミュータブルキャッシュ経由で取得します。タイプコードによる逆引き(get(String))があるため、償却計算のホットパスで DB クエリを繰り返さない設計です。

拡張ポイント(カスタマイズ箇所)

Section titled “拡張ポイント(カスタマイズ箇所)”

IDepreciationMethod の OSGi 実装(推奨)

Section titled “IDepreciationMethod の OSGi 実装(推奨)”

コア改変なしで独自の償却計算(日本の定率法・級数法等)を追加する標準的な方法です:

public class DecliningBalanceMethod implements IDepreciationMethod {
@Override
public BigDecimal caclulateDepreciation(DepreciationDTO dto) {
// dto.totalAmount(取得原価), dto.salvage(残存価額),
// dto.useFullLife(耐用月数), dto.accumulatedCost(償却累計)等から
// 当期償却費を算出して返す
return expense;
}
}

DepreciationDTO には period / salvage / totalAmount / useFullLife(月数)/ inServiceDate / accountDate / accumulatedCost / startPeriodDepreciation / scale が渡されます。

A_Depreciation の保存時にタイプコードの命名規則や実装存在チェックを追加できます。このテーブルに標準 Callout はありません。

リファレンスページ・メニューに関連プロセスの登録はありません(参照系マスタ)。


日本の税制に沿った定率法・一括償却資産・少額減価償却資産の特例などは、IDepreciationMethod の実装プラグインとして追加できます。

As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。

OSS ERP導入・カスタマイズサービスの詳細はこちら