コンテンツにスキップ

iDempiere 役職の使い方|取引先管理 操作マニュアル・技術仕様

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

役職は、社内(従業員)または社外のポジションを定義するマスタです。役職そのものの定義に加えて、「誰がいつからいつまでその役職に就いているか」という割当と、「その役職にどの報酬が対応するか」という報酬の紐付けを、同じウィンドウの子タブで管理します。

📌 ポイント: 割当タブ・報酬タブはいずれも有効開始日・有効終了日を持ちます。役職者の交代や報酬改定は既存レコードの上書きではなく、期間を区切った新しいレコードの追加で表現するのが正しい運用です。

  • 社内・社外のポジション(役職)の定義
  • 業種カテゴリによる役職の分類
  • 従業員(ユーザー)への役職の割当と有効期間の管理
  • 役職と報酬(給与・賃金)の紐付けと有効期間の管理
  • 従業員向け役職かどうかの区別(従業員フラグ)
  • 説明・コメントによる職務内容の記録

役職は3タブ構成です。

タブ名テーブル項目数役割
役職C_Job8項目役職の基本情報(名称・業種カテゴリ・従業員フラグ)
割当C_JobAssignment8項目従業員(ユーザー)への割当と有効期間
報酬C_JobRemuneration8項目役職に対応する報酬と有効期間
graph TD
    subgraph "役職(Window ID: 351)"
        T1["🏷 役職<br/>C_Job<br/>8項目"]
        T2["&nbsp;&nbsp;└ 割当<br/>&nbsp;&nbsp;&nbsp;&nbsp;C_JobAssignment<br/>&nbsp;&nbsp;&nbsp;&nbsp;8項目"]
        T3["&nbsp;&nbsp;└ 報酬<br/>&nbsp;&nbsp;&nbsp;&nbsp;C_JobRemuneration<br/>&nbsp;&nbsp;&nbsp;&nbsp;8項目"]
    end
    T1 --> T2
    T1 --> T3

役職(Window ID: 351) 役職 C_Job 8項目   └ 割当     C_JobAssignment     8項目   └ 報酬     C_JobRemuneration     8項目

💡 ヒント: 役職を登録する前に「業種カテゴリ」を作成しておいてください。役職タブの業種カテゴリは必須項目です。

graph TD
    A["🗂 業種カテゴリを先に登録"] --> B["🚀 メニューから開く<br/>取引先管理 > 取引先管理セットアップ > 役職"]
    B --> C["➕ 新規で役職を作成<br/>(名称・業種カテゴリは必須)"]
    C --> D{社内の役職?}
    D -->|はい| E["👤 従業員にチェック"]
    D -->|いいえ(社外)| F["👥 従業員のチェックを外す"]
    E --> G["💾 保存"]
    F --> G
    G --> H["📋 割当タブで<br/>ユーザーと有効開始日を登録"]
    H --> I{報酬を紐付ける?}
    I -->|はい| J["💴 報酬タブで<br/>報酬と有効開始日を登録"]
    I -->|いいえ| K["✅ 登録完了"]
    J --> K

業種カテゴリを先に登録 メニューから開く 取引先管理 > 取引先管理セットアップ > 役職 新規で役職を作成 (名称・業種カテゴリは必須) 従業員にチェック 従業員のチェックを外す 保存 割当タブで ユーザーと有効開始日を登録 報酬タブで 報酬と有効開始日を登録 登録完了 社内の役職? 報酬を紐付ける? はい いいえ(社外) いいえ

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

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

