Skip to content

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

This content is not available in your language yet.

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

POS 端末(POS Terminal)は、店頭販売フォーム(POS 画面)が使用する既定値と機能を定義するマスタです。1レジ=1レコードとして登録し、価格表・倉庫・伝票タイプ・銀行口座・キーレイアウト・プリンタなどをまとめて設定します。

📌 ポイント: 保存時に、銀行口座と倉庫の組織が POS 端末の組織と一致しているかが検証されます。一致していないとエラーになって保存できないため、店舗(組織)ごとに専用の倉庫・銀行口座を用意してから POS 端末を登録してください。

  • レジ端末ごとの既定値(価格表・倉庫・伝票タイプ・銀行口座)の設定
  • 担当者(社内担当者)の既定割り当て
  • 価格の手修正を許可するかどうかの制御(価格修正可能)
  • POS キーレイアウトの割り当て(商品キーの並び)
  • オンスクリーンキーボード/テンキーのレイアウト指定
  • 新規取引先を店頭で作成する際のテンプレート取引先の指定
  • レシートプリンタ名・キャッシュドロア名の指定
  • 一定時間操作がない場合の自動ログアウト遅延の設定

POS 端末は単一タブのマスタです。

graph TD
    subgraph "POS 端末ウィンドウ(Window ID: 338)"
        T1["🖥 POS端末<br/>C_POS<br/>20項目"]
    end

POS 端末ウィンドウ(Window ID: 338) POS端末 C_POS 20項目

タブ名テーブル項目数役割
POS端末C_POS20項目レジ端末の既定値・機能設定
graph TD
    A["🏪 前提: 店舗組織の倉庫・<br/>価格表・銀行口座を用意"] --> B["⌨️ POS キーレイアウトを<br/>先に登録(任意)"]
    B --> C["🚀 メニューから開く<br/>販売管理 > 見積受注管理 > POS 端末"]
    C --> D["➕ 新規ボタンをクリック"]
    D --> E["✏️ 名称・社内担当者・<br/>価格表・倉庫を入力"]
    E --> F["🏦 銀行口座・伝票タイプ・<br/>取引先テンプレートを設定"]
    F --> G["⌨️ POSキーレイアウト・<br/>プリンタ・キャッシュドロアを設定"]
    G --> H["💾 保存<br/>→ 組織整合チェックが実行"]
    H --> I{"組織が一致?"}
    I -->|いいえ| J["❌ エラー<br/>倉庫・銀行口座の組織を見直し"]
    I -->|はい| K["✅ POS フォームから利用可能に"]

前提: 店舗組織の倉庫・ 価格表・銀行口座を用意 ⌨ POS キーレイアウトを 先に登録(任意) メニューから開く 販売管理 > 見積受注管理 > POS 端末 新規ボタンをクリック 名称・社内担当者・ 価格表・倉庫を入力 銀行口座・伝票タイプ・ 取引先テンプレートを設定 ⌨ POSキーレイアウト・ プリンタ・キャッシュドロアを設定 保存 → 組織整合チェックが実行 組織が一致? エラー 倉庫・銀行口座の組織を見直し POS フォームから利用可能に いいえ はい

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

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

