コンテンツにスキップ

iDempiere 予約購入タイプの使い方|販売管理 操作マニュアル・技術仕様

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

予約購入タイプ(Subscription Type)は、定期購読・保守契約などの「更新サイクル」を定義するマスタです。頻度タイプ(日・時・分)と頻度(回数)の組み合わせで更新間隔を表し、予約購入C_Subscription)から参照されます。

⚠️ 注意: このウィンドウ(AD_Window_ID: 317)は iDempiere 13 標準では無効化されており、標準メニューにも登録されていません(旧バージョンからの互換用)。新規の業務設計で定期課金・サブスクリプションを扱う場合は、この画面ではなく受注伝票の定期作成や外部の課金基盤との連携を検討してください。

📌 ポイント: 頻度タイプの選択肢は 日(D)・時(H)・分(M)の3つだけです。「月次」「年次」といった暦ベースの単位は存在しないため、月額契約は「30日」「365日」のように日数へ換算して登録することになります。

  • 更新サイクル(頻度タイプ+頻度)の定義
  • 予約購入レコードへの更新間隔の割り当て
  • 説明欄による契約種別の補足記載
  • 「有効」チェックによる利用停止(過去データは保持)

予約購入タイプは単一タブのシンプルなマスタです。

graph TD
    subgraph "予約購入タイプウィンドウ(Window ID: 317)"
        T1["🔁 予約購入タイプ<br/>C_SubscriptionType<br/>7項目"]
    end

予約購入タイプウィンドウ(Window ID: 317) 予約購入タイプ C_SubscriptionType 7項目

タブ名テーブル項目数役割
予約購入タイプC_SubscriptionType7項目更新頻度の定義(頻度タイプ・頻度)
graph TD
    A["🚀 ウィンドウを開く<br/>(標準メニュー未登録のため<br/>ロール設定でメニュー追加が必要)"] --> B["➕ 新規ボタンをクリック"]
    B --> C["✏️ 名称を入力<br/>(例: 月次保守契約)"]
    C --> D["🔁 頻度タイプを選択<br/>日 / 時 / 分"]
    D --> E["🔢 頻度を入力<br/>(例: 30)"]
    E --> F["💾 保存"]
    F --> G["🔗 予約購入で<br/>予約タイプとして選択可能に"]

ウィンドウを開く (標準メニュー未登録のため ロール設定でメニュー追加が必要) 新規ボタンをクリック 名称を入力 (例: 月次保守契約) 頻度タイプを選択 日 / 時 / 分 頻度を入力 (例: 30) 保存 予約購入で 予約タイプとして選択可能に

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

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

