iDempiere 収益認識の使い方|取引先管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 取引先管理の全体像: 取引先管理の全体図 も合わせてご覧ください。
収益認識は、売上をどのタイミング・どの間隔で収益として計上するかを定義するマスタです。サブスクリプションや保守契約のように、請求時に一括で売上計上せず、期間按分またはサービス提供実績に応じて前受収益から売上へ振り替える会計処理を自動化します。
📌 ポイント: 収益認識を設定した品目を請求書で転記すると、売上は一旦「前受収益」勘定に計上され、収益認識計画(Plan)と認識スケジュール(Run)が自動生成されます。計画・実行タブは自動生成結果の照会用です。
収益認識でできること
Section titled “収益認識でできること”- 時間ベースの収益認識ルール定義(月次・四半期・年次の認識頻度と認識月数)
- 固定認識日の設定(毎月の特定日に認識、初月は日割按分)
- サービスレベルベースの認識ルール定義(Service タブで割合を配分)
- 請求時に自動生成された収益認識計画(対象金額・認識済み金額・勘定科目)の照会
- 認識実行履歴(認識日・認識額・GL仕訳へのリンク)の照会
4タブ・3階層の構成です。ルール定義は「収益認識」「Service」タブのみで、「収益認識計画」「収益認識実行」は請求書転記時に自動生成されるデータの照会タブです。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 収益認識 | C_RevenueRecognition | 9項目 | 認識ルール(時間ベース/頻度/月数/固定認識日) |
| Service | C_RevenueRecog_Service | 7項目 | サービスレベルベース時の認識割合(明細番号・パーセント) |
| 収益認識計画 | C_RevenueRecognition_Plan | 11項目 | 請求伝票明細ごとの認識計画(自動生成・照会) |
| 収益認識実行 | C_RevenueRecognition_Run | 8項目 | 認識スケジュールと実行履歴(自動生成・照会) |
基本操作手順
Section titled “基本操作手順”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)が自動生成"]
アクセス方法
Section titled “アクセス方法”メニューから「取引先管理 > 取引先管理セットアップ > 収益認識」を開きます。
新規登録(時間ベース)
Section titled “新規登録(時間ベース)”- ツールバーの「新規」ボタンをクリック
- 基本情報を入力:
- 名称: 認識ルール名(例:
12ヶ月按分) - 時間ベース: チェック
- 承認頻度: 月(M)/四半期(Q)/年(Y)から選択
- 月: 認識期間の月数(例:
12) - 固定認識日: 毎月の認識日を固定する場合に日を入力(任意)
- 名称: 認識ルール名(例:
- 「保存」をクリック
新規登録(サービスレベルベース)
Section titled “新規登録(サービスレベルベース)”- 収益認識タブで名称を入力し、「時間ベース」のチェックを外して保存
- 「Service」タブに移動し、認識単位ごとに登録:
- 明細番号: 自動採番(10刻み)
- パーセント: 当該明細で認識する割合
- 各明細の割合合計が全体で100%になるよう設定
⚠️ 注意: 収益認識計画・収益認識実行タブのレコードは請求書の転記(会計仕訳作成)時に自動生成されます。手入力での運用は想定されていません。
項目リファレンス
Section titled “項目リファレンス”収益認識タブ
Section titled “収益認識タブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 名称 | 必須 | 文字列 | 認識ルールの名称 |
| 説明 | - | 文字列 | 補足説明 |
| 有効 | 必須 | チェック | レコードの有効フラグ |
| 時間ベース | 必須 | チェック | 時間ベース認識(OFF=サービスレベルベース) |
| 承認頻度 | 必須 | リスト | M=月、Q=四半期、Y=年 |
| 月 | - | 整数 | 認識期間の月数 |
| 固定認識日 | - | 整数 | 期間内で認識を行う日 |
収益認識計画タブ(自動生成・照会)
Section titled “収益認識計画タブ(自動生成・照会)”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 会計スキーマ | 必須 | 選択 | 対象の会計スキーマ |
| 請求伝票明細 | 必須 | 検索 | 計画の発生元となった請求明細 |
| 合計 | 必須 | 金額 | 認識対象の総額 |
| 認識済み金額 | 必須 | 金額 | 認識済みの累計額 |
| 前受収益勘定 | 必須 | 勘定 | 未認識分を保持する勘定 |
| 品目売上勘定 | 必須 | 勘定 | 認識時の振替先(売上)勘定 |
全項目の一覧は 画面リファレンス を参照してください。
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”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 を持つ伝票型ではありません。
アーキテクチャ概要
Section titled “アーキテクチャ概要”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
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MRevenueRecognition.java ほか同ディレクトリの Plan / Run / RecogService
関連DBテーブル
Section titled “関連DBテーブル”C_RevenueRecognition(収益認識ルール)
Section titled “C_RevenueRecognition(収益認識ルール)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_RevenueRecognition_ID | ID | PK | 収益認識ID | 主キー |
| Name | String(60) | Y | 名称 | 識別子 |
| IsTimeBased | YesNo | Y | 時間ベース | OFF=サービスレベルベース |
| RecognitionFrequency | List(1) | Y | 承認頻度 | M=月 / Q=四半期 / Y=年(AD_Reference_ID=196) |
| NoMonths | Integer | N | 認識月数 | |
| FixedRecogDay | Integer | N | 固定認識日 |
C_RevenueRecog_Service(認識割合明細)
Section titled “C_RevenueRecog_Service(認識割合明細)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_RevenueRecognition_ID | TableDirect | Y | 親ルールFK | 親リンク |
| Line | Integer | N | 明細番号 | default: MAX(Line)+10 の SQL 採番 |
| Percent | Amount | N | 認識割合(%) |
C_RevenueRecognition_Plan(認識計画・自動生成)
Section titled “C_RevenueRecognition_Plan(認識計画・自動生成)”| カラム名 | 型 | 必須 | 説明 |
|---|---|---|---|
| C_RevenueRecognition_Plan_ID | ID | PK | 計画ID |
| C_RevenueRecognition_ID | TableDirect | Y | 適用ルールFK |
| C_InvoiceLine_ID | Search | Y | 発生元の請求伝票明細 |
| C_AcctSchema_ID | TableDirect | Y | 会計スキーマ |
| C_Currency_ID | TableDirect | Y | 通貨 |
| TotalAmt | Amount | Y | 認識対象総額 |
| RecognizedAmt | Amount | Y | 認識済み金額 |
| UnEarnedRevenue_Acct | Account | Y | 前受収益勘定 |
| P_Revenue_Acct | Account | Y | 品目売上勘定 |
C_RevenueRecognition_Run(認識実行・自動生成)
Section titled “C_RevenueRecognition_Run(認識実行・自動生成)”| カラム名 | 型 | 必須 | 説明 |
|---|---|---|---|
| C_RevenueRecognition_Run_ID | ID | PK | 実行ID |
| C_RevenueRecognition_Plan_ID | TableDirect | Y | 計画FK |
| C_RevenueRecog_Service_ID | TableDirect | N | サービスレベルベース時の対応明細 |
| DateRecognized | Date | N | 認識日(時間ベース時に設定) |
| RecognizedAmt | Amount | Y | 認識額 |
| GL_Journal_ID | Search | N | 認識仕訳(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"
ビジネスロジック
Section titled “ビジネスロジック”計画の生成(請求書転記時)
Section titled “計画の生成(請求書転記時)”FactLine.java(1107行付近)の仕訳作成処理で、請求明細の品目に収益認識が設定されている場合、売上勘定の代わりに前受収益勘定へ転記し、C_RevenueRecognition_Plan を生成します(plan.setUnEarnedRevenue_Acct(...) で勘定を保持)。
スケジュール展開(MRevenueRecognitionPlan.afterSave)
Section titled “スケジュール展開(MRevenueRecognitionPlan.afterSave)”新規計画の保存時に C_RevenueRecognition_Run を一括生成します。
時間ベース(IsTimeBased=Y)の場合:
- 開始日を決定:
C_InvoiceLine.RRStartDate→ なければC_Invoice.DateInvoiced - 間隔を決定: 月=1ヶ月 / 四半期=3ヶ月 / 年=12ヶ月
TotalAmt ÷ NoMonths(HALF_UP)で各回の認識額を算出- 頻度=月かつ固定認識日ありの場合、初回を日割按分し認識回数を+1(開始日が認識日を過ぎていれば翌月開始)
- 最終回は
TotalAmt - 累計で端数を吸収 - 認識額が0の回はレコードを生成しない
サービスレベルベース(IsTimeBased=N)の場合:
getServicesList()で Service 明細を取得(Line 順)- 各明細につき
TotalAmt × Percent ÷ 100(小数4桁 HALF_UP)で Run を生成 - 合計と
TotalAmtの差額は最終明細の Run に加算
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”認識ルールへの制約追加は 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_PlanのTYPE_AFTER_NEWをフックし、生成済み Run を調整する方式がコア改変なしで安全です。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”サブスクリプション売上の按分パターンや自社の収益認識基準(履行義務ベースの配分等)に合わせた拡張は、Model Validator でコア改変なしに実装できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。