iDempiere トレーニングの使い方|取引先管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 取引先管理の全体像: 取引先管理の全体図 も合わせてご覧ください。
トレーニング(Training)は、繰り返し開催する研修と、その実施回(クラス)を定義する画面です。1 件の研修に対して、開催日程ごとのクラスを複数ぶら下げる親子構造になっています。
⚠️ 重要: iDempiere 13 標準では、このウィンドウは無効化されています(旧バージョンからの互換用として AD に定義が残っているのみで、標準メニューには登録されていません)。新規の業務設計での利用は推奨されません。研修の販売・実施を管理する場合は、品目マスタのサービス品目と受注伝票の組み合わせ、またはプロジェクト管理での代替をご検討ください。
📌 ポイント: トレーニングのクラス(
S_Training_Class)は品目(M_Product_ID)と 1 対 1 で紐付きます。つまり「1 回の開催 = 1 つの販売可能な品目」という設計思想です。この構造を理解しておくと、代替設計を検討する際の判断がしやすくなります。
トレーニングでできること
Section titled “トレーニングでできること”- 繰り返し開催する研修の親レコードを定義する(名称・説明・コメント)
- 研修に対応する品目カテゴリ・数量単位・税カテゴリを指定する
- 開催回ごとのクラスを、開始日付・終了日付とともに登録する
- クラスごとに対応する品目(サービス品目)を紐付ける
- 画像 URL・説明 URL で外部の案内ページを参照させる
- 伝票メモ(
DocumentNote)で、生成される伝票への注記を持たせる
親子2タブ構成です。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| トレーニング | S_Training | 13項目 | 研修の親定義(名称・品目カテゴリ・単位・税カテゴリ) |
| クラス | S_Training_Class | 7項目 | 実施回ごとのクラス(品目・開始日・終了日) |
💡 ヒント: 親タブの「処理中(
Processing)」はボタン型のカラムです。リファレンス上はフィールドとして存在しますが、iDempiere 13 標準ではこのウィンドウ自体が無効化されているため、実運用での使用は想定されていません。
基本操作手順
Section titled “基本操作手順”graph TD
A["⚠️ iDempiere 13 では<br/>標準メニュー未登録"] --> B["🔧 利用するには AD で<br/>ウィンドウ・メニューを有効化"]
B --> C["➕ トレーニングタブで<br/>研修を新規作成"]
C --> D["📦 品目カテゴリ・数量単位<br/>税カテゴリを指定"]
D --> E["💾 保存"]
E --> F["📅 クラスタブで<br/>開催回を登録"]
F --> G["🔗 対応する品目を選択<br/>開始日付・終了日付を設定"]
G --> H["💾 保存"]
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”iDempiere 13 標準ではメニューに登録されていません(AD_Window_ID: 253)。参照・検証が必要な場合は、システム管理者ロールで「アプリケーション辞書 > ウィンドウ」から該当ウィンドウを確認するか、メニュー項目を追加して有効化する必要があります。
登録の手順(有効化した場合)
Section titled “登録の手順(有効化した場合)”- 「トレーニング」タブで「新規」をクリックします
- 基本情報を入力します
- 名称(
Name): 研修名 — 必須、最大60文字 - 説明(
Description): 短い説明(最大255文字) - コメント(
Help): 補足・ヒント(最大2,000文字)
- 名称(
- 品目連携の設定を行います(いずれも必須)
- 品目カテゴリ(
M_Product_Category_ID): クラス品目の分類 - 数量単位(
C_UOM_ID): 販売単位 - 税カテゴリ(
C_TaxCategory_ID): 適用する税区分
- 品目カテゴリ(
- 必要に応じて画像URL / 説明URL / 伝票メモを入力します
- 「保存」をクリックします
- 「クラス」タブに移動し、開催回を登録します
- 品目(
M_Product_ID): この開催回に対応する品目 — 必須 - 開始日付(
StartDate): 有効開始日(当日を含む) — 必須 - 終了日付(
EndDate): 有効終了日(当日を含む) — 必須
- 品目(
- 「保存」をクリックします
⚠️ 注意: クラスの品目(
M_Product_ID)は必須かつ更新不可(IsUpdateable=N)です。登録後に品目を差し替えることはできません。誤って登録した場合は、クラスを削除して作り直してください。
項目リファレンス
Section titled “項目リファレンス”トレーニングタブ
Section titled “トレーニングタブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| クライアント | 必須 | 選択 | テナント(既定 @#AD_Client_ID@) |
| 組織 | 必須 | 選択 | 組織(既定 @#AD_Org_ID@) |
| 名称 | 必須 | 文字列(60) | 研修名 |
| 説明 | - | 文字列(255) | 短い説明 |
| コメント | - | テキスト(2000) | 補足・ヒント |
| 品目カテゴリ | 必須 | 選択 | クラス品目の分類カテゴリ |
| 数量単位 | 必須 | 選択 | 販売・計上単位 |
| 税カテゴリ | 必須 | 選択 | 適用する税区分 |
| 伝票メモ | - | テキスト(2000) | 伝票への注記 |
| 画像URL | - | URL(120) | 案内用画像の URL |
| 説明 URL | - | URL(120) | 詳細説明ページの URL |
| 処理中 | - | ボタン | 処理実行用ボタン |
| 有効 | 必須 | チェック | レコードが有効か(既定 Y) |
| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| トレーニング | 必須 | 選択 | 親の研修(更新不可) |
| 品目 | 必須 | 検索 | この開催回に対応する品目(更新不可) |
| 開始日付 | 必須 | 日付 | 有効開始日(当日を含む) |
| 終了日付 | 必須 | 日付 | 有効終了日(当日を含む) |
| 有効 | 必須 | チェック | レコードが有効か(既定 Y) |
graph TD
A["トレーニング<br/>S_Training<br/>(研修の親定義)"] --> B["クラス 1<br/>S_Training_Class<br/>2026-04-01 〜 2026-04-02"]
A --> C["クラス 2<br/>S_Training_Class<br/>2026-07-01 〜 2026-07-02"]
A --> D["クラス 3<br/>S_Training_Class<br/>2026-10-01 〜 2026-10-02"]
B --> E["品目 A<br/>M_Product"]
C --> F["品目 B<br/>M_Product"]
D --> G["品目 C<br/>M_Product"]
A --> H["品目カテゴリ / 数量単位<br/>/ 税カテゴリ"]
代替設計の選択肢
Section titled “代替設計の選択肢”このウィンドウが無効化されているため、研修管理を行う場合は以下の代替を検討してください。
| 実現したいこと | 代替手段 |
|---|---|
| 研修の販売・請求 | 品目マスタでサービス品目として登録し、受注伝票で販売 |
| 開催回ごとの日程管理 | 開催回ごとに品目を分ける、またはプロジェクト管理のフェーズ・タスクを活用 |
| 講師の工数管理 | 経費報告と時間タイプで工数を記録 |
| 受講者の管理 | 取引先マスタの連絡先、または関心トピックで案内対象を管理 |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. メニューにトレーニングが見当たりません
Section titled “Q. メニューにトレーニングが見当たりません”iDempiere 13 標準では、このウィンドウはメニューに登録されていません。AD 上にウィンドウ定義(AD_Window_ID: 253)は残っていますが、旧バージョンからの互換用です。使用する場合はシステム管理者がメニュー項目を追加する必要があります。
Q. トレーニング専用のビジネスロジックはありますか?
Section titled “Q. トレーニング専用のビジネスロジックはありますか?”ありません。S_Training と S_Training_Class のどちらにも専用の M クラスが存在せず、AD から自動生成された X_S_Training(368行)・X_S_Training_Class(254行)のみで扱われます。したがって beforeSave() などの検証ロジックはコアに実装されていません。
Q. 開始日付と終了日付の前後関係はチェックされますか?
Section titled “Q. 開始日付と終了日付の前後関係はチェックされますか?”コアにはチェックロジックがありません(M クラスが無いため)。終了日付が開始日付より前でも保存できてしまいます。整合性チェックが必要な場合は Model Validator で追加してください。
Q. 同じ研修に同じ品目のクラスを複数登録できますか?
Section titled “Q. 同じ研修に同じ品目のクラスを複数登録できますか?”S_Training_Class には品目の一意制約が定義されていないため、DB 上は登録可能です。ただし「1 開催回 = 1 品目」という設計思想から外れるため、運用上は開催回ごとに別品目を用意することを推奨します。
Q. クラスの品目を後から変更できますか?
Section titled “Q. クラスの品目を後から変更できますか?”できません。M_Product_ID は IsUpdateable=N(更新不可)として定義されています。同様に親の S_Training_ID も更新不可です。変更が必要な場合はレコードを削除して作り直してください。
Q. 「処理中(Processing)」ボタンは何をしますか?
Section titled “Q. 「処理中(Processing)」ボタンは何をしますか?”S_Training.Processing はボタン型のカラムとして定義されていますが、対応する処理を実装した M クラスもプロセスもコアには存在しません。押しても標準の動作はありません。
🛠 技術仕様(開発者向け)
トレーニング(AD_Window_ID: 253)は、S_Training(アクセスレベル 3、削除可能)と S_Training_Class(アクセスレベル 3、削除可能)の親子 2 テーブルで構成されるマスタ型ウィンドウです。iDempiere 13 標準では無効化され、標準メニューに登録されていません。
どちらのテーブルにも専用の M クラスは存在しません。 AD から自動生成された X_S_Training(368行)と X_S_Training_Class(254行)のみが提供され、インターフェース I_S_Training / I_S_Training_Class が定義されています。したがってコア実装のビジネスロジック(beforeSave / afterSave / 伝票処理)はありません。Document 型でもありません。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class X_S_Training {
<<generated>>
+getS_Training_ID() int
+setName(String) void
+setM_Product_Category_ID(int) void
+setC_UOM_ID(int) void
+setC_TaxCategory_ID(int) void
+getKeyNamePair() KeyNamePair
}
class X_S_Training_Class {
<<generated>>
+getS_Training_Class_ID() int
+setS_Training_ID(int) void
+setM_Product_ID(int) void
+setStartDate(Timestamp) void
+setEndDate(Timestamp) void
}
class PO {
<<abstract>>
}
class I_S_Training {
<<interface>>
}
class I_S_Training_Class {
<<interface>>
}
X_S_Training --|> PO
X_S_Training_Class --|> PO
X_S_Training ..|> I_S_Training
X_S_Training_Class ..|> I_S_Training_Class
X_S_Training --> X_S_Training_Class : has many
X_S_Training_Class --> MProduct : references
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/X_S_Training.java / X_S_Training_Class.java
関連DBテーブル
Section titled “関連DBテーブル”S_Training(トレーニング)
Section titled “S_Training(トレーニング)”テーブル属性: 削除可能 = Y、大量データ = N、アクセスレベル = 3、ビュー = N
| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| S_Training_ID | ID | PK | トレーニングID | 主キー・更新不可 |
| AD_Client_ID | TableDirect | Y | クライアント | 既定 @#AD_Client_ID@ |
| AD_Org_ID | TableDirect | Y | 組織 | 既定 @#AD_Org_ID@ |
| Name | String(60) | Y | 名称 | 更新可 |
| Description | String(255) | N | 説明 | 更新可 |
| Help | Text(2000) | N | コメント | 更新可 |
| M_Product_Category_ID | TableDirect | Y | 品目カテゴリ | 更新可 |
| C_UOM_ID | TableDirect | Y | 数量単位 | 更新可 |
| C_TaxCategory_ID | TableDirect | Y | 税カテゴリ | 更新可 |
| DocumentNote | Text(2000) | N | 伝票メモ | 更新可 |
| ImageURL | URL(120) | N | 画像URL | 更新可 |
| DescriptionURL | URL(120) | N | 説明URL | 更新可 |
| Processing | Button(1) | N | 処理中 | 対応処理はコアに無し |
| IsActive | YesNo | Y | 有効 | 既定 Y |
| S_Training_UU | UUID(36) | N | UUID |
S_Training_Class(クラス)
Section titled “S_Training_Class(クラス)”テーブル属性: 削除可能 = Y、大量データ = N、アクセスレベル = 3、ビュー = N
| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| S_Training_Class_ID | ID | PK | クラスID | 主キー・更新不可 |
| S_Training_ID | TableDirect | Y | トレーニングFK | 更新不可 |
| M_Product_ID | Search | Y | 品目 | 更新不可 |
| StartDate | Date | Y | 開始日付 | 更新可・当日を含む |
| EndDate | Date | Y | 終了日付 | 更新可・当日を含む |
| AD_Client_ID | TableDirect | Y | クライアント | 既定 @AD_Client_ID@ |
| AD_Org_ID | TableDirect | Y | 組織 | 既定 @AD_Org_ID@ |
| IsActive | YesNo | Y | 有効 | 既定 Y |
| S_Training_Class_UU | UUID(36) | N | UUID |
erDiagram
S_Training ||--o{ S_Training_Class : "classes"
S_Training }o--|| M_Product_Category : "category"
S_Training }o--|| C_UOM : "unit"
S_Training }o--|| C_TaxCategory : "tax category"
S_Training_Class }o--|| M_Product : "sellable product"
M_Product ||--o{ C_OrderLine : "sold via"
ビジネスロジック
Section titled “ビジネスロジック”コア実装のビジネスロジックはありません。 M クラスが存在せず、生成クラスは getter / setter と getKeyNamePair() のみを提供します。
結果として、以下の検証はコアでは行われません。
| 想定される検証 | コアでの実装 |
|---|---|
| 開始日付 ≦ 終了日付 | なし |
| 同一研修内でのクラス期間の重複チェック | なし |
品目が販売可能(IsSold=Y)か | なし |
| 品目カテゴリと品目の整合性 | なし |
Processing ボタン押下時の処理 | なし |
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”Callout
Section titled “Callout”S_Training / S_Training_Class のいずれにも、AD_Column に登録された Callout はありません。
OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”この画面を実際に利用する場合、最低限の整合性チェックは Model Validator で補う必要があります。
public class CustomTrainingValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (po instanceof X_S_Training_Class && (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE)) { X_S_Training_Class cls = (X_S_Training_Class) po; // 例: 開始日付と終了日付の前後関係チェック(コアには無い) if (cls.getStartDate() != null && cls.getEndDate() != null && cls.getEndDate().before(cls.getStartDate())) { throw new AdempiereException("終了日付は開始日付以降にしてください"); } } return null; }
@Override public String docValidate(PO po, int timing) { return null; // S_Training は Document 型ではない }}ウィンドウの有効化
Section titled “ウィンドウの有効化”このウィンドウを実運用で使う場合は、AD 上でメニュー項目を作成し、ロールにウィンドウアクセス権を付与する必要があります。ただし、コアのロジックが無い状態での利用となるため、業務要件を満たすには相応のカスタム実装が前提になります。新規案件では品目マスタ+受注、またはプロジェクト管理での代替設計を強く推奨します。
Processing ボタンの実装
Section titled “Processing ボタンの実装”S_Training.Processing にプロセスを紐付ける場合は、OSGi プロセス(ProcessCall / SvrProcess 実装)を作成し、AD_Column の AD_Process_ID を設定します。
関連プロセス
Section titled “関連プロセス”iDempiere 13 標準では、このウィンドウに紐付く有効なプロセスはありません。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”研修・講座の販売管理は、iDempiere 13 では標準機能ではなく設計次第の領域です。 品目マスタとプロジェクト管理を組み合わせた実装や、独自ウィンドウの新設まで、要件に応じた最適解をご提案します。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。