iDempiere POS 端末の使い方|販売管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 販売管理の全体像: 販売管理の全体図 も合わせてご覧ください。
POS 端末(POS Terminal)は、店頭販売フォーム(POS 画面)が使用する既定値と機能を定義するマスタです。1レジ=1レコードとして登録し、価格表・倉庫・伝票タイプ・銀行口座・キーレイアウト・プリンタなどをまとめて設定します。
📌 ポイント: 保存時に、銀行口座と倉庫の組織が POS 端末の組織と一致しているかが検証されます。一致していないとエラーになって保存できないため、店舗(組織)ごとに専用の倉庫・銀行口座を用意してから POS 端末を登録してください。
POS 端末でできること
Section titled “POS 端末でできること”- レジ端末ごとの既定値(価格表・倉庫・伝票タイプ・銀行口座)の設定
- 担当者(社内担当者)の既定割り当て
- 価格の手修正を許可するかどうかの制御(価格修正可能)
- POS キーレイアウトの割り当て(商品キーの並び)
- オンスクリーンキーボード/テンキーのレイアウト指定
- 新規取引先を店頭で作成する際のテンプレート取引先の指定
- レシートプリンタ名・キャッシュドロア名の指定
- 一定時間操作がない場合の自動ログアウト遅延の設定
POS 端末は単一タブのマスタです。
graph TD
subgraph "POS 端末ウィンドウ(Window ID: 338)"
T1["🖥 POS端末<br/>C_POS<br/>20項目"]
end
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| POS端末 | C_POS | 20項目 | レジ端末の既定値・機能設定 |
基本操作手順
Section titled “基本操作手順”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 フォームから利用可能に"]
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”メニューから「販売管理 > 見積受注管理 > POS 端末」を開きます。
- ツールバーの「新規」ボタンをクリック
- 必須項目を入力:
- 名称: 端末名(例:
本店レジ1) - 社内担当者: この端末の既定担当者
- 価格表: 店頭販売に適用する価格表
- 倉庫: 出庫元となる倉庫(POS 端末と同じ組織であること)
- 価格修正可能: 店頭で単価変更を許可する場合にチェック(既定はオフ)
- 名称: 端末名(例:
- 任意項目を入力:
- 銀行口座: 入金を計上する口座(POS 端末と同じ組織であること)
- 伝票タイプ: POS で作成する伝票のタイプ
- 取引先テンプレート: 店頭で新規取引先を作成する際のひな形
- POSキーレイアウト: 商品キーの配置
- On Screen Keyboard layout / On Screen Number Pad layout: タッチ操作用のレイアウト
- プリンタ名称: レシートプリンタ名
- 現金引き出し: キャッシュドロア名
- 自動ログアウト遅延: 無操作時に自動ログアウトするまでの時間
- 「保存」をクリック
⚠️ 注意: 「価格修正可能(
IsModifyPrice)」は新規レコードでオフ(N)が自動セットされます。店頭での値引きを許可する運用では、明示的にチェックを入れてください。
キーレイアウトの割り当て
Section titled “キーレイアウトの割り当て”商品キーを並べた画面を使う場合は、先に POS キーレイアウトを登録し、この画面の「POSキーレイアウト」で選択します。タッチパネル用のキーボード・テンキーは別項目(OSK_KeyLayout_ID / OSNP_KeyLayout_ID)で指定します。
項目リファレンス
Section titled “項目リファレンス”POS端末タブ
Section titled “POS端末タブ”| 項目名 | カラム | 必須 | 型 | 説明 |
|---|---|---|---|---|
| クライアント | 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 layout | OSK_KeyLayout_ID | - | 選択 | 画面キーボードのレイアウト |
| On Screen Number Pad layout | OSNP_KeyLayout_ID | - | 選択 | 画面テンキーのレイアウト |
| プリンタ名称 | PrinterName | - | 文字列(60) | レシートプリンタ名 |
| 現金引き出し | CashDrawer | - | 文字列(120) | キャッシュドロア名 |
| 有効 | IsActive | 必須 | チェック | レコードが有効か(既定: Y) |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”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 端末レコードを作成してください。
業務フロー上の位置づけ
Section titled “業務フロー上の位置づけ”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 キーレイアウトの使い方
- 受注伝票(Sales Order)の使い方
- 倉庫・ロケーターの使い方
- 取引先マスタ(Business Partner)の使い方
- 入金伝票(Payment)の使い方
- 画面リファレンス: POS 端末
🛠 技術仕様(開発者向け)
POS 端末はマスタデータ型のウィンドウ(AD_Window_ID: 338)で、C_POS テーブルに格納されます。MPOS クラス(234行)が組織整合チェックとテンプレート取引先の解決を担い、ImmutableIntPOCache(容量20)によるキャッシュ経由の高速参照をサポートします。Document 型ではありません。
アーキテクチャ概要
Section titled “アーキテクチャ概要”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
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MPOS.java(234行)
関連DBテーブル
Section titled “関連DBテーブル”C_POS(POS 端末)
Section titled “C_POS(POS 端末)”テーブル属性: 削除可(IsDeleteable=Y)/大量データ扱いなし/アクセスレベル=クライアント/ビューではない。
| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_POS_ID | ID | PK | POS端末ID | 主キー |
| C_POS_UU | UUID(36) | N | UUIDキー | |
| AD_Client_ID | Table Direct | Y | クライアント | 既定 @#AD_Client_ID@ |
| AD_Org_ID | Table Direct | Y | 組織 | 既定 @#AD_Org_ID@ |
| Name | String(60) | Y | 名称 | 識別子カラム |
| Description | String(255) | N | 説明 | |
| Help | Text(2000) | N | コメント | |
| SalesRep_ID | Table | Y | 社内担当者 | |
| M_PriceList_ID | Table Direct | Y | 価格表 | |
| M_Warehouse_ID | Table Direct | Y | 倉庫 | 組織整合チェック対象 |
| IsModifyPrice | Yes-No | Y | 価格修正可能 | 既定 N、新規時に明示セット |
| C_BankAccount_ID | Table Direct | N | 銀行口座 | 組織整合チェック対象 |
| C_CashBook_ID | Table Direct | N | 現金出納帳 | ウィンドウ未配置 |
| C_DocType_ID | Table Direct | N | 伝票タイプ | |
| C_BPartnerCashTrx_ID | Search | N | 取引先テンプレート | 未設定時は既定の現金取引先 |
| C_POSKeyLayout_ID | Table Direct | N | POSキーレイアウト | |
| OSK_KeyLayout_ID | Table | N | 画面キーボードレイアウト | |
| OSNP_KeyLayout_ID | Table | N | 画面テンキーレイアウト | |
| AutoLogoutDelay | Integer | N | 自動ログアウト遅延 | |
| PrinterName | String(60) | N | プリンタ名称 | |
| CashDrawer | String(120) | N | 現金引き出し | |
| IsActive | Yes-No | Y | 有効 | 既定 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"
C_POS_ID を参照するテーブルは C_Order(受注伝票)のほか、レポート用ビュー RV_OrderDetail、RV_CommissionRunDetail などです。
ビジネスロジック
Section titled “ビジネスロジック”beforeSave() の組織整合チェック
Section titled “beforeSave() の組織整合チェック”MPOS.beforeSave() は2つの検証を行います。いずれも新規レコード、または該当カラムが変更されたときにのみ実行されます。
- 銀行口座の組織チェック:
MBankAccount.get(ctx, getC_BankAccount_ID())を取得し、AD_Org_IDが POS 端末の組織と異なる場合は@AD_Org_ID@: @C_BankAccount_ID@のエラーを記録して保存を中止 - 倉庫の組織チェック:
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
テンプレート取引先の解決(getBPartner)
Section titled “テンプレート取引先の解決(getBPartner)”getBPartner() は取得結果を内部フィールド m_template にキャッシュします。C_BPartnerCashTrx_ID が 0 の場合は MBPartner.getBPartnerCashTrx(ctx, AD_Client_ID) でクライアント既定の現金取引用取引先を取得し、設定済みの場合はその取引先を読み込みます。POS 端末インスタンスが immutable の場合、取引先も markImmutable() されます。
キャッシュとイミュータブル
Section titled “キャッシュとイミュータブル”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 “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”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; }}Callout
Section titled “Callout”C_POS のカラムには AD 上の callout 定義がありません。倉庫選択時に価格表を自動補完するといった挙動が必要な場合は、独自 callout を追加してください。
キャッシュ利用時の注意
Section titled “キャッシュ利用時の注意”MPOS.get() はキャッシュ経由で返すため、独自プロセスから設定を書き換えた直後に別スレッドが古い値を参照する可能性があります。設定変更を伴うカスタム処理では、キャッシュリセット(CacheMgt)を明示的に呼び出してください。
関連プロセス
Section titled “関連プロセス”このウィンドウには専用のプロセスボタンは定義されていません。POS 端末の設定は店頭販売フォーム(POS フォーム)から参照されます。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”iDempiere の POS 端末は価格表・倉庫・キーレイアウトを端末単位で切り替えられる柔軟な仕組みを備えています。 レシートプリンタやキャッシュドロアとの連携、店舗別の値引きルールも Model Validator や独自フォームでコア改変なしに拡張できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。