メニューから「販売管理 > 見積受注管理 > POS 端末」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. 必須項目を入力:
    • 名称: 端末名(例: 本店レジ1
    • 社内担当者: この端末の既定担当者
    • 価格表: 店頭販売に適用する価格表
    • 倉庫: 出庫元となる倉庫(POS 端末と同じ組織であること)
    • 価格修正可能: 店頭で単価変更を許可する場合にチェック(既定はオフ)
  3. 任意項目を入力:
    • 銀行口座: 入金を計上する口座(POS 端末と同じ組織であること)
    • 伝票タイプ: POS で作成する伝票のタイプ
    • 取引先テンプレート: 店頭で新規取引先を作成する際のひな形
    • POSキーレイアウト: 商品キーの配置
    • On Screen Keyboard layout / On Screen Number Pad layout: タッチ操作用のレイアウト
    • プリンタ名称: レシートプリンタ名
    • 現金引き出し: キャッシュドロア名
    • 自動ログアウト遅延: 無操作時に自動ログアウトするまでの時間
  4. 保存」をクリック

⚠️ 注意: 「価格修正可能(IsModifyPrice)」は新規レコードでオフ(N)が自動セットされます。店頭での値引きを許可する運用では、明示的にチェックを入れてください。

商品キーを並べた画面を使う場合は、先に POS キーレイアウトを登録し、この画面の「POSキーレイアウト」で選択します。タッチパネル用のキーボード・テンキーは別項目(OSK_KeyLayout_ID / OSNP_KeyLayout_ID)で指定します。

項目名カラム必須説明
クライアントAD_Client_ID必須選択テナント
組織AD_Org_ID必須選択組織(店舗)
名称Name必須文字列(60)端末名
説明Description-文字列(255)補足説明
コメントHelp-テキスト(2000)運用メモ
社内担当者SalesRep_ID必須選択既定の販売担当者
価格表M_PriceList_ID必須選択適用する価格表
倉庫M_Warehouse_ID必須選択出庫元倉庫(組織一致が必要)
価格修正可能IsModifyPrice必須チェック単価の手修正を許可(既定: N)
銀行口座C_BankAccount_ID-選択入金計上先(組織一致が必要)
伝票タイプC_DocType_ID-選択作成する伝票のタイプ
取引先テンプレートC_BPartnerCashTrx_ID-検索新規取引先作成時のひな形
POSキーレイアウトC_POSKeyLayout_ID-選択商品キーの配置
自動ログアウト遅延AutoLogoutDelay-整数無操作時の自動ログアウト時間
On Screen Keyboard layoutOSK_KeyLayout_ID-選択画面キーボードのレイアウト
On Screen Number Pad layoutOSNP_KeyLayout_ID-選択画面テンキーのレイアウト
プリンタ名称PrinterName-文字列(60)レシートプリンタ名
現金引き出しCashDrawer-文字列(120)キャッシュドロア名
有効IsActive必須チェックレコードが有効か(既定: Y)

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

Q. 保存時に「組織: 倉庫」というエラーが出ます

Section titled “Q. 保存時に「組織: 倉庫」というエラーが出ます”

MPOS.beforeSave() の組織整合チェックに引っかかっています。POS 端末の組織と、指定した倉庫(M_Warehouse_ID)の組織が異なる場合にこのエラーが発生します。同様に銀行口座(C_BankAccount_ID)でも「組織: 銀行口座」のエラーが出ます。どちらも POS 端末と同じ組織のレコードを選択してください。

Q. 組織チェックはいつ実行されますか?

Section titled “Q. 組織チェックはいつ実行されますか?”

新規保存時、および該当カラムの値を変更したときに実行されます(newRecord || is_ValueChanged(...))。既存レコードの他項目だけを修正する場合は再チェックされません。

Q. 取引先テンプレートを設定しないとどうなりますか?

Section titled “Q. 取引先テンプレートを設定しないとどうなりますか?”

MPOS.getBPartner() は、C_BPartnerCashTrx_ID が未設定(0)の場合に MBPartner.getBPartnerCashTrx() を呼び出し、クライアント既定の現金取引用取引先を取得します。個別のひな形を使いたい場合のみ明示的に設定してください。

Q. 現金出納帳(Cash Book)はどこで設定しますか?

Section titled “Q. 現金出納帳(Cash Book)はどこで設定しますか?”

C_POS テーブルには C_CashBook_ID(現金出納帳)カラムが存在しますが、iDempiere 13 標準の POS 端末ウィンドウにはフィールドとして配置されていません。必要な場合はカスタマイズでフィールドを追加するか、伝票タイプ側の設定で対応します。

Q. 1つの端末を複数店舗で共有できますか?

Section titled “Q. 1つの端末を複数店舗で共有できますか?”

C_POS のアクセスレベルはクライアントですが、倉庫・銀行口座との組織整合チェックがあるため、実質的に組織(店舗)単位で登録する設計になります。店舗ごとに POS 端末レコードを作成してください。

graph TD
    A["🏢 組織(店舗)"] --> B["🖥 POS 端末<br/>C_POS"]
    C["🏬 倉庫"] --> B
    D["💴 価格表"] --> B
    E["🏦 銀行口座"] --> B
    F["⌨️ POS キーレイアウト"] --> B
    B --> G["🛒 POS フォーム<br/>店頭販売"]
    G --> H["📋 受注伝票<br/>C_Order"]
    H --> I["💴 売上請求書"]
    H --> J["💰 入金伝票"]

組織(店舗) POS 端末 C_POS 倉庫 価格表 銀行口座 ⌨ POS キーレイアウト POS フォーム 店頭販売 受注伝票 C_Order 売上請求書 入金伝票


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

POS 端末はマスタデータ型のウィンドウ(AD_Window_ID: 338)で、C_POS テーブルに格納されます。MPOS クラス(234行)が組織整合チェックとテンプレート取引先の解決を担い、ImmutableIntPOCache(容量20)によるキャッシュ経由の高速参照をサポートします。Document 型ではありません。

classDiagram
    class MPOS {
        +get(int C_POS_ID)$ MPOS
        +get(Properties, int)$ MPOS
        +getAll(Properties, String, int)$ MPOS[]
        #beforeSave(boolean) boolean
        +getBPartner() MBPartner
        +markImmutable() MPOS
        +toString() String
    }
    class X_C_POS {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    class ImmutablePOSupport {
        <<interface>>
    }
    MPOS --|> X_C_POS
    X_C_POS --|> PO
    MPOS ..|> ImmutablePOSupport
    MPOS --> MPOSKeyLayout : key layout
    MPOS --> MBPartner : template
    MPOS --> MWarehouse : source warehouse
    MPOS --> MBankAccount : cash account

+get(int C_POS_ID)$ MPOS +get(Properties, int)$ MPOS +getAll(Properties, String, int)$ MPOS[] #beforeSave(boolean) boolean +getBPartner() MBPartner +markImmutable() MPOS +toString() String <> <> <> > X_C_POS X_C_POS --

パッケージ: org.compiere.model ソースファイル: org.adempiere.base/src/org/compiere/model/MPOS.java(234行)

テーブル属性: 削除可(IsDeleteable=Y)/大量データ扱いなし/アクセスレベル=クライアント/ビューではない。

カラム名必須説明備考
C_POS_IDIDPKPOS端末ID主キー
C_POS_UUUUID(36)NUUIDキー
AD_Client_IDTable DirectYクライアント既定 @#AD_Client_ID@
AD_Org_IDTable DirectY組織既定 @#AD_Org_ID@
NameString(60)Y名称識別子カラム
DescriptionString(255)N説明
HelpText(2000)Nコメント
SalesRep_IDTableY社内担当者
M_PriceList_IDTable DirectY価格表
M_Warehouse_IDTable DirectY倉庫組織整合チェック対象
IsModifyPriceYes-NoY価格修正可能既定 N、新規時に明示セット
C_BankAccount_IDTable DirectN銀行口座組織整合チェック対象
C_CashBook_IDTable DirectN現金出納帳ウィンドウ未配置
C_DocType_IDTable DirectN伝票タイプ
C_BPartnerCashTrx_IDSearchN取引先テンプレート未設定時は既定の現金取引先
C_POSKeyLayout_IDTable DirectNPOSキーレイアウト
OSK_KeyLayout_IDTableN画面キーボードレイアウト
OSNP_KeyLayout_IDTableN画面テンキーレイアウト
AutoLogoutDelayIntegerN自動ログアウト遅延
PrinterNameString(60)Nプリンタ名称
CashDrawerString(120)N現金引き出し
IsActiveYes-NoY有効既定 Y
erDiagram
    C_POS }o--|| M_Warehouse : "source warehouse"
    C_POS }o--|| M_PriceList : "pricing"
    C_POS }o--o| C_BankAccount : "cash account"
    C_POS }o--o| C_DocType : "document type"
    C_POS }o--o| C_POSKeyLayout : "key layout"
    C_POS }o--o| C_BPartner : "template partner"
    C_POS ||--o{ C_Order : "created orders"

source warehouse cash account document type key layout template partner created orders

C_POS_ID を参照するテーブルは C_Order(受注伝票)のほか、レポート用ビュー RV_OrderDetailRV_CommissionRunDetail などです。

MPOS.beforeSave() は2つの検証を行います。いずれも新規レコード、または該当カラムが変更されたときにのみ実行されます。

  1. 銀行口座の組織チェック: MBankAccount.get(ctx, getC_BankAccount_ID()) を取得し、AD_Org_ID が POS 端末の組織と異なる場合は @AD_Org_ID@: @C_BankAccount_ID@ のエラーを記録して保存を中止
  2. 倉庫の組織チェック: MWarehouse.get(ctx, getM_Warehouse_ID(), trxName) を取得し、AD_Org_ID が POS 端末の組織と異なる場合は @AD_Org_ID@: @M_Warehouse_ID@ のエラーを記録して保存を中止
flowchart TD
    A["保存"] --> B{"新規 or 銀行口座を変更?"}
    B -->|Yes| C{"銀行口座の組織 = POS の組織?"}
    B -->|No| D{"新規 or 倉庫を変更?"}
    C -->|No| E["❌ エラー: AD_Org_ID: C_BankAccount_ID"]
    C -->|Yes| D
    D -->|Yes| F{"倉庫の組織 = POS の組織?"}
    D -->|No| G["✅ 保存続行"]
    F -->|No| H["❌ エラー: AD_Org_ID: M_Warehouse_ID"]
    F -->|Yes| G

保存 新規 or 銀行口座を変更? 銀行口座の組織 = POS の組織? 新規 or 倉庫を変更? エラー: AD_Org_ID: C_BankAccount_ID 倉庫の組織 = POS の組織? 保存続行 エラー: AD_Org_ID: M_Warehouse_ID

テンプレート取引先の解決(getBPartner)

Section titled “テンプレート取引先の解決(getBPartner)”

getBPartner() は取得結果を内部フィールド m_template にキャッシュします。C_BPartnerCashTrx_ID が 0 の場合は MBPartner.getBPartnerCashTrx(ctx, AD_Client_ID) でクライアント既定の現金取引用取引先を取得し、設定済みの場合はその取引先を読み込みます。POS 端末インスタンスが immutable の場合、取引先も markImmutable() されます。

  • s_cache: ImmutableIntPOCache<Integer, MPOS>(テーブル名キー、容量20)
  • MPOS.get(C_POS_ID) / MPOS.get(ctx, C_POS_ID) でキャッシュ参照
  • getAll(ctx, field, ID) で条件付き一括取得
  • markImmutable() は自身とテンプレート取引先を不変化
  • toString()Name を返すため、ログ出力や選択リストでそのまま端末名が表示されます

新規レコード生成時、setInitialDefaults()IsModifyPrice = false をセットします。

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

Section titled “拡張ポイント(カスタマイズ箇所)”
public class CustomPOSValidator implements ModelValidator {
@Override
public int modelChange(PO po, int type) throws Exception {
if (po instanceof MPOS
&& (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE)) {
MPOS pos = (MPOS) po;
// 例: 値引き許可端末には必ず伝票タイプを指定させる
if (pos.isModifyPrice() && pos.getC_DocType_ID() <= 0) {
throw new AdempiereException("価格修正を許可する端末には伝票タイプを設定してください");
}
}
return null;
}
}

C_POS のカラムには AD 上の callout 定義がありません。倉庫選択時に価格表を自動補完するといった挙動が必要な場合は、独自 callout を追加してください。

MPOS.get() はキャッシュ経由で返すため、独自プロセスから設定を書き換えた直後に別スレッドが古い値を参照する可能性があります。設定変更を伴うカスタム処理では、キャッシュリセット(CacheMgt)を明示的に呼び出してください。

このウィンドウには専用のプロセスボタンは定義されていません。POS 端末の設定は店頭販売フォーム(POS フォーム)から参照されます。


iDempiere の POS 端末は価格表・倉庫・キーレイアウトを端末単位で切り替えられる柔軟な仕組みを備えています。 レシートプリンタやキャッシュドロアとの連携、店舗別の値引きルールも Model Validator や独自フォームでコア改変なしに拡張できます。

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

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