コンテンツにスキップ

iDempiere 収益認識の使い方|取引先管理 操作マニュアル・技術仕様

📖 取引先管理の全体像: 取引先管理の全体図 も合わせてご覧ください。

収益認識は、売上をどのタイミング・どの間隔で収益として計上するかを定義するマスタです。サブスクリプションや保守契約のように、請求時に一括で売上計上せず、期間按分またはサービス提供実績に応じて前受収益から売上へ振り替える会計処理を自動化します。

📌 ポイント: 収益認識を設定した品目を請求書で転記すると、売上は一旦「前受収益」勘定に計上され、収益認識計画(Plan)と認識スケジュール(Run)が自動生成されます。計画・実行タブは自動生成結果の照会用です。

  • 時間ベースの収益認識ルール定義(月次・四半期・年次の認識頻度と認識月数)
  • 固定認識日の設定(毎月の特定日に認識、初月は日割按分)
  • サービスレベルベースの認識ルール定義(Service タブで割合を配分)
  • 請求時に自動生成された収益認識計画(対象金額・認識済み金額・勘定科目)の照会
  • 認識実行履歴(認識日・認識額・GL仕訳へのリンク)の照会

4タブ・3階層の構成です。ルール定義は「収益認識」「Service」タブのみで、「収益認識計画」「収益認識実行」は請求書転記時に自動生成されるデータの照会タブです。

タブ名テーブル項目数役割
収益認識C_RevenueRecognition9項目認識ルール(時間ベース/頻度/月数/固定認識日)
ServiceC_RevenueRecog_Service7項目サービスレベルベース時の認識割合(明細番号・パーセント)
収益認識計画C_RevenueRecognition_Plan11項目請求伝票明細ごとの認識計画(自動生成・照会)
収益認識実行C_RevenueRecognition_Run8項目認識スケジュールと実行履歴(自動生成・照会)
graph TD
    A["🚀 メニューから開く<br/>取引先管理 > 取引先管理セットアップ > 収益認識"] --> B["➕ 新規で名称を入力"]
    B --> C{認識方法}
    C -->|時間ベース| D["📅 時間ベースにチェック<br/>承認頻度(月/四半期/年)と月数を設定"]
    C -->|サービスレベルベース| E["📋 Service タブで<br/>明細ごとの認識割合(%)を登録"]
    D --> F["💾 保存"]
    E --> F
    F --> G["🔗 品目マスタに収益認識を設定"]
    G --> H["🧾 請求書の転記時に<br/>計画(Plan)+ スケジュール(Run)が自動生成"]

メニューから開く 取引先管理 > 取引先管理セットアップ > 収益認識 新規で名称を入力 時間ベースにチェック 承認頻度(月/四半期/年)と月数を設定 Service タブで 明細ごとの認識割合(%)を登録 保存 品目マスタに収益認識を設定 請求書の転記時に 計画(Plan)+ スケジュール(Run)が自動生成 認識方法 時間ベース サービスレベルベース

