Skip to content

iDempiere 販売地域の使い方|販売管理 操作マニュアル・技術仕様

This content is not available in your language yet.

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

販売地域は、営業活動をエリア単位で区切って管理するためのマスタです。取引先の住所に割り当てることで伝票に地域が引き継がれ、地域別の売上集計・販売手数料計算・会計ディメンションとしての分析に利用できます。

📌 ポイント: 販売地域は保存時に自動で 地域ツリーAD_Tree の TreeType=SalesRegion)へ登録されます。「サマリレベル」にチェックした地域を上位ノードにすることで、東日本 ▸ 関東 ▸ 東京 のような階層集計が可能になります。

  • 販売エリアのコード化と階層(ツリー)管理
  • 取引先住所(C_BPartner_Location)への地域割当
  • 地域ごとの担当営業(社内担当者)の設定
  • 会計ディメンションとしての利用(C_AcctSchema_Element に地域を追加すると仕訳に地域が付与される)
  • 販売手数料の対象を地域で絞り込む条件指定(C_CommissionLine.C_SalesRegion_ID
  • GL 配賦(GL_Distribution)の配賦キーとしての利用
  • 地域名称の多言語対応(翻訳タブ)

販売地域は 2 タブ構成です。

タブ名テーブル項目数役割
販売地域C_SalesRegion9項目検索キー・名称・担当者・サマリレベル
翻訳C_SalesRegion_Trl8項目地域名称の多言語翻訳

💡 ヒント: 翻訳タブは多言語運用(クライアントに複数言語を登録している場合)でのみ使用します。日本語単一運用であれば販売地域タブだけで設定が完了します。

graph TD
    A["🚀 メニューから開く<br/>販売管理 > 販売管理設定 > 販売地域"] --> B["➕ 新規ボタンをクリック"]
    B --> C["🔑 検索キー・名称を入力"]
    C --> D{"上位ノードにする?"}
    D -->|する| E["📂 サマリレベルにチェック<br/>(集計用の親ノード)"]
    D -->|しない| F["👤 社内担当者を設定(任意)"]
    E --> F
    F --> G["💾 保存<br/>(地域ツリーへ自動登録)"]
    G --> H["🌳 ツリーメンテナンスで<br/>親子関係を整理"]
    H --> I["🏢 取引先の住所タブで<br/>販売地域を割当"]
    I --> J["📄 受注・請求伝票に地域が引継がれ<br/>地域別集計が可能に"]

メニューから開く 販売管理 > 販売管理設定 > 販売地域 新規ボタンをクリック 検索キー・名称を入力 上位ノードにする? サマリレベルにチェック (集計用の親ノード) 社内担当者を設定(任意) 保存 (地域ツリーへ自動登録) ツリーメンテナンスで 親子関係を整理 取引先の住所タブで 販売地域を割当 受注・請求伝票に地域が引継がれ 地域別集計が可能に する しない

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

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

メニューから「販売管理 > 販売管理設定 > 販売地域」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. 必須項目を入力:
    • 検索キー: 地域コード(最大 40 文字。一意にする必要があります)
    • 名称: 地域名(最大 60 文字。例: 関東
  3. 必要に応じて任意項目を入力:
    • 説明: 補足説明
    • 社内担当者: 当該地域の担当営業
    • サマリレベル: 集計専用の上位ノードにする場合にチェック
    • デフォルト: 既定の販売地域として使う場合にチェック
  4. 保存」をクリック

⚠️ 注意: 検索キー(Value)を後から変更すると、afterSave() で地域ツリーの並び順更新と会計組合せ(C_ValidCombination)の名称・説明の再生成が走ります。会計期間の締め後にコード体系を変更すると過去仕訳の表示名にも影響するため、コード体系は運用開始前に確定させてください。

  1. 上位ノードにする地域を サマリレベル = チェック で登録
  2. 下位の地域を通常どおり登録
  3. メニューの「ツリーメンテナンス」で TreeType が 販売地域 のツリーを開く
  4. 下位地域を上位ノードへドラッグして親子関係を組む

💡 ヒント: サマリレベルの地域は集計専用です。取引先住所に割り当てるのは末端(サマリレベル未チェック)の地域にしてください。

  1. 取引先マスタを開く
  2. 住所」タブで対象の住所行を選択
  3. 販売地域」に登録済みの地域を選択して保存
項目名カラム必須説明
クライアントAD_Client_ID必須選択テナント(自動セット)
組織AD_Org_ID必須選択組織(自動セット)
検索キーValue必須文字列(40)地域コード。一意である必要あり
名称Name必須文字列(60)地域名(識別子)
説明Description-文字列(255)補足説明
有効IsActive必須チェック無効化する場合はチェックを外す
デフォルトIsDefault必須チェック既定の販売地域
社内担当者SalesRep_ID-選択担当営業(ユーザー)
サマリレベルIsSummary必須チェック集計用の上位ノード
項目名カラム必須説明
販売地域C_SalesRegion_ID必須選択翻訳対象の地域(親)
言語AD_Language必須選択翻訳先の言語
翻訳するIsTranslated必須チェック翻訳済みかどうか
名称Name必須文字列当該言語での地域名
説明Description-文字列当該言語での説明

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

graph TD
    A["販売地域<br/>C_SalesRegion"] --> B["取引先住所<br/>C_BPartner_Location"]
    A --> C["会計ディメンション<br/>C_AcctSchema_Element"]
    A --> D["手数料詳細<br/>C_CommissionLine"]
    A --> E["GL配賦<br/>GL_Distribution"]
    B --> F["受注伝票 / 売上請求伝票"]
    C --> G["会計仕訳<br/>Fact_Acct"]
    F --> G
    D --> H["販売手数料計算<br/>C_CommissionRun"]
    G --> I["地域別の財務レポート"]

販売地域 C_SalesRegion 取引先住所 C_BPartner_Location 会計ディメンション C_AcctSchema_Element 手数料詳細 C_CommissionLine GL配賦 GL_Distribution 受注伝票 / 売上請求伝票 会計仕訳 Fact_Acct 販売手数料計算 C_CommissionRun 地域別の財務レポート

Q. 販売地域は伝票のどこに入りますか?

Section titled “Q. 販売地域は伝票のどこに入りますか?”

伝票ヘッダーの入力欄としてではなく、取引先住所(C_BPartner_Location)に設定した地域が伝票・仕訳の分析軸として引き継がれます。会計ディメンションとして有効化していれば Fact_Acct にも C_SalesRegion_ID が記録され、地域別の財務レポートが作成できます。

Q. 保存しただけでツリーに現れるのはなぜですか?

Section titled “Q. 保存しただけでツリーに現れるのはなぜですか?”

MSalesRegion.afterSave() が新規レコードのときに insert_Tree(MTree_Base.TREETYPE_SalesRegion) を実行し、販売地域ツリーへノードを自動追加するためです。削除時も afterDelete()delete_Tree() でノードが除去されます。階層の親子関係だけはツリーメンテナンス画面で手動設定します。

Q. 検索キーを変更したら会計の表示名も変わりました。仕様ですか?

Section titled “Q. 検索キーを変更したら会計の表示名も変わりました。仕様ですか?”

仕様です。afterSave() は既存レコードで Value または Name が変更された場合に MAccount.updateValueDescription() を呼び、その地域を含む会計組合せ(C_ValidCombination)の組合せ名・説明を再生成します。仕訳データそのものは変わりませんが、表示名は更新されます。

Q. サマリレベルの地域を取引先に割り当てられますか?

Section titled “Q. サマリレベルの地域を取引先に割り当てられますか?”

システム上は選択できてしまいますが、サマリレベルは集計用の上位ノードとして設計されているため推奨しません。集計ノードに実データを紐づけると、階層集計時に上位と下位で二重計上のような読みにくい結果になります。

Q. 販売手数料の条件に地域を使えますか?

Section titled “Q. 販売手数料の条件に地域を使えますか?”

使えます。販売手数料及びロイヤリティー計算の「手数料詳細」タブに C_SalesRegion_ID があり、対象取引を地域で絞り込めます。ただし絞り込みは取引先住所に設定された地域を経由して判定されるため、住所への地域割当が前提になります。

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

販売地域はマスタデータ型のウィンドウ(AD_Window_ID: 152)で、C_SalesRegion テーブルに格納されます。テーブル属性は IsDeleteable=Y / IsHighVolume=N / AccessLevel=3(クライアント+組織レベル)。ビジネスロジックは MSalesRegion クラス(172行)が担い、ツリー登録・会計組合せ名称の再生成・イミュータブルキャッシュを実装しています。翻訳テーブル C_SalesRegion_TrlIsDeleteable=N です。

classDiagram
    class MSalesRegion {
        +get(int) MSalesRegion$
        +get(Properties, int) MSalesRegion$
        +afterSave(boolean, boolean) boolean
        +afterDelete(boolean) boolean
        +markImmutable() MSalesRegion
    }
    class X_C_SalesRegion {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    class ImmutablePOSupport {
        <<interface>>
    }
    MSalesRegion --|> X_C_SalesRegion
    X_C_SalesRegion --|> PO
    MSalesRegion ..|> ImmutablePOSupport
    MSalesRegion --> MTree_Base : insert/update/delete tree
    MSalesRegion --> MAccount : updateValueDescription

+get(int) MSalesRegion$ +get(Properties, int) MSalesRegion$ +afterSave(boolean, boolean) boolean +afterDelete(boolean) boolean +markImmutable() MSalesRegion <> <> <> > X_C_SalesRegion X_C_SalesRegion --

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

カラム名必須説明備考
C_SalesRegion_IDIDPK販売地域ID主キー
C_SalesRegion_UUUUIDNUUID
AD_Client_IDTable DirectYクライアントdefault @#AD_Client_ID@
AD_Org_IDTable DirectY組織default @#AD_Org_ID@
ValueString(40)Y検索キー一意。変更時にツリー・会計名称を更新
NameString(60)Y名称識別子(IsIdentifier=Y)
DescriptionString(255)N説明
IsActiveYes-NoY有効default Y
IsDefaultYes-NoYデフォルト
IsSummaryYes-NoYサマリレベル集計用の上位ノード
SalesRep_IDTableN社内担当者AD_User への参照
カラム名必須説明
C_SalesRegion_IDSearchPK販売地域FK
AD_LanguageTablePK言語コード
NameStringY翻訳後の名称
DescriptionStringN翻訳後の説明
IsTranslatedYes-NoY翻訳済みフラグ
erDiagram
    C_SalesRegion ||--o{ C_SalesRegion_Trl : "translations"
    C_SalesRegion ||--o{ C_BPartner_Location : "region of address"
    C_SalesRegion ||--o{ C_CommissionLine : "commission filter"
    C_SalesRegion ||--o{ C_ValidCombination : "accounting dimension"
    C_SalesRegion ||--o{ Fact_Acct : "posted dimension"
    C_SalesRegion ||--o{ GL_Distribution : "distribution key"
    C_SalesRegion ||--o{ GL_JournalLine : "journal dimension"
    C_AcctSchema_Element }o--o| C_SalesRegion : "enables dimension"

region of address commission filter accounting dimension posted dimension distribution key journal dimension enables dimension

MSalesRegion.afterSave(newRecord, success) は成功時に次の 3 段階を実行します。

  1. ツリー登録: newRecord の場合 insert_Tree(MTree_Base.TREETYPE_SalesRegion) で販売地域ツリーへノードを追加
  2. ツリー更新: newRecord または Value が変更された場合に update_Tree(TREETYPE_SalesRegion)
  3. 会計組合せの名称再生成: 既存レコードで Value または Name が変更された場合、MAccount.updateValueDescription(ctx, "C_SalesRegion_ID=<ID>", trxName) を呼び、当該地域を含む C_ValidCombination の組合せ名・説明を更新

削除成功時に delete_Tree(MTree_Base.TREETYPE_SalesRegion) を実行し、ツリーノードを除去します。

MSalesRegion は静的メソッド get(int C_SalesRegion_ID) / get(Properties ctx, int C_SalesRegion_ID) を提供し、markImmutable() によるイミュータブル化に対応しています。明細行の一括処理などで繰り返し参照する場合は、new MSalesRegion(...) ではなく MSalesRegion.get() を使うと DB アクセスを削減できます。

⚠️ 注意: markImmutable() で不変化されたインスタンスは setter が使えません。更新用途では必ずコンストラクタ(MSalesRegion(ctx, copy, trxName) を含むコピーコンストラクタ)で可変インスタンスを取得してください。

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

Section titled “拡張ポイント(カスタマイズ箇所)”
public class CustomSalesRegionValidator implements ModelValidator {
@Override
public int modelChange(PO po, int type) throws Exception {
if (po instanceof MSalesRegion) {
MSalesRegion region = (MSalesRegion) po;
if (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE) {
// 例: 地域コードの命名規則チェック(JP-XX 形式)
if (region.getValue() != null && !region.getValue().matches("JP-[A-Z]{2}")) {
throw new AdempiereException("販売地域コードは「JP-XX」形式で入力してください");
}
// 例: サマリレベルには担当者を設定させない
if (region.isSummary() && region.getSalesRep_ID() > 0) {
throw new AdempiereException("サマリレベルの地域に社内担当者は設定できません");
}
}
}
return null;
}
@Override
public String docValidate(PO po, int timing) {
return null; // C_SalesRegion は Document 型ではないため不要
}
}

C_SalesRegion の各カラムには標準の Callout が設定されていません。取引先住所への割当時に既定の担当営業を伝票へ引き当てるといった連動は、IColumnCallout を OSGi サービスとして実装するか、C_Order 側の Model Validator で行います。

会計ディメンションとしての有効化

Section titled “会計ディメンションとしての有効化”

会計スキーマの C_AcctSchema_Element に販売地域を要素として追加すると、仕訳生成時に C_SalesRegion_IDFact_Acct へ書き込まれ、地域別の財務レポートが作成可能になります。要素の追加後は既存の会計組合せの再生成が必要です。

このウィンドウ固有の標準プロセス(ボタン)はありません。階層の編集はツリーメンテナンス画面(AD_Tree)で行います。


販売地域は会計ディメンションと販売手数料の双方に効いてくるマスタです。自社のエリア区分に合わせた階層設計と、地域別 P/L の作り込みは導入初期に固めておくと後戻りがありません。

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

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