コンテンツにスキップ

iDempiere 属性の使い方|在庫管理 操作マニュアル・技術仕様

📖 在庫管理の全体像: 在庫管理の業務フロー全体図 も合わせてご覧ください。

属性は、色・サイズなどの品目属性を定義するマスタです。ここで定義した属性を属性セット(M_AttributeSet)に組み込み、その属性セットを品目マスタに設定することで、品目に属性情報を付与できます。

📌 ポイント: 「インスタンス属性」フラグが属性の性格を決めます。OFF なら品目単位で共通の値(例: 色)、ON ならシリアルNo・ロットのように在庫の個体(インスタンス)ごとに異なる値を持ちます。

  • 品目属性の定義(色・サイズ等)
  • 属性値タイプの選択(文字列・数値・リスト・日付・リファレンス・複数選択リスト)
  • リスト型属性の選択肢(属性値)の登録
  • インスタンス属性(個体ごとの値)と品目共通属性の区別
  • 属性の入力必須化(必須フラグ)
  • リファレンス型でのシステム参照・ダイナミックバリデーションの利用

属性は2タブ構成です。

タブ名テーブル項目数役割
属性M_Attribute約14項目属性の定義(名称・属性値タイプ・インスタンス属性等)
属性値M_AttributeValue約8項目リスト型属性の選択肢(例: 緑、L サイズ)

💡 ヒント: 属性値タブは属性値タイプが「リスト」の場合のみ使用します。文字列・数値・日付型では属性値の登録は不要です。

graph TD
    A["🚀 メニューから開く<br/>在庫管理 > 品目属性管理 > 属性"] --> B["➕ 新規で名称を入力"]
    B --> C{属性値タイプ}
    C -->|文字列/数値/日付| D["✏️ タイプを選択して保存<br/>(自由入力の属性)"]
    C -->|リスト| E["📋 属性値タブで選択肢を登録<br/>(例: S / M / L)"]
    C -->|リファレンス| F["🔗 リファレンス・リファレンスキーを設定<br/>(上級ロールのみ)"]
    D --> G["🏷️ インスタンス属性・必須フラグを設定"]
    E --> G
    F --> G
    G --> H["💾 保存"]
    H --> I["🔗 属性セットに組み込み<br/>→ 品目マスタへ適用"]

メニューから開く 在庫管理 > 品目属性管理 > 属性 新規で名称を入力 タイプを選択して保存 (自由入力の属性) 属性値タブで選択肢を登録 (例: S / M / L) リファレンス・リファレンスキーを設定 (上級ロールのみ) インスタンス属性・必須フラグを設定 保存 属性セットに組み込み → 品目マスタへ適用 属性値タイプ 文字列/数値/日付 リスト リファレンス

