Skip to content

iDempiere リソースマスタの使い方|取引先管理 操作マニュアル・技術仕様

This content is not available in your language yet.

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

リソースマスタは、会議室・機材・要員のように「予約して使う対象」を登録するマスタです。リソースを登録すると対応する品目(M_Product)が自動生成・自動同期されるため、受注伝票や請求書でそのままサービスとして扱えます。

📌 ポイント: リソースと品目は1対1で自動連携します。名称・数量単位などの属性は必ずリソース側で更新してください。品目側を直接書き換えても、リソース保存時に上書きされます。

  • リソース(会議室・機材・要員など)の登録と稼働可否の管理
  • リソースタイプによる稼働時間帯・稼働曜日の一括制御
  • 対応する品目の自動生成・自動同期(受注・請求で利用可能に)
  • 稼働不可期間(休暇・保守など)の登録
  • 価格表バージョンごとの価格設定
  • 会計スキーマごとの勘定科目設定
  • アサイン(予約)履歴の照会
  • 製造リソースとしての利用(日次能力・稼働率・待ち時間などの設定)

リソースマスタは6タブ構成(うち2つは品目配下の孫タブ)です。

タブ名テーブル項目数役割
リソースマスタS_Resource10項目リソース本体(タイプ・倉庫・稼働可否)
稼働不可期間S_ResourceUnAvailable7項目使用できない期間の登録
リソース品目M_Product24項目自動生成された品目の情報
価格M_ProductPrice8項目価格表バージョンごとの価格
会計M_Product_Acct14項目会計スキーマごとの勘定科目
アサイン情報S_ResourceAssignment9項目予約・割当の履歴
graph TD
    T1["🏢 リソースマスタ<br/>S_Resource<br/>10項目"]
    T2["🚫 稼働不可期間<br/>S_ResourceUnAvailable<br/>7項目"]
    T3["📦 リソース品目<br/>M_Product<br/>24項目"]
    T4["💴 価格<br/>M_ProductPrice<br/>8項目"]
    T5["📒 会計<br/>M_Product_Acct<br/>14項目"]
    T6["📅 アサイン情報<br/>S_ResourceAssignment<br/>9項目"]
    T1 --> T2
    T1 --> T3
    T3 --> T4
    T3 --> T5
    T1 --> T6

リソースマスタ S_Resource 10項目 稼働不可期間 S_ResourceUnAvailable 7項目 リソース品目 M_Product 24項目 価格 M_ProductPrice 8項目 会計 M_Product_Acct 14項目 アサイン情報 S_ResourceAssignment 9項目

💡 ヒント: 「価格」「会計」は品目タブの配下(第2階層)にあります。価格を設定するには、まず「リソース品目」タブでレコードを選択してから移動してください。

graph TD
    A["🚀 メニューから開く<br/>取引先管理 > サービス > リソースマスタ(タイプ毎)(標準)"] --> B["📋 事前にリソースタイプを登録"]
    B --> C["➕ 新規で基本情報を入力<br/>(検索キー・名称)"]
    C --> D["🏷 リソースタイプを選択<br/>(稼働時間帯・曜日を継承)"]
    D --> E["🏭 倉庫を選択<br/>(サービス提供拠点)"]
    E --> F["💾 保存<br/>(品目が自動生成される)"]
    F --> G["💴 価格タブで<br/>価格表ごとの単価を登録"]
    G --> H{"休暇や保守で<br/>使えない期間があるか"}
    H -->|ある| I["🚫 稼働不可期間タブに<br/>開始日・終了日を登録"]
    H -->|ない| J["✅ 受注伝票などから<br/>リソースを予約"]
    I --> J
    J --> K["📅 アサイン情報タブで<br/>予約状況を確認"]

メニューから開く 取引先管理 > サービス > リソースマスタ(タイプ毎)(標準) 事前にリソースタイプを登録 新規で基本情報を入力 (検索キー・名称) リソースタイプを選択 (稼働時間帯・曜日を継承) 倉庫を選択 (サービス提供拠点) 保存 (品目が自動生成される) 価格タブで 価格表ごとの単価を登録 休暇や保守で 使えない期間があるか 稼働不可期間タブに 開始日・終了日を登録 受注伝票などから リソースを予約 アサイン情報タブで 予約状況を確認 ある ない

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

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

メニューから「取引先管理 > サービス > リソースマスタ(タイプ毎)(標準)」を開きます。

新規登録(必須項目ベースの手順)