このウィンドウは iDempiere 13 標準ではメニューに登録されていません。利用する場合はシステム管理者がメニュー(AD_Menu)へウィンドウ ID 317 を追加し、ロールにアクセス権を付与する必要があります。

  1. 新規」ボタンをクリック
  2. 基本情報を入力:
    • 名称(必須): 更新サイクル名(例: 30日更新年次更新
    • 説明: 補足説明(255文字まで)
    • 頻度タイプ(必須): から選択
    • 頻度(必須): 数値(例: 頻度タイプ=日、頻度=30 で30日ごと)
  3. 保存」をクリック

💡 ヒント: 月額契約を表現する場合は「頻度タイプ=日、頻度=30」、年額契約は「頻度タイプ=日、頻度=365」とするのが一般的です。ただし暦月の末日差(28〜31日)は吸収されないため、正確な暦月更新が必要な業務ではこの画面だけでは要件を満たせません。

項目名カラム必須説明
クライアントAD_Client_ID必須選択テナント
組織AD_Org_ID必須選択組織
名称Name必須文字列(60)予約購入タイプの名称
説明Description-文字列(255)補足説明
頻度タイプFrequencyType必須リストD=日、H=時、M=分
頻度Frequency必須整数更新間隔の数値
有効IsActive必須チェック選択肢として使用するか(既定: Y)

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

表示コード意味
DDay(日単位)
HHour(時間単位)
MMinute(分単位)

Q. 「月次」「年次」の頻度タイプはありませんか?

Section titled “Q. 「月次」「年次」の頻度タイプはありませんか?”

ありません。X_C_SubscriptionType に定義されている定数は FREQUENCYTYPE_Day(D)、FREQUENCYTYPE_Hour(H)、FREQUENCYTYPE_Minute(M)の3つのみです(AD_Reference_ID=221)。月次・年次は日数換算で表現してください。

Q. 予約購入タイプを設定すると、更新日が自動計算されますか?

Section titled “Q. 予約購入タイプを設定すると、更新日が自動計算されますか?”

自動計算されません。C_SubscriptionType には M クラス(ビジネスロジック実装クラス)が存在せず、自動生成された X_C_SubscriptionType のみが提供されています。予約購入の更新日付(RenewalDate)・支払済有効期限(PaidUntilDate)は手入力または独自プロセスでの更新が前提です。

Q. 頻度に 0 を入力できますか?

Section titled “Q. 頻度に 0 を入力できますか?”

Frequency は必須カラムですが最小値・最大値の制約は AD 上定義されていないため、DB レベルでは 0 も保存できます。業務上は意味を持たないため、Model Validator で下限チェックを追加することを推奨します。

Q. このウィンドウは今後も使えますか?

Section titled “Q. このウィンドウは今後も使えますか?”

iDempiere 13 標準では無効化された画面です。テーブル(C_SubscriptionType / C_Subscription)自体は残っていますが、コアの機能追加は行われていません。長期運用を前提とするサブスクリプション管理には、独自プラグインまたは外部サービス連携を推奨します。


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

予約購入タイプはマスタデータ型のウィンドウ(AD_Window_ID: 317)で、C_SubscriptionType テーブルに格納されます。専用の M クラスは存在せず、AD から自動生成された X_C_SubscriptionType(235行)のみが提供されています。生成クラスはアクセサ(getter / setter)と FrequencyType のリスト定数だけを持ち、独自の検証・計算ロジックは実装されていません。Document 型ではありません。

classDiagram
    class X_C_SubscriptionType {
        <<generated>>
        +setFrequencyType(String)
        +getFrequencyType() String
        +setFrequency(int)
        +getFrequency() int
        +setName(String)
    }
    class PO {
        <<abstract>>
    }
    class I_C_SubscriptionType {
        <<interface>>
    }
    X_C_SubscriptionType --|> PO
    X_C_SubscriptionType ..|> I_C_SubscriptionType
    X_C_Subscription --> X_C_SubscriptionType : renewal cycle

<> +setFrequencyType(String) +getFrequencyType() String +setFrequency(int) +getFrequency() int +setName(String) <> <> > PO X_C_SubscriptionType ..

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

C_SubscriptionType(予約購入タイプ)

Section titled “C_SubscriptionType(予約購入タイプ)”

テーブル属性: 削除可(IsDeleteable=Y)/大量データ扱いなし/アクセスレベル=クライアント/ビューではない。

カラム名必須説明備考
C_SubscriptionType_IDIDPK予約購入タイプID主キー
C_SubscriptionType_UUUUID(36)NUUIDキー
AD_Client_IDTable DirectYクライアント既定 @#AD_Client_ID@
AD_Org_IDTable DirectY組織既定 @#AD_Org_ID@
NameString(60)Y名称識別子カラム
DescriptionString(255)N説明
FrequencyTypeList(1)Y頻度タイプD=Day, H=Hour, M=Minute(AD_Reference_ID=221)
FrequencyIntegerY頻度更新間隔
IsActiveYes-NoY有効既定 Y
Created / CreatedByDate+Time / SearchY作成日時・作成者既定 SYSDATE
Updated / UpdatedByDate+Time / SearchY更新日時・更新者既定 SYSDATE
erDiagram
    C_SubscriptionType ||--o{ C_Subscription : "renewal cycle"
    C_Subscription ||--o{ C_Subscription_Delivery : "deliveries"
    C_Subscription }o--|| C_BPartner : "subscriber"
    C_Subscription }o--|| M_Product : "subscribed product"

renewal cycle subscribed product

M クラスが存在しないため、コアに固有のビジネスロジックはありません。保存時の挙動は PO の標準処理(必須チェック、Name 60文字制限、リスト値の妥当性チェック、アクセスレベル制御)に従います。更新日の自動計算やスケジュール生成はコアに実装されていません。

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

Section titled “拡張ポイント(カスタマイズ箇所)”
public class CustomSubscriptionTypeValidator implements ModelValidator {
@Override
public int modelChange(PO po, int type) throws Exception {
if (po instanceof X_C_SubscriptionType
&& (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE)) {
X_C_SubscriptionType st = (X_C_SubscriptionType) po;
// 例: 頻度は1以上を必須とする
if (st.getFrequency() < 1) {
throw new AdempiereException("頻度は1以上で入力してください");
}
}
return null;
}
}

暦月ベース(毎月末日、毎月同日など)の更新サイクルが必要な場合は、FrequencyType のリスト(AD_Reference_ID=221)へ値を追加するのではなく、独自テーブルまたは追加カラムを持つプラグインとして実装し、更新日計算を担うスケジューラ(AD_Scheduler)プロセスを併せて提供する設計を推奨します。

C_SubscriptionType のカラムには AD 上の callout 定義がありません。

このウィンドウには専用のプロセスボタンは定義されていません。


iDempiere 標準の予約購入タイプは日・時・分の単純な間隔しか持たないため、月額・年額のサブスクリプション課金をそのまま扱うことはできません。 暦月更新・自動請求生成・解約処理などをOSGiプラグインとして追加すれば、コア改変なしにサブスクリプション業務を実装できます。

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

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