コンテンツにスキップ

iDempiere トレーニングの使い方|取引先管理 操作マニュアル・技術仕様

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

トレーニング(Training)は、繰り返し開催する研修と、その実施回(クラス)を定義する画面です。1 件の研修に対して、開催日程ごとのクラスを複数ぶら下げる親子構造になっています。

⚠️ 重要: iDempiere 13 標準では、このウィンドウは無効化されています(旧バージョンからの互換用として AD に定義が残っているのみで、標準メニューには登録されていません)。新規の業務設計での利用は推奨されません。研修の販売・実施を管理する場合は、品目マスタのサービス品目と受注伝票の組み合わせ、またはプロジェクト管理での代替をご検討ください。

📌 ポイント: トレーニングのクラス(S_Training_Class)は品目(M_Product_ID)と 1 対 1 で紐付きます。つまり「1 回の開催 = 1 つの販売可能な品目」という設計思想です。この構造を理解しておくと、代替設計を検討する際の判断がしやすくなります。

  • 繰り返し開催する研修の親レコードを定義する(名称・説明・コメント)
  • 研修に対応する品目カテゴリ・数量単位・税カテゴリを指定する
  • 開催回ごとのクラスを、開始日付・終了日付とともに登録する
  • クラスごとに対応する品目(サービス品目)を紐付ける
  • 画像 URL・説明 URL で外部の案内ページを参照させる
  • 伝票メモ(DocumentNote)で、生成される伝票への注記を持たせる

親子2タブ構成です。

タブ名テーブル項目数役割
トレーニングS_Training13項目研修の親定義(名称・品目カテゴリ・単位・税カテゴリ)
クラスS_Training_Class7項目実施回ごとのクラス(品目・開始日・終了日)

💡 ヒント: 親タブの「処理中(Processing)」はボタン型のカラムです。リファレンス上はフィールドとして存在しますが、iDempiere 13 標準ではこのウィンドウ自体が無効化されているため、実運用での使用は想定されていません。

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["💾 保存"]

iDempiere 13 では 標準メニュー未登録 利用するには AD で ウィンドウ・メニューを有効化 トレーニングタブで 研修を新規作成 品目カテゴリ・数量単位 税カテゴリを指定 保存 クラスタブで 開催回を登録 対応する品目を選択 開始日付・終了日付を設定

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

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

iDempiere 13 標準ではメニューに登録されていません(AD_Window_ID: 253)。参照・検証が必要な場合は、システム管理者ロールで「アプリケーション辞書 > ウィンドウ」から該当ウィンドウを確認するか、メニュー項目を追加して有効化する必要があります。

登録の手順(有効化した場合)