Section titled “新規登録(必須項目ベースの手順)”
  1. あらかじめリソースタイプを登録しておきます
  2. ツールバーの「新規」ボタンをクリック
  3. 必須項目を入力:
    • 検索キー: リソースコード(40文字以内)。空欄で保存すると名称がそのままセットされます
    • 名称: リソース名(60文字以内、例: 第1会議室
    • リソースタイプ: 稼働時間帯・曜日・数量単位・品目カテゴリ・税カテゴリを決める分類
    • 倉庫: サービス提供拠点となる倉庫
    • 稼働可能: 既定でチェック済み
  4. 任意で ユーザー を割り当て(要員リソースの場合)
  5. 保存」をクリック

⚠️ 注意: 保存すると、リソースに対応する品目が自動生成されます。品目の名称・数量単位・カテゴリ・税カテゴリはリソースおよびリソースタイプから同期されるため、品目タブで直接書き換えても次回のリソース保存時に上書きされます。

  1. 稼働不可期間」タブに移動して「新規」
  2. 開始日付(必須)と 終了日付 を入力
  3. 説明に理由(休暇・保守など)を記入
  4. 保存」をクリック

💡 ヒント: 終了日付を空欄で保存すると、自動的に開始日付と同じ日がセットされます(1日だけの稼働不可を登録するショートカットになります)。

  1. リソース品目」タブでレコードを選択
  2. 価格」タブに移動して「新規」
  3. 価格表バージョンを選び、営業定価 / 実績価格 / 限度価格 を入力
項目名必須説明
クライアント必須選択テナント
組織必須選択組織
検索キー必須文字列(40)リソースコード(空欄なら名称が入る)
名称必須文字列(60)リソース名
説明-文字列(255)補足説明
リソースタイプ必須選択稼働ルールを決める分類
倉庫必須選択サービス提供拠点
ユーザー-選択要員リソースの場合の担当ユーザー
稼働可能必須チェック予約可能か(既定 Y)
有効必須チェックレコードが有効か(既定 Y)
項目名必須説明
リソース必須選択親のリソース
開始日付必須日付稼働不可の開始日
終了日付-日付稼働不可の終了日(空欄なら開始日と同じ)
説明-文字列(255)理由
項目名必須説明
リソース必須選択対象リソース
配分開始日必須日時予約開始日時
配分終了日-日時予約終了日時
数量-数量割当数量
確認済み必須チェック予約確定済みか
名称必須文字列(60)予約の名称

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

Q. リソースを登録したら品目が勝手に増えました

Section titled “Q. リソースを登録したら品目が勝手に増えました”

仕様です。MResource.beforeSave() が新規リソースに対して品目レコードを生成し、afterSave() で名称や単位などを同期します。リソースは受注・請求で扱うために品目の実体を必要とするためです。

Q. リソースを削除すると品目も消えますか?

Section titled “Q. リソースを削除すると品目も消えますか?”

はい。MResource.beforeDelete() が対応する品目のリソース参照を外したうえで、品目を削除します。品目が受注伝票などから参照されている場合は削除に失敗するため、その場合はリソースの「有効」チェックを外して無効化してください。

Q. 「検索キー」を空欄のまま保存できますか?

Section titled “Q. 「検索キー」を空欄のまま保存できますか?”

できます。空欄またはゼロ文字の場合、beforeSave()名称の値を検索キーにコピーします。ただし検索キーは一意である必要があるため、同名リソースを複数作る場合は明示的にコードを付けてください。

Q. 稼働不可期間で「終了日付が開始日付より前」の日付を入れるとどうなりますか?

Section titled “Q. 稼働不可期間で「終了日付が開始日付より前」の日付を入れるとどうなりますか?”

MResourceUnAvailable.beforeSave() が検証し、エラーメッセージ(@DateTo@ > @DateFrom@)を出して保存を拒否します。

Q. 確定済みのアサインを削除できません

Section titled “Q. 確定済みのアサインを削除できません”

MResourceAssignment.beforeDelete()確認済みIsConfirmed=Y)のアサインの削除を拒否します。削除するにはまず「確認済み」のチェックを外してください。

Q. 製造リソースとしても使えますか?

Section titled “Q. 製造リソースとしても使えますか?”

S_Resource は製造モジュール向けのカラム(製造リソース フラグ、製造リソースタイプ日次能力稼働率待ち時間計画期間)を持ちます。ただし製造リソースかつ Plant タイプの場合、計画期間PlanningHorizon)が 0 以下だと保存時に例外になります。

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