メニューから「取引先管理 > 取引先管理セットアップ > 収益認識」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. 基本情報を入力:
    • 名称: 認識ルール名(例: 12ヶ月按分
    • 時間ベース: チェック
    • 承認頻度: 月(M)/四半期(Q)/年(Y)から選択
    • : 認識期間の月数(例: 12
    • 固定認識日: 毎月の認識日を固定する場合に日を入力(任意)
  3. 保存」をクリック

新規登録(サービスレベルベース)

Section titled “新規登録(サービスレベルベース)”
  1. 収益認識タブで名称を入力し、「時間ベース」のチェックを外して保存
  2. Service」タブに移動し、認識単位ごとに登録:
    • 明細番号: 自動採番(10刻み)
    • パーセント: 当該明細で認識する割合
  3. 各明細の割合合計が全体で100%になるよう設定

⚠️ 注意: 収益認識計画・収益認識実行タブのレコードは請求書の転記(会計仕訳作成)時に自動生成されます。手入力での運用は想定されていません。

項目名必須説明
名称必須文字列認識ルールの名称
説明-文字列補足説明
有効必須チェックレコードの有効フラグ
時間ベース必須チェック時間ベース認識(OFF=サービスレベルベース)
承認頻度必須リストM=月、Q=四半期、Y=年
-整数認識期間の月数
固定認識日-整数期間内で認識を行う日

収益認識計画タブ(自動生成・照会)

Section titled “収益認識計画タブ(自動生成・照会)”
項目名必須説明
会計スキーマ必須選択対象の会計スキーマ
請求伝票明細必須検索計画の発生元となった請求明細
合計必須金額認識対象の総額
認識済み金額必須金額認識済みの累計額
前受収益勘定必須勘定未認識分を保持する勘定
品目売上勘定必須勘定認識時の振替先(売上)勘定

全項目の一覧は 画面リファレンス を参照してください。

Q. 収益認識計画はどうやって作られますか?

Section titled “Q. 収益認識計画はどうやって作られますか?”

手入力ではありません。収益認識を設定した品目の請求書を転記すると、仕訳作成処理(FactLine)が売上を前受収益勘定へ振り替え、同時に C_RevenueRecognition_Plan を生成します。計画の保存時(afterSave)に認識スケジュール(C_RevenueRecognition_Run)が展開されます。

Q. 按分金額の端数はどう処理されますか?

Section titled “Q. 按分金額の端数はどう処理されますか?”

時間ベースでは総額を月数で均等割(四捨五入)し、最終回に差額を加算して合計が総額と一致するよう調整されます。サービスレベルベースでも、割合計算後の端数は最終明細の認識額に加算されます。

Q. 固定認識日を設定するとどうなりますか?

Section titled “Q. 固定認識日を設定するとどうなりますか?”

認識頻度が「月」かつ固定認識日が設定されている場合、初回月は開始日から固定認識日までの日数で日割按分され、その分認識回数が1回増えます(開始日が固定認識日を過ぎている場合は翌月から認識開始)。

Q. 時間ベースとサービスレベルベースの違いは?

Section titled “Q. 時間ベースとサービスレベルベースの違いは?”
  • 時間ベース: 承認頻度と月数に従い、カレンダーベースで自動的に認識日と認識額を展開します。
  • サービスレベルベース: Service タブに定義した割合で認識額を分割します。認識日は自動設定されず、サービス提供実績に応じた運用を前提とします。
🛠 技術仕様(開発者向け)

収益認識はマスタ型ウィンドウ(AD_Window_ID: 174)で、ルール本体は C_RevenueRecognition(アクセスレベル: クライアント+組織)に格納されます。モデルクラスは MRevenueRecognition(92行)、MRevenueRecogService(65行)、MRevenueRecognitionPlan(198行)、MRevenueRecognitionRun(63行)の4クラスで、スケジュール展開ロジックは MRevenueRecognitionPlan.afterSave() に集約されています。DocAction を持つ伝票型ではありません。

classDiagram
    class MRevenueRecognition {
        +getServicesList() List~MRevenueRecogService~
        +getAll(ctx, trxName) List~MRevenueRecognition~
    }
    class MRevenueRecognitionPlan {
        #afterSave(newRecord, success) boolean
    }
    class MRevenueRecognitionRun
    class MRevenueRecogService
    class X_C_RevenueRecognition {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    MRevenueRecognition --|> X_C_RevenueRecognition
    X_C_RevenueRecognition --|> PO
    MRevenueRecognition --> MRevenueRecogService : has many
    MRevenueRecognitionPlan --> MRevenueRecognitionRun : generates
    MRevenueRecognitionPlan --> MRevenueRecognition : rule

+getServicesList() List~MRevenueRecogService~ +getAll(ctx, trxName) List~MRevenueRecognition~ #afterSave(newRecord, success) boolean <> <> > X_C_RevenueRecognition X_C_RevenueRecognition --

パッケージ: org.compiere.model ソースファイル: org.adempiere.base/src/org/compiere/model/MRevenueRecognition.java ほか同ディレクトリの Plan / Run / RecogService

C_RevenueRecognition(収益認識ルール)

Section titled “C_RevenueRecognition(収益認識ルール)”
カラム名必須説明備考
C_RevenueRecognition_IDIDPK収益認識ID主キー
NameString(60)Y名称識別子
IsTimeBasedYesNoY時間ベースOFF=サービスレベルベース
RecognitionFrequencyList(1)Y承認頻度M=月 / Q=四半期 / Y=年(AD_Reference_ID=196)
NoMonthsIntegerN認識月数
FixedRecogDayIntegerN固定認識日

C_RevenueRecog_Service(認識割合明細)

Section titled “C_RevenueRecog_Service(認識割合明細)”
カラム名必須説明備考
C_RevenueRecognition_IDTableDirectY親ルールFK親リンク
LineIntegerN明細番号default: MAX(Line)+10 の SQL 採番
PercentAmountN認識割合(%)

C_RevenueRecognition_Plan(認識計画・自動生成)

Section titled “C_RevenueRecognition_Plan(認識計画・自動生成)”
カラム名必須説明
C_RevenueRecognition_Plan_IDIDPK計画ID
C_RevenueRecognition_IDTableDirectY適用ルールFK
C_InvoiceLine_IDSearchY発生元の請求伝票明細
C_AcctSchema_IDTableDirectY会計スキーマ
C_Currency_IDTableDirectY通貨
TotalAmtAmountY認識対象総額
RecognizedAmtAmountY認識済み金額
UnEarnedRevenue_AcctAccountY前受収益勘定
P_Revenue_AcctAccountY品目売上勘定

C_RevenueRecognition_Run(認識実行・自動生成)

Section titled “C_RevenueRecognition_Run(認識実行・自動生成)”
カラム名必須説明
C_RevenueRecognition_Run_IDIDPK実行ID
C_RevenueRecognition_Plan_IDTableDirectY計画FK
C_RevenueRecog_Service_IDTableDirectNサービスレベルベース時の対応明細
DateRecognizedDateN認識日(時間ベース時に設定)
RecognizedAmtAmountY認識額
GL_Journal_IDSearchN認識仕訳(GL仕訳)へのリンク
erDiagram
    C_RevenueRecognition ||--o{ C_RevenueRecog_Service : "percent lines"
    C_RevenueRecognition ||--o{ C_RevenueRecognition_Plan : "applied rule"
    C_RevenueRecognition_Plan ||--o{ C_RevenueRecognition_Run : "schedule"
    C_InvoiceLine ||--o| C_RevenueRecognition_Plan : "generates"
    C_RevenueRecognition_Run }o--o| GL_Journal : "recognition journal"

percent lines applied rule recognition journal

FactLine.java(1107行付近)の仕訳作成処理で、請求明細の品目に収益認識が設定されている場合、売上勘定の代わりに前受収益勘定へ転記し、C_RevenueRecognition_Plan を生成します(plan.setUnEarnedRevenue_Acct(...) で勘定を保持)。

スケジュール展開(MRevenueRecognitionPlan.afterSave)

Section titled “スケジュール展開(MRevenueRecognitionPlan.afterSave)”

新規計画の保存時に C_RevenueRecognition_Run を一括生成します。

時間ベース(IsTimeBased=Y)の場合:

  1. 開始日を決定: C_InvoiceLine.RRStartDate → なければ C_Invoice.DateInvoiced
  2. 間隔を決定: 月=1ヶ月 / 四半期=3ヶ月 / 年=12ヶ月
  3. TotalAmt ÷ NoMonths(HALF_UP)で各回の認識額を算出
  4. 頻度=月かつ固定認識日ありの場合、初回を日割按分し認識回数を+1(開始日が認識日を過ぎていれば翌月開始)
  5. 最終回は TotalAmt - 累計 で端数を吸収
  6. 認識額が0の回はレコードを生成しない

サービスレベルベース(IsTimeBased=N)の場合:

  1. getServicesList() で Service 明細を取得(Line 順)
  2. 各明細につき TotalAmt × Percent ÷ 100(小数4桁 HALF_UP)で Run を生成
  3. 合計と TotalAmt の差額は最終明細の Run に加算

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

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

認識ルールへの制約追加は Model Validator で行います:

public class CustomRevenueRecogValidator implements ModelValidator {
@Override
public int modelChange(PO po, int type) throws Exception {
if (po instanceof MRevenueRecognition rr
&& (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE)) {
// 例: 時間ベースの場合は認識月数を必須化
if (rr.isTimeBased() && rr.getNoMonths() <= 0)
throw new AdempiereException("時間ベースの収益認識には月数の設定が必要です");
}
return null;
}
}
  • このウィンドウのテーブルに標準の Callout は定義されていません(C_RevenueRecog_Service.Line の SQL デフォルト採番のみ)。
  • スケジュール展開ロジック自体を差し替える場合は C_RevenueRecognition_PlanTYPE_AFTER_NEW をフックし、生成済み Run を調整する方式がコア改変なしで安全です。

サブスクリプション売上の按分パターンや自社の収益認識基準(履行義務ベースの配分等)に合わせた拡張は、Model Validator でコア改変なしに実装できます。

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

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