iDempiere 予約購入の使い方|販売管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 販売管理の全体像: 販売管理の全体図 も合わせてご覧ください。
予約購入(Subscription)は、取引先が特定の品目を定期的に購入・更新する契約を記録するマスタです。「誰が」「どの品目を」「いつから」「いつまで支払済で」「次はいつ更新か」を1レコードで保持し、配送タブに納品実績を残せます。
⚠️ 注意: このウィンドウ(AD_Window_ID: 316)は iDempiere 13 標準では無効化されており、標準メニューにも登録されていません(旧バージョンからの互換用)。新規の業務設計で定期購読・保守契約を扱う場合は、この画面ではなく受注伝票の定期作成や独自プラグインでの実装を検討してください。
📌 ポイント: 予約購入には伝票処理(DocAction / DocStatus)も自動更新処理もありません。開始日・支払済有効期限・更新日付・支払期日フラグはすべて手入力(または独自プロセスでの更新)が前提の「台帳」です。契約情報を記録するだけで、請求書や出荷は自動生成されません。
予約購入でできること
Section titled “予約購入でできること”- 取引先と品目の組み合わせによる定期購読契約の登録
- 契約開始日(開始日付)の記録
- 支払済有効期限(
PaidUntilDate)による「どこまで支払済か」の管理 - 次回更新日付(
RenewalDate)の記録 - 「支払期日」フラグによる更新期限到来の明示
- 予約購入タイプによる更新サイクルの紐づけ
- 配送タブへの納品実績レコードの記録
予約購入はヘッダー+配送の2タブ構成です。
graph TD
subgraph "予約購入ウィンドウ(Window ID: 316)"
T1["🔁 予約購入<br/>C_Subscription<br/>11項目"]
T2["🚚 配送<br/>C_Subscription_Delivery<br/>6項目"]
end
T1 --> T2
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 予約購入 | C_Subscription | 11項目 | 契約ヘッダー(取引先・品目・各日付) |
| 配送 | C_Subscription_Delivery | 6項目 | 予約購入に対する任意の配送記録 |
💡 ヒント: 配送タブは「配送があったこと」を作成日時付きで残すだけの最小構成で、数量・出荷伝票へのリンクは持ちません。実際の出荷実績は出荷伝票側で管理してください。
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 ウィンドウを開く<br/>(標準メニュー未登録のため<br/>ロール設定でメニュー追加が必要)"] --> B["🔁 先に予約購入タイプを登録<br/>(更新頻度の定義)"]
B --> C["➕ 新規ボタンをクリック"]
C --> D["✏️ 名称・取引先・品目を入力"]
D --> E["📅 開始日付・支払済有効期限<br/>・更新日付を入力"]
E --> F["💾 保存"]
F --> G{納品実績を残す?}
G -->|はい| H["🚚 配送タブで<br/>配送レコードを追加"]
G -->|いいえ| I["✅ 登録完了"]
H --> I
I --> J["🔄 更新時期が来たら<br/>支払期日フラグ・各日付を更新"]
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”このウィンドウは iDempiere 13 標準ではメニューに登録されていません。利用する場合はシステム管理者がメニュー(AD_Menu)へウィンドウ ID 316 を追加し、ロールにアクセス権を付与する必要があります。
- 予約購入タイプを先に登録しておきます
- 「新規」ボタンをクリック
- 契約情報を入力(すべて必須):
- 名称: 契約名(例:
月刊誌購読_A社) - 予約タイプ: 登録済みの予約購入タイプを選択
- 取引先: 購読者となる取引先
- 品目: 購読対象の品目
- 開始日付: 契約開始日(初日を含む)
- 支払済有効期限: この日まで支払済/有効
- 更新日付: 次回更新予定日
- 支払期日: 更新期限が到来している場合にチェック
- 名称: 契約名(例:
- 「保存」をクリック
⚠️ 注意: 予約購入タブの日付項目(開始日付・支払済有効期限・更新日付)と支払期日フラグはすべて必須です。片方だけ埋めて保存することはできません。
配送記録の追加
Section titled “配送記録の追加”- 「配送」タブに移動
- 「新規」ボタンをクリック
- 親の予約購入が自動セットされるので、そのまま「保存」
- 作成日・作成者が自動記録されます
項目リファレンス
Section titled “項目リファレンス”予約購入タブ
Section titled “予約購入タブ”| 項目名 | カラム | 必須 | 型 | 説明 |
|---|---|---|---|---|
| クライアント | AD_Client_ID | 必須 | 選択 | テナント |
| 組織 | AD_Org_ID | 必須 | 選択 | 組織 |
| 名称 | Name | 必須 | 文字列(60) | 契約名 |
| 予約タイプ | C_SubscriptionType_ID | 必須 | 選択 | 更新サイクルの定義 |
| 取引先 | C_BPartner_ID | 必須 | 検索 | 購読する取引先 |
| 品目 | M_Product_ID | 必須 | 検索 | 購読対象の品目・サービス |
| 開始日付 | StartDate | 必須 | 日付 | 契約開始日(初日を含む) |
| 支払済有効期限 | PaidUntilDate | 必須 | 日付 | この日まで支払済/有効 |
| 更新日付 | RenewalDate | 必須 | 日付 | 次回更新予定日 |
| 支払期日 | IsDue | 必須 | チェック | 更新期限が到来しているか |
| 有効 | IsActive | 必須 | チェック | レコードが有効か(既定: Y) |
| 項目名 | カラム | 必須 | 型 | 説明 |
|---|---|---|---|---|
| 予約 | C_Subscription_ID | 必須 | 選択 | 親の予約購入(自動セット) |
| 作成日 | Created | 自動 | 日時 | 配送記録の作成日時 |
| 作成者 | CreatedBy | 自動 | 検索 | 記録したユーザー |
| 有効 | IsActive | 必須 | チェック | レコードが有効か |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 更新日が来たら請求書が自動作成されますか?
Section titled “Q. 更新日が来たら請求書が自動作成されますか?”されません。C_Subscription には M クラス(ビジネスロジック実装クラス)が存在せず、自動生成された X_C_Subscription(353行)のみが提供されています。更新の検知・請求書生成・出荷指示はすべてコア外の実装が必要です。
Q. 「支払期日(IsDue)」は自動でチェックされますか?
Section titled “Q. 「支払期日(IsDue)」は自動でチェックされますか?”自動更新されません。日付を比較して IsDue を立てるコアロジックは実装されていないため、スケジューラ(AD_Scheduler)で動かす独自プロセスなどで更新する必要があります。
Q. 1つの契約で複数品目を扱えますか?
Section titled “Q. 1つの契約で複数品目を扱えますか?”扱えません。C_Subscription は M_Product_ID を1つだけ持つフラットな構造で、明細行テーブルがありません。複数品目の契約は品目ごとにレコードを分けて登録してください。
Q. 配送タブに数量や出荷伝票を記録できますか?
Section titled “Q. 配送タブに数量や出荷伝票を記録できますか?”できません。C_Subscription_Delivery はクライアント・組織・親予約・有効フラグ・作成情報のみを持つ最小構成のテーブルで、数量カラムも M_InOut_ID への参照もありません。
Q. 契約を解約したい場合は?
Section titled “Q. 契約を解約したい場合は?”伝票処理(DocAction)が無いため「解約」ステータスは存在しません。運用上は「有効」チェックを外す、または支払済有効期限を解約日に更新する運用になります。
業務フロー上の位置づけ
Section titled “業務フロー上の位置づけ”graph TD
A["🔁 予約購入タイプ<br/>更新サイクル定義"] --> B["📄 予約購入<br/>契約台帳"]
C["🏢 取引先マスタ"] --> B
D["📦 品目マスタ"] --> B
B --> E["🚚 配送記録<br/>C_Subscription_Delivery"]
B -.手動または独自プロセス.-> F["📋 受注伝票"]
F --> G["💴 売上請求書"]
📌 ポイント: 点線部分(予約購入から受注伝票への展開)は iDempiere 標準では実装されていません。ここを自動化するのがサブスクリプション業務の実装ポイントになります。
- 予約購入タイプ(Subscription Type)の使い方
- 受注伝票(Sales Order)の使い方
- 出荷伝票(Shipment)の使い方
- 取引先マスタ(Business Partner)の使い方
- 品目マスタ(Product)の使い方
- 画面リファレンス: 予約購入
🛠 技術仕様(開発者向け)
予約購入はマスタデータ型のウィンドウ(AD_Window_ID: 316)で、C_Subscription(ヘッダー)と C_Subscription_Delivery(配送記録)の2テーブルで構成されます。どちらも専用の M クラスを持たず、AD から自動生成された X_C_Subscription(353行)と X_C_Subscription_Delivery(180行)のみが提供されています。Document 型ではなく、DocStatus / DocAction カラムも存在しません。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class X_C_Subscription {
<<generated>>
+getC_SubscriptionType_ID() int
+getC_BPartner_ID() int
+getM_Product_ID() int
+getStartDate() Timestamp
+getPaidUntilDate() Timestamp
+getRenewalDate() Timestamp
+isDue() boolean
}
class X_C_Subscription_Delivery {
<<generated>>
+getC_Subscription_ID() int
}
class PO {
<<abstract>>
}
X_C_Subscription --|> PO
X_C_Subscription_Delivery --|> PO
X_C_Subscription --> X_C_Subscription_Delivery : has many
X_C_Subscription --> X_C_SubscriptionType : renewal cycle
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/X_C_Subscription.java、X_C_Subscription_Delivery.java
関連DBテーブル
Section titled “関連DBテーブル”C_Subscription(予約購入)
Section titled “C_Subscription(予約購入)”テーブル属性: 削除可(IsDeleteable=Y)/大量データ扱いなし/アクセスレベル=クライアント+組織/ビューではない。
| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_Subscription_ID | ID | PK | 予約購入ID | 主キー |
| C_Subscription_UU | UUID(36) | N | UUIDキー | |
| AD_Client_ID | Table Direct | Y | クライアント | 既定 @#AD_Client_ID@ |
| AD_Org_ID | Table Direct | Y | 組織 | 既定 @#AD_Org_ID@ |
| Name | String(60) | Y | 名称 | 識別子カラム |
| C_SubscriptionType_ID | Table Direct | Y | 予約購入タイプ | 更新サイクル |
| C_BPartner_ID | Search | Y | 取引先 | 購読者 |
| M_Product_ID | Search | Y | 品目 | 購読対象(1件のみ) |
| StartDate | Date | Y | 開始日付 | 初日を含む |
| PaidUntilDate | Date | Y | 支払済有効期限 | |
| RenewalDate | Date | Y | 更新日付 | |
| IsDue | Yes-No | Y | 支払期日 | 既定値なし |
| IsActive | Yes-No | Y | 有効 | 既定 Y |
| Created / CreatedBy | Date+Time / Search | Y | 作成日時・作成者 | 既定 SYSDATE |
| Updated / UpdatedBy | Date+Time / Search | Y | 更新日時・更新者 | 既定 SYSDATE |
C_Subscription_Delivery(配送記録)
Section titled “C_Subscription_Delivery(配送記録)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_Subscription_Delivery_ID | ID | PK | 配送記録ID | 主キー |
| C_Subscription_Delivery_UU | UUID(36) | N | UUIDキー | |
| C_Subscription_ID | Table Direct | Y | 予約購入FK | 更新不可 |
| AD_Client_ID | Table Direct | Y | クライアント | 既定 @AD_Client_ID@ |
| AD_Org_ID | Table Direct | Y | 組織 | 既定 @AD_Org_ID@ |
| IsActive | Yes-No | Y | 有効 | 既定 Y |
| Created / CreatedBy | Date+Time / Search | Y | 作成日時・作成者 | 画面上の表示項目 |
| Updated / UpdatedBy | Date+Time / Search | Y | 更新日時・更新者 |
📌 ポイント:
C_Subscription_Deliveryには数量・出荷伝票参照・配送日といった業務カラムが一切ありません。実質的に「配送が発生した回数と日時」を数えるためのテーブルです。
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"
ビジネスロジック
Section titled “ビジネスロジック”M クラスが存在しないため、コアに固有のビジネスロジック(beforeSave / afterSave / 期日計算 / 更新判定)はありません。保存時の挙動は PO の標準処理(必須チェック、外部キー整合性、アクセスレベル制御)に従います。
C_Subscription_ID(配送タブ側)と DocumentNo 相当のカラムは IsUpdateable=N で、保存後の親付け替えはできません。
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”public class CustomSubscriptionValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (po instanceof X_C_Subscription && (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE)) { X_C_Subscription sub = (X_C_Subscription) po; // 例: 更新日付は開始日付より後であること if (sub.getRenewalDate() != null && sub.getStartDate() != null && !sub.getRenewalDate().after(sub.getStartDate())) { throw new AdempiereException("更新日付は開始日付より後の日付にしてください"); } } return null; }}更新検知プロセスの追加
Section titled “更新検知プロセスの追加”IsDue の自動更新は、AD_Scheduler から起動する SvrProcess 実装で行うのが定石です。RenewalDate <= 今日 かつ IsDue='N' のレコードを抽出して更新し、必要に応じて受注伝票(MOrder)を自動生成します。
Callout
Section titled “Callout”C_Subscription / C_Subscription_Delivery のカラムには AD 上の callout 定義がありません。予約購入タイプ選択時に更新日付を自動計算したい場合などは、独自 callout を追加してください。
関連プロセス
Section titled “関連プロセス”このウィンドウには専用のプロセスボタンは定義されていません。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”iDempiere 標準の予約購入は契約台帳としての最小構成にとどまり、更新検知・自動請求・解約処理はコアに実装されていません。 スケジューラ連携の更新プロセスや受注伝票の自動生成をOSGiプラグインで追加すれば、コア改変なしにサブスクリプション業務を運用できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。