リソースは S_Resource テーブル(アクセスレベル 3 = クライアント/組織、削除可)に格納されます。モデルクラスは MResource(281行)で、ImmutablePOSupport を実装しキャッシュ経由の参照に対応します。最大の特徴は品目(M_Product)とのライフサイクル同期で、生成・更新・削除のすべてがフックで連動します。子テーブルは MResourceUnAvailable(124行)と MResourceAssignment(115行)が対応します。Document 型ではありません。

classDiagram
    class MResource {
        +get(ctx, S_Resource_ID) MResource
        +getCopy(ctx, id, trxName) MResource
        +getResourceType() MResourceType
        +getProduct() MProduct
        +getC_UOM_ID() int
        +beforeSave(boolean) boolean
        +afterSave(boolean, boolean) boolean
        +beforeDelete() boolean
        +markImmutable() MResource
    }
    class X_S_Resource {
        <<generated>>
    }
    class MResourceUnAvailable {
        +isUnAvailable(I_S_Resource, Timestamp) boolean
        +beforeSave(boolean) boolean
    }
    class MResourceAssignment {
        +beforeDelete() boolean
    }
    class ImmutablePOSupport {
        <<interface>>
    }
    class PO {
        <<abstract>>
    }
    MResource --|> X_S_Resource
    X_S_Resource --|> PO
    MResource ..|> ImmutablePOSupport
    MResource --> MProduct : creates and syncs
    MResource --> MResourceType : rules
    MResource --> MResourceUnAvailable : has many
    MResource --> MResourceAssignment : has many

+get(ctx, S_Resource_ID) MResource +getCopy(ctx, id, trxName) MResource +getResourceType() MResourceType +getProduct() MProduct +getC_UOM_ID() int +beforeSave(boolean) boolean +afterSave(boolean, boolean) boolean +beforeDelete() boolean +markImmutable() MResource <> +isUnAvailable(I_S_Resource, Timestamp) boolean +beforeSave(boolean) boolean +beforeDelete() boolean <> <> > X_S_Resource X_S_Resource --

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

カラム名必須説明備考
S_Resource_IDIDPKリソースID主キー
S_Resource_UUUUID(36)NUUID
AD_Client_IDTable DirectYクライアント既定 @#AD_Client_ID@
AD_Org_IDTable DirectY組織既定 @#AD_Org_ID@
ValueString(40)Y検索キー空欄なら Name をコピー
NameString(60)Y名称
DescriptionString(255)N説明
S_ResourceType_IDTable DirectYリソースタイプ稼働ルールの継承元
M_Warehouse_IDTable DirectY倉庫サービス提供拠点
AD_User_IDTable DirectNユーザー要員リソース用
IsAvailableYes-NoY稼働可能既定 Y
IsActiveYes-NoY有効既定 Y
IsManufacturingResourceYes-NoN製造リソース既定 N
ManufacturingResourceTypeList(2)N製造リソースタイプPlant 等
PlanningHorizonIntegerN計画期間既定 0・Plant では 1 以上必須
DailyCapacityQuantityN日次能力
PercentUtilizationNumberY稼働率既定 100
QueuingTime / WaitingTimeQuantityN待ち時間製造向け
ChargeableQtyQuantityN課金数量

S_ResourceUnAvailable(稼働不可期間)/S_ResourceAssignment(アサイン)