メニューから「取引先管理 > 取引先管理セットアップ > 役職」を開きます(AD_Window_ID: 351)。

  1. ツールバーの「新規」ボタンをクリック
  2. 基本情報を入力:
    • 名称(必須): 役職名(例: 営業部長経理担当
    • 業種カテゴリ(必須): 事前に登録した分類を選択
    • 説明: 短い説明(255文字まで)
    • コメント: 職務内容など(2,000文字まで)
    • 従業員: 社内の従業員向け役職の場合はチェック(既定値はY)
  3. 保存」をクリック
  1. 役職を選択した状態で「割当」タブへ移動
  2. 新規」で割当を登録:
    • ユーザー(必須): 割り当てる従業員/連絡先
    • 有効開始日(必須): 就任日(この日を含む)
    • 有効終了日: 退任日(この日を含む)。継続中は空欄
    • 説明: 補足(兼務・異動理由など)
  3. 保存」をクリック
  1. 報酬」タブへ移動
  2. 新規」で報酬を登録:
    • 報酬(必須): 賃金・給与のマスタから選択
    • 有効開始日(必須): 適用開始日
    • 有効終了日: 適用終了日。継続中は空欄
    • 説明: 改定理由など
  3. 保存」をクリック

⚠️ 注意: 有効期間の重複チェックは標準では行われません。同じユーザー・同じ役職の期間が重なっていても保存できてしまうため、報酬計算に影響する場合は Model Validator による重複チェックの追加を検討してください。

項目名必須説明
クライアント必須選択テナント(既定値は自動セット)
組織必須選択組織(既定値は自動セット)
名称必須文字列(60)役職名。識別子として使用
説明-文字列(255)短い説明
コメント-テキスト(2000)職務内容などのヒント
従業員必須チェック従業員向け役職か(既定値 Y)
業種カテゴリ必須選択役職の分類
有効必須チェック有効フラグ(既定値 Y)
項目名必須説明
役職必須選択親役職(自動セット)
ユーザー必須検索割り当てるユーザー/連絡先
有効開始日必須日時開始日(この日を含む)
有効終了日-日時終了日(この日を含む)
説明-文字列(255)補足
有効必須チェック有効フラグ
項目名必須説明
役職必須選択親役職(自動セット)
報酬必須選択賃金・給与のマスタ
有効開始日必須日時適用開始日
有効終了日-日時適用終了日
説明-文字列(255)改定理由など
有効必須チェック有効フラグ

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

Q. 業種カテゴリを選ばずに保存できますか?

Section titled “Q. 業種カテゴリを選ばずに保存できますか?”

できません。C_Job.C_JobCategory_IDIsMandatory=Y の必須カラムです。役職を登録する前に「業種カテゴリ」ウィンドウでカテゴリを作成してください。

Q. 「従業員」チェックの意味は何ですか?

Section titled “Q. 「従業員」チェックの意味は何ですか?”

IsEmployee は「この取引先が従業員かどうか」を示す標準カラムで、役職テーブルでは既定値が Y です。社外の役職(取引先側の担当ポジションなど)を定義する場合はチェックを外します。標準ではこのフラグによる自動処理は行われないため、業務上の区分・絞り込み用の属性として扱ってください。

Q. 役職者が交代したらどう登録しますか?

Section titled “Q. 役職者が交代したらどう登録しますか?”

割当タブの既存レコードを書き換えるのではなく、前任者の行に有効終了日を入れ、後任者の行を有効開始日付きで新規追加します。これにより在任履歴が残り、過去時点の体制を復元できます。

Q. 報酬タブの「報酬」はどこで登録しますか?

Section titled “Q. 報酬タブの「報酬」はどこで登録しますか?”

C_Remuneration(報酬)マスタで管理される賃金・給与の定義を参照します。給与計算業務と組み合わせて使う項目です。給与処理については給与計算処理を参照してください。

C_Job は削除可能(IsDeleteable=Y)ですが、割当・報酬の子レコードや他テーブルからの参照がある場合は外部キー制約により削除できません。運用中の役職は「有効」チェックを外して無効化してください。

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

役職は3階層(親1・子2)のマスタウィンドウで、C_Job(親)、C_JobAssignmentC_JobRemuneration(子)で構成されます。いずれのテーブルにも専用の M クラスは存在せず、生成クラス X_C_Job / X_C_JobAssignment / X_C_JobRemuneration とインターフェース I_C_* のみが提供されます。ソースコード上、これらのテーブルを参照するコアのビジネスロジッククラスは確認できませんでした(生成クラス以外の参照なし)。したがって beforeSave() 等のカスタムバリデーションは標準では存在せず、制約は AD 定義とDB制約に依存します。

テーブルアクセスレベル削除可大量データビュー
C_Job2(クライアントのみ)YNN
C_JobAssignment2(クライアントのみ)YNN
C_JobRemuneration2(クライアントのみ)YNN
classDiagram
    class X_C_Job {
        <<generated>>
        +getName() String
        +isEmployee() boolean
        +getC_JobCategory_ID() int
    }
    class X_C_JobAssignment {
        <<generated>>
        +getAD_User_ID() int
        +getValidFrom() Timestamp
        +getValidTo() Timestamp
    }
    class X_C_JobRemuneration {
        <<generated>>
        +getC_Remuneration_ID() int
        +getValidFrom() Timestamp
    }
    class X_C_JobCategory {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    X_C_Job --|> PO
    X_C_JobAssignment --|> PO
    X_C_JobRemuneration --|> PO
    X_C_JobCategory --|> PO
    X_C_Job --> X_C_JobCategory : category
    X_C_Job --> X_C_JobAssignment : has many
    X_C_Job --> X_C_JobRemuneration : has many

<> +getName() String +isEmployee() boolean +getC_JobCategory_ID() int <> +getAD_User_ID() int +getValidFrom() Timestamp +getValidTo() Timestamp <> +getC_Remuneration_ID() int +getValidFrom() Timestamp <> <> > PO X_C_JobAssignment -- > PO X_C_JobCategory --

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

カラム名必須説明備考
C_Job_IDIDPK役職ID主キー
AD_Client_IDTable DirectYテナント既定値 @#AD_Client_ID@
AD_Org_IDTable DirectY組織既定値 @#AD_Org_ID@
NameString(60)Y名称識別子(IsIdentifier=Y)
DescriptionString(255)N説明
HelpText(2000)Nコメント/ヒント
C_JobCategory_IDTable DirectY業種カテゴリ必須
IsEmployeeYes-NoY従業員既定値 Y
IsActiveYes-NoY有効既定値 Y
C_Job_UUUUIDNUUID
カラム名必須説明備考
C_JobAssignment_IDIDPK割当ID主キー
C_Job_IDTable DirectY役職FKIsParent=Y、識別子
AD_User_IDSearchYユーザーFKIsParent=Y、識別子
ValidFromDate+TimeY有効開始日当日を含む
ValidToDate+TimeN有効終了日当日を含む
DescriptionString(255)N説明
IsActiveYes-NoY有効既定値 Y
カラム名必須説明備考
C_JobRemuneration_IDIDPK役職報酬ID主キー
C_Job_IDTable DirectY役職FKIsParent=Y、識別子
C_Remuneration_IDTable DirectY報酬FKIsParent=Y、識別子
ValidFromDate+TimeY有効開始日
ValidToDate+TimeN有効終了日
DescriptionString(255)N説明
IsActiveYes-NoY有効既定値 Y
erDiagram
    C_JobCategory ||--o{ C_Job : "classifies"
    C_Job ||--o{ C_JobAssignment : "assignments"
    C_Job ||--o{ C_JobRemuneration : "remunerations"
    C_JobAssignment }o--|| AD_User : "employee"
    C_JobRemuneration }o--|| C_Remuneration : "wage or salary"

wage or salary

M クラスが存在しないため、モデル層のカスタムロジック(beforeSave / afterSave / DocAction)はありません。実装上の要点は以下のとおりです。

  • 親子キーの構成: C_JobAssignmentC_Job_IDAD_User_ID の両方が IsParent=Y かつ IsIdentifier=Y です。C_JobRemunerationC_Job_IDC_Remuneration_ID が同様の構成で、いずれも連関テーブルとして設計されています。
  • 有効期間: ValidFrom は必須、ValidTo は任意です。期間の重複チェックはコア側に実装されていません。
  • アクセスレベル: 3テーブルとも AccessLevel=2(クライアントのみ)で、システムレベル(AD_Client_ID=0)のデータは持てません。

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

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

期間重複の防止は Model Validator で実装します。M クラスがないため、テーブル名で判定します。

public class CustomJobAssignmentValidator implements ModelValidator {
@Override
public int modelChange(PO po, int type) throws Exception {
if (I_C_JobAssignment.Table_Name.equals(po.get_TableName())
&& (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE)) {
Timestamp from = (Timestamp) po.get_Value("ValidFrom");
Timestamp to = (Timestamp) po.get_Value("ValidTo");
// 例: 開始日と終了日の前後関係チェック
if (from != null && to != null && to.before(from)) {
throw new AdempiereException("有効終了日は有効開始日以降にしてください");
}
// 期間重複チェックは Query で同一 C_Job_ID / AD_User_ID を検索して実装
}
return null;
}
}

C_Job / C_JobAssignment / C_JobRemuneration のカラムには標準 Callout が設定されていません。ユーザー選択時に所属組織を自動セットするなどの連動が必要な場合は、独自 Callout を OSGi サービスとして登録します。

期間判定(getCurrentAssignment() など)を業務ロジックとして持たせたい場合は、X_C_Job を継承した独自 M クラスをプラグイン側で定義し、IModelFactory で登録する方法が有効です。コアの生成クラスを直接変更する必要はありません。


役職と割当は、人事・給与・承認フローの基礎データになります。期間重複チェックや現任者の自動判定、承認者の役職ベース解決などは、独自 M クラスと Model Validator で安全に追加できます。

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

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