Section titled “登録の手順(有効化した場合)”
  1. トレーニング」タブで「新規」をクリックします
  2. 基本情報を入力します
    • 名称(Name: 研修名 — 必須、最大60文字
    • 説明(Description: 短い説明(最大255文字)
    • コメント(Help: 補足・ヒント(最大2,000文字)
  3. 品目連携の設定を行います(いずれも必須)
    • 品目カテゴリ(M_Product_Category_ID: クラス品目の分類
    • 数量単位(C_UOM_ID: 販売単位
    • 税カテゴリ(C_TaxCategory_ID: 適用する税区分
  4. 必要に応じて画像URL / 説明URL / 伝票メモを入力します
  5. 保存」をクリックします
  6. クラス」タブに移動し、開催回を登録します
    • 品目(M_Product_ID: この開催回に対応する品目 — 必須
    • 開始日付(StartDate: 有効開始日(当日を含む) — 必須
    • 終了日付(EndDate: 有効終了日(当日を含む) — 必須
  7. 保存」をクリックします

⚠️ 注意: クラスの品目(M_Product_ID)は必須かつ更新不可(IsUpdateable=N)です。登録後に品目を差し替えることはできません。誤って登録した場合は、クラスを削除して作り直してください。

項目名必須説明
クライアント必須選択テナント(既定 @#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/>/ 税カテゴリ"]

トレーニング S_Training (研修の親定義) クラス 1 S_Training_Class 2026-04-01 〜 2026-04-02 クラス 2 S_Training_Class 2026-07-01 〜 2026-07-02 クラス 3 S_Training_Class 2026-10-01 〜 2026-10-02 品目 A M_Product 品目 B M_Product 品目 C M_Product 品目カテゴリ / 数量単位 / 税カテゴリ

このウィンドウが無効化されているため、研修管理を行う場合は以下の代替を検討してください。

実現したいこと代替手段
研修の販売・請求品目マスタでサービス品目として登録し、受注伝票で販売
開催回ごとの日程管理開催回ごとに品目を分ける、またはプロジェクト管理のフェーズ・タスクを活用
講師の工数管理経費報告時間タイプで工数を記録
受講者の管理取引先マスタの連絡先、または関心トピックで案内対象を管理

Q. メニューにトレーニングが見当たりません

Section titled “Q. メニューにトレーニングが見当たりません”

iDempiere 13 標準では、このウィンドウはメニューに登録されていません。AD 上にウィンドウ定義(AD_Window_ID: 253)は残っていますが、旧バージョンからの互換用です。使用する場合はシステム管理者がメニュー項目を追加する必要があります。

Q. トレーニング専用のビジネスロジックはありますか?

Section titled “Q. トレーニング専用のビジネスロジックはありますか?”

ありません。S_TrainingS_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_IDIsUpdateable=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 型でもありません。

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

<> +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 <> +getS_Training_Class_ID() int +setS_Training_ID(int) void +setM_Product_ID(int) void +setStartDate(Timestamp) void +setEndDate(Timestamp) void <> <> > PO X_S_Training_Class -- > I_S_Training X_S_Training_Class ..

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

テーブル属性: 削除可能 = Y、大量データ = N、アクセスレベル = 3、ビュー = N

カラム名必須説明備考
S_Training_IDIDPKトレーニングID主キー・更新不可
AD_Client_IDTableDirectYクライアント既定 @#AD_Client_ID@
AD_Org_IDTableDirectY組織既定 @#AD_Org_ID@
NameString(60)Y名称更新可
DescriptionString(255)N説明更新可
HelpText(2000)Nコメント更新可
M_Product_Category_IDTableDirectY品目カテゴリ更新可
C_UOM_IDTableDirectY数量単位更新可
C_TaxCategory_IDTableDirectY税カテゴリ更新可
DocumentNoteText(2000)N伝票メモ更新可
ImageURLURL(120)N画像URL更新可
DescriptionURLURL(120)N説明URL更新可
ProcessingButton(1)N処理中対応処理はコアに無し
IsActiveYesNoY有効既定 Y
S_Training_UUUUID(36)NUUID

テーブル属性: 削除可能 = Y、大量データ = N、アクセスレベル = 3、ビュー = N

カラム名必須説明備考
S_Training_Class_IDIDPKクラスID主キー・更新不可
S_Training_IDTableDirectYトレーニングFK更新不可
M_Product_IDSearchY品目更新不可
StartDateDateY開始日付更新可・当日を含む
EndDateDateY終了日付更新可・当日を含む
AD_Client_IDTableDirectYクライアント既定 @AD_Client_ID@
AD_Org_IDTableDirectY組織既定 @AD_Org_ID@
IsActiveYesNoY有効既定 Y
S_Training_Class_UUUUID(36)NUUID
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"

tax category sellable product sold via

コア実装のビジネスロジックはありません。 M クラスが存在せず、生成クラスは getter / setter と getKeyNamePair() のみを提供します。

結果として、以下の検証はコアでは行われません。

想定される検証コアでの実装
開始日付 ≦ 終了日付なし
同一研修内でのクラス期間の重複チェックなし
品目が販売可能(IsSold=Y)かなし
品目カテゴリと品目の整合性なし
Processing ボタン押下時の処理なし

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

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

S_Training / S_Training_Class のいずれにも、AD_Column に登録された Callout はありません。

この画面を実際に利用する場合、最低限の整合性チェックは 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 型ではない
}
}

このウィンドウを実運用で使う場合は、AD 上でメニュー項目を作成し、ロールにウィンドウアクセス権を付与する必要があります。ただし、コアのロジックが無い状態での利用となるため、業務要件を満たすには相応のカスタム実装が前提になります。新規案件では品目マスタ+受注、またはプロジェクト管理での代替設計を強く推奨します。

S_Training.Processing にプロセスを紐付ける場合は、OSGi プロセス(ProcessCall / SvrProcess 実装)を作成し、AD_Column の AD_Process_ID を設定します。

iDempiere 13 標準では、このウィンドウに紐付く有効なプロセスはありません。


研修・講座の販売管理は、iDempiere 13 では標準機能ではなく設計次第の領域です。 品目マスタとプロジェクト管理を組み合わせた実装や、独自ウィンドウの新設まで、要件に応じた最適解をご提案します。

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

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