Section titled “S_ResourceUnAvailable(稼働不可期間)/S_ResourceAssignment(アサイン)”
テーブル主なカラム備考
S_ResourceUnAvailableS_Resource_ID / DateFrom(必須) / DateTo / DescriptionDateTo 未設定なら DateFrom を自動セット
S_ResourceAssignmentS_Resource_ID / AssignDateFrom(必須) / AssignDateTo / Qty / IsConfirmed / Name(必須)確認済みは削除不可
erDiagram
    S_ResourceType ||--o{ S_Resource : "type rules"
    S_Resource ||--o{ S_ResourceUnAvailable : "unavailable periods"
    S_Resource ||--o{ S_ResourceAssignment : "assignments"
    S_Resource ||--|| M_Product : "auto-created product"
    M_Product ||--o{ M_ProductPrice : "pricing"
    M_Product ||--o{ M_Product_Acct : "accounting"
    S_Resource }o--|| M_Warehouse : "service point"

type rules unavailable periods auto-created product service point

flowchart TD
    A["リソースを保存"] --> B{"新規?"}
    B -->|Yes| C["検索キーが空なら<br/>名称をコピー"]
    C --> D["MProduct を新規生成<br/>(リソースとタイプから)"]
    D --> E["product.saveEx"]
    B -->|No| F["製造リソースの検証"]
    E --> F
    F --> G{"製造リソース かつ Plant<br/>かつ 計画期間 <= 0?"}
    G -->|Yes| H["AdempiereException"]
    G -->|No| I["保存実行"]
    I --> J["afterSave: product.setResource(this)<br/>変更があれば saveEx"]
    J --> K["品目の名称・単位等が同期される"]

リソースを保存 新規? 検索キーが空なら 名称をコピー MProduct を新規生成 (リソースとタイプから) product.saveEx 製造リソースの検証 製造リソース かつ Plant かつ 計画期間 <= 0? 保存実行 afterSave: product.setResource(this) 変更があれば saveEx 品目の名称・単位等が同期される

beforeSave()

if (newRecord)
{
if (getValue() == null || getValue().length() == 0)
setValue(getName());
m_product = new MProduct(this, getResourceType());
m_product.saveEx(get_TrxName());
}
if (isManufacturingResource()
&& MANUFACTURINGRESOURCETYPE_Plant.equals(getManufacturingResourceType())
&& getPlanningHorizon() <= 0)
{
throw new AdempiereException("@"+COLUMNNAME_PlanningHorizon+"@ <= @0@ !");
}

afterSave(): getProduct().setResource(this) が true(変更あり)を返した場合のみ品目を保存します。名称・数量単位などがリソース側の値で上書きされる仕組みです。

beforeDelete(): 品目のリソース参照(S_Resource_ID)を 0 にしてから品目を削除します。コメントにあるとおり、参照を外さないと MProduct.beforeSave() の検証で失敗するためです。

⚠️ 注意: リソースの削除は品目の削除を伴います。受注明細・請求明細から参照されている品目は削除できないため、その場合はリソースごと削除できません。無効化(IsActive=N)で運用してください。

public int getC_UOM_ID()
{
return getProduct().getC_UOM_ID();
}

S_Resource は数量単位カラムを持たず、品目経由でリソースタイプの単位を参照します。単位を変えたい場合はリソースタイプ側で変更します。

MResourceUnAvailable.isUnAvailable(I_S_Resource r, Timestamp dateTime)(static)と、インスタンスメソッド isUnAvailable(Timestamp) が提供されます。インスタンス側は日付を日単位に切り捨て(TimeUtil.trunc(..., TRUNC_DAY))、DateFrom より前でも DateTo より後でもなければ「稼働不可」と判定します。

beforeSave()DateTo 未設定時に DateFrom をコピーし、DateFrom > DateTo の場合は log.saveError()@DateTo@ > @DateFrom@ を返して保存を中止します。

protected boolean beforeDelete ()
{
// Can't delete if assignment is confirm
if (isConfirmed())
return false;
return true;
}

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

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

S_Resource / S_ResourceUnAvailable / S_ResourceAssignment のカラムには Callout の登録がありませんAD_Column.Callout はすべて未設定)。

public class CustomResourceValidator implements ModelValidator {
@Override
public int modelChange(PO po, int type) throws Exception {
if (po instanceof MResourceAssignment && type == TYPE_BEFORE_NEW) {
MResourceAssignment ra = (MResourceAssignment) po;
// 例: 稼働不可期間と重なる予約を拒否する
if (MResourceUnAvailable.isUnAvailable(
MResource.get(ra.getCtx(), ra.getS_Resource_ID()), ra.getAssignDateFrom())) {
throw new AdempiereException("この期間はリソースが稼働不可です");
}
}
return null;
}
}

🔧 カスタマイズ: MResource.get() はイミュータブルなインスタンスを返す場合があります。値を更新する処理では MResource.getCopy(ctx, id, trxName) を使ってください。markImmutable() 済みのオブジェクトへの setter 呼び出しは例外になります。

S_ResourceType.IsSingleAssignment(重複アサインなし)はリソースタイプ側のフラグですが、MResourceAssignment に重複検証の実装はありません。ダブルブッキングを厳密に防ぐ場合は Model Validator で AssignDateFrom / AssignDateTo の重なりを検査する実装を追加します。


リソースは品目と密結合し、予約の重複チェックはコアに実装されていません。会議室予約・要員アサインなどを実運用するには、稼働不可期間との突合や重複防止の実装が有効です。

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

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