メニューから「在庫管理 > 品目属性管理 > 属性」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. 基本情報を入力:
    • 名称: 属性名(例: サイズ
    • 属性値タイプ: 値の入力形式を選択(デフォルト: 文字列 最大40文字)
    • インスタンス属性: 在庫の個体ごとに値が異なる場合にチェック
    • 必須: 属性の入力を必須にする場合にチェック
  3. 保存」をクリック
  1. 属性タブで属性値タイプに「リスト」を選択して保存
  2. 属性値」タブに移動
  3. 選択肢を登録:
    • 検索キー: 選択肢のコード(例: S
    • 名称: 選択肢の表示名(例: Sサイズ
  4. 選択肢の数だけ繰り返して保存
項目名必須説明
名称必須文字列属性の名称
説明-文字列補足説明
属性値タイプ必須リスト値の形式(下表参照。デフォルト: 文字列 最大40文字)
インスタンス属性必須チェック個体(シリアルNo・ロット等)ごとの値かどうか
必須必須チェック属性入力を必須にするか
リファレンス-選択リファレンス型で使用するシステム参照
リファレンスキー-選択型が Table / List の場合に指定
日付書式-文字列日付型の入力書式
ダイナミックバリデーション-選択リファレンス型の動的絞り込みルール
Default Logic-文字列デフォルト値のロジック(; 区切り)
タイプコード属性値タブ説明
文字列(最大40文字)S不要自由入力の文字列(デフォルト)
数値N不要数値入力
リストL使用属性値タブの選択肢から選択
日付D不要日付入力(日付書式を指定可能)
リファレンスR不要システム参照から選択(上級ロール限定)
複数選択リストC使用複数選択可能なリスト

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

Q. 属性を新規保存しようとすると「ここでは許可されていません」エラーになります

Section titled “Q. 属性を新規保存しようとすると「ここでは許可されていません」エラーになります”

属性の新規作成、およびリファレンス型属性の変更は、上級権限(Access Advanced)を持つロールのみ実行できます(MAttribute.beforeSave() によるチェック)。システム管理者ロール等、上級権限のあるロールでログインしてください。

Q. インスタンス属性に変更したら、属性セット側の設定も変わりました

Section titled “Q. インスタンス属性に変更したら、属性セット側の設定も変わりました”

仕様どおりの動作です。属性を非インスタンス属性からインスタンス属性に変更すると、MAttribute.afterSave() がその属性を使用しているすべての属性セット(M_AttributeUse 経由)の「インスタンス属性」フラグを自動的に Y に更新します。

Q. 属性の名称変更時に「UniqueAttribute」エラーが出ます

Section titled “Q. 属性の名称変更時に「UniqueAttribute」エラーが出ます”

名称変更時には、同一クライアント内で重複する属性名がテーブル属性用途で使われていないかがチェックされます(beforeSave() の重複チェック)。別の名称を指定してください。

Q. 属性値タブに登録した選択肢が表示されません

Section titled “Q. 属性値タブに登録した選択肢が表示されません”

属性値の選択肢が使われるのは属性値タイプが「リスト」の場合のみです(getMAttributeValues() はリスト型のときだけ属性値を読み込みます)。属性タブのタイプ設定を確認してください。

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

属性はマスタデータ型のウィンドウ(AD_Window_ID: 260)で、M_Attribute(属性定義)と M_AttributeValue(リスト選択肢)の2テーブルで構成されます。モデルクラスは MAttribute(442行)と MAttributeValue(110行)です。MAttributeget(ctx, M_Attribute_ID) によるキャッシュ参照と markImmutable() をサポートします。Document 型ではありません。

classDiagram
    class MAttribute {
        +getOfClient(ctx, ...) MAttribute[]
        +get(ctx, M_Attribute_ID) MAttribute
        +getMAttributeValues() MAttributeValue[]
        +getMAttributeInstance(M_AttributeSetInstance_ID) MAttributeInstance
        +setMAttributeInstance(id, value)
        +isAttributeValueTypeReference() boolean
        #beforeSave(newRecord) boolean
        #afterSave(newRecord, success) boolean
        +markImmutable() MAttribute
    }
    class MAttributeValue {
        +toString() String
    }
    class X_M_Attribute {
        <<generated>>
    }
    class X_M_AttributeValue {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    MAttribute --|> X_M_Attribute
    MAttributeValue --|> X_M_AttributeValue
    X_M_Attribute --|> PO
    X_M_AttributeValue --|> PO
    MAttribute --> MAttributeValue : has many (List type)
    MAttribute --> MAttributeInstance : instance values

+getOfClient(ctx, ...) MAttribute[] +get(ctx, M_Attribute_ID) MAttribute +getMAttributeValues() MAttributeValue[] +getMAttributeInstance(M_AttributeSetInstance_ID) MAttributeInstance +setMAttributeInstance(id, value) +isAttributeValueTypeReference() boolean #beforeSave(newRecord) boolean #afterSave(newRecord, success) boolean +markImmutable() MAttribute +toString() String <> <> > X_M_Attribute MAttributeValue -- > PO X_M_AttributeValue --

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

カラム名必須説明備考
M_Attribute_IDIDPK属性ID主キー
AD_Client_IDTableDirectYクライアント
AD_Org_IDTableDirectY組織
NameString(60)Y名称識別子
AttributeValueTypeList(1)Y属性値タイプS/N/L/D/R/C、デフォルト S
IsInstanceAttributeYesNoYインスタンス属性
IsMandatoryYesNoY必須
AD_Reference_IDTableNリファレンスR 型で使用
AD_Reference_Value_IDTableNリファレンスキーTable/List 時に指定
AD_Val_Rule_IDTableDirectNダイナミックバリデーション
DateFormatString(20)N日付書式D 型で使用
DefaultValueString(2000)NDefault Logic; 区切り
M_AttributeSearch_IDTableDirectN属性検索FK共通検索属性への割当
EntityTypeTable(40)Nエンティティタイプ辞書同期の所有区分
カラム名必須説明備考
M_AttributeValue_IDIDPK属性値ID主キー
M_Attribute_IDTableDirectY属性FK親リンク
ValueString(40)Y検索キー一意
NameString(60)Y名称識別子
DescriptionString(255)N説明
erDiagram
    M_Attribute ||--o{ M_AttributeValue : "list values"
    M_Attribute ||--o{ M_AttributeUse : "used in"
    M_AttributeSet ||--o{ M_AttributeUse : "contains"
    M_Attribute ||--o{ M_AttributeInstance : "instance values"
    M_AttributeSearch ||--o{ M_Attribute : "search grouping"

list values used in instance values search grouping

MAttribute.beforeSave() の処理(ソース根拠):

  1. 権限チェック: 新規レコード、またはリファレンス型(ATTRIBUTEVALUETYPE_Reference)の場合、MRole.getDefault().isAccessAdvanced() でなければ ActionNotAllowedHere エラーで保存を拒否
  2. 名称重複チェック: 名称変更時、同一クライアント内のテーブル属性用途で重複名があると UniqueAttribute エラーで保存を拒否

非インスタンス属性からインスタンス属性への変更時、M_AttributeUse を介してこの属性を含む M_AttributeSetIsInstanceAttribute を SQL 一括更新で 'Y' に設定します。

getMAttributeValues() は属性値タイプが List(L)の場合のみ M_AttributeValue を読み込み、先頭に null 要素(未選択)を付加した配列を返します。属性インスタンスへの値設定は setMAttributeInstance() のオーバーロード(String / BigDecimal / int / KeyNamePair / Timestamp / 複数選択)で行います。

  • Model Validator: 属性値の形式チェックや命名規則などの独自制約を M_Attribute / M_AttributeValue の保存時に追加できます。
  • Callout: gw_column.tsv 上、両テーブルに標準の Callout は定義されていません。
  • ダイナミックバリデーション(AD_Val_Rule_ID): リファレンス型属性の選択肢を SQL 条件で動的に絞り込めます。コード変更なしで設定可能です。

リファレンスページ・メニュー上、このウィンドウ固有の関連プロセスはありません。


品目属性は Model Validator やダイナミックバリデーションでコア改変なしに拡張できます。属性セット設計・ロット/シリアル追跡の導入もご相談ください。

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

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