iDempiere POS キーレイアウトの使い方|販売管理 操作マニュアル・技術仕様
📖 販売管理の全体像: 販売管理の全体図 も合わせてご覧ください。
POS キーレイアウト(POS Key Layout)は、店頭販売フォームに表示されるボタン(キー)の並びを定義するマスタです。よく売れる品目をワンタッチで登録できる商品キーのほか、タッチパネル用のソフトウェアキーボード・テンキーのレイアウトもこの画面で定義します。
📌 ポイント: キーは**「シーケンスNo」の昇順に、レイアウトの列数で折り返して**配置されます。並び順を直したいときはキーを作り直すのではなく、シーケンスNo を振り直すのが正しい方法です。
POS キーレイアウトでできること
Section titled “POS キーレイアウトでできること”- 商品キー(Product)・キーボード(Keyboard)・テンキー(Numberpad)の3タイプのレイアウト定義
- 列数(Columns)の指定によるボタンの折り返し制御
- キーごとの品目・数量の割り当て(ワンタッチ登録)
- キーの表示色・印刷フォント・画像(アイコン)の指定
- セル結合(Column span / Row Span)による大きさの異なるボタン配置
- サブレイアウトの割り当てによる階層メニュー(カテゴリ→商品)の構成
- 有効/無効の切り替えによるキーの一時的な非表示
POS キーレイアウトはヘッダー+キーの構成です。iDempiere 13 標準ではキー側のタブが2つ(Key Sequence と キー)定義されており、どちらも同じ C_POSKey テーブルを編集します。
graph TD
subgraph "POS キーレイアウトウィンドウ(Window ID: 339)"
T1["⌨️ キーレイアウト<br/>C_POSKeyLayout<br/>10項目"]
T2["🔢 Key Sequence<br/>C_POSKey"]
T3["🔘 キー<br/>C_POSKey<br/>16項目"]
end
T1 --> T2
T1 --> T3
| タブ名 | テーブル | 階層 | 役割 |
|---|---|---|---|
| キーレイアウト | C_POSKeyLayout | 0 | レイアウト本体(タイプ・列数・配色) |
| Key Sequence | C_POSKey | 1 | キーの並び順を編集するためのタブ |
| キー | C_POSKey | 1 | 各キーの詳細設定(品目・数量・見た目) |
💡 ヒント: 並び替えだけを行いたいときは「Key Sequence」タブ、品目や見た目を細かく設定したいときは「キー」タブを使う、という使い分けが想定されています。
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 メニューから開く<br/>販売管理 > 見積受注管理 > POS キーレイアウト"] --> B["➕ 新規ボタンをクリック"]
B --> C["✏️ 名称を入力"]
C --> D["🎛 レイアウトタイプを選択<br/>商品 / キーボード / テンキー"]
D --> E["🔢 列数(Columns)を入力"]
E --> F["💾 保存"]
F --> G["🔘 キータブでキーを追加<br/>(シーケンスNo は自動採番)"]
G --> H{"キーの役割"}
H -->|品目登録| I["📦 品目と数量を設定"]
H -->|階層メニュー| J["📂 サブレイアウトを設定"]
I --> K["🎨 色・フォント・画像・<br/>セル結合を調整"]
J --> K
K --> L["🖥 POS 端末のキーレイアウトに<br/>割り当てて利用開始"]
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”メニューから「販売管理 > 見積受注管理 > POS キーレイアウト」を開きます。
レイアウトの新規登録
Section titled “レイアウトの新規登録”- ツールバーの「新規」ボタンをクリック
- 基本情報を入力:
- 名称(必須): レイアウト名(例:
本店 商品キー) - 説明 / コメント: 補足説明・運用メモ
- POS Key Layout Type:
商品/キーボード/テンキーから選択 - Columns: 1行あたりのキー数(列数)
- カラー / 印刷フォント: 既定の表示色・フォント
- 名称(必須): レイアウト名(例:
- 「保存」をクリック
- 「キー」タブに移動
- 「新規」ボタンをクリック
- キー情報を入力:
- シーケンスNo(必須): 並び順。同一レイアウト内の最大値+10 が自動セットされます
- 名称(必須): キーに表示される文字
- 品目: ワンタッチで登録する品目
- 数量: 1タップで加算される数量
- Key Layout(サブレイアウト): このキーを押したときに表示する別レイアウト
- Column span / Row Span: 横・縦のセル結合数
- カラー / 印刷フォント / 画像: 見た目の設定
- 「保存」をクリック
📌 ポイント: シーケンスNo の既定値は SQL 式(
SELECT NVL(MAX(SeqNo),0)+10 FROM C_POSKey WHERE C_POSKeyLayout_ID=...)で計算されるため、追加するたびに 10、20、30… と自動で採番されます。間に挿入したい場合は 15 のような中間値を手入力してください。
階層メニューの作り方
Section titled “階層メニューの作り方”- 下位レイアウト(例:
飲料)を先に作成してキーを登録 - 上位レイアウト(例:
カテゴリ)にキーを追加し、「Key Layout」で下位レイアウトを選択 - POS フォームで上位キーを押すと、下位レイアウトのキーが表示されます
キーの無効化
Section titled “キーの無効化”不要になったキーは「有効」チェックを外します。レイアウトのキー取得処理は IsActive='Y' のキーのみを対象とするため、チェックを外すだけで画面から消えます。
項目リファレンス
Section titled “項目リファレンス”キーレイアウトタブ
Section titled “キーレイアウトタブ”| 項目名 | カラム | 必須 | 型 | 説明 |
|---|---|---|---|---|
| クライアント | AD_Client_ID | 必須 | 選択 | テナント |
| 組織 | AD_Org_ID | 必須 | 選択 | 組織 |
| 名称 | Name | 必須 | 文字列(60) | レイアウト名 |
| 説明 | Description | - | 文字列(255) | 補足説明 |
| コメント | Help | - | テキスト(2000) | 運用メモ |
| POS Key Layout Type | POSKeyLayoutType | - | リスト | K=キーボード、N=テンキー、P=商品 |
| Columns | Columns | - | 整数 | 1行あたりの列数 |
| カラー | AD_PrintColor_ID | - | 選択 | 表示・印刷色 |
| 印刷フォント | AD_PrintFont_ID | - | 選択 | フォント |
| 有効 | IsActive | 必須 | チェック | レコードが有効か(既定: Y) |
| 項目名 | カラム | 必須 | 型 | 説明 |
|---|---|---|---|---|
| POSキーレイアウト | C_POSKeyLayout_ID | 必須 | 選択 | 親レイアウト(更新不可) |
| シーケンスNo | SeqNo | 必須 | 整数 | 並び順(既定: 最大値+10) |
| 名称 | Name | 必須 | 文字列(60) | キーの表示名 |
| 説明 | Description | - | 文字列(255) | 補足説明 |
| Description | Text | - | 文字列(22) | キー上の補助テキスト |
| Key Layout | SubKeyLayout_ID | - | 選択 | 押下時に開くサブレイアウト |
| 品目 | M_Product_ID | - | 検索 | ワンタッチ登録する品目 |
| 数量 | Qty | - | 数量 | 1タップで加算する数量 |
| Column span | SpanX | - | 整数 | 横方向のセル結合数 |
| Row Span | SpanY | - | 整数 | 縦方向のセル結合数 |
| カラー | AD_PrintColor_ID | - | 選択 | 表示色(既定: -1) |
| 印刷フォント | AD_PrintFont_ID | - | 選択 | フォント(既定: -1) |
| 画像 | AD_Image_ID | - | 画像 | キーに表示するアイコン |
| 有効 | IsActive | 必須 | チェック | 表示するか(既定: Y) |
レイアウトタイプの選択肢
Section titled “レイアウトタイプの選択肢”| 表示 | コード | 用途 |
|---|---|---|
| キーボード | K | 文字入力欄用のソフトウェアキーボード |
| テンキー | N | 数値入力欄用のオンスクリーンテンキー |
| 商品 | P | 品目をワンタッチ登録する商品キー |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. キーの並び順はどう決まりますか?
Section titled “Q. キーの並び順はどう決まりますか?”有効なキーをシーケンスNo(SeqNo)の昇順で取得します(MPOSKeyLayout.getKeys() の SQL: WHERE C_POSKeyLayout_ID=? AND IsActive='Y' ORDER BY SeqNo)。並べ替えたいときはシーケンスNo を変更してください。
Q. 無効化したキーはどう扱われますか?
Section titled “Q. 無効化したキーはどう扱われますか?”getKeys() は IsActive='Y' のキーだけを返すため、無効化したキーは POS フォームに表示されず、キー数(getNoOfKeys())にも含まれません。データは残るため、あとで再度有効化できます。
Q. キーを削除すると、設定した画像も消えますか?
Section titled “Q. キーを削除すると、設定した画像も消えますか?”消えます。MPOSKey.postDelete() が、キーに紐づく画像(AD_Image_ID)のレコードを削除します。画像の削除に失敗した場合は警告ログが出力され、キーの削除自体も失敗します。同じ画像を複数キーで共有している場合は削除に注意してください。
Q. 「Key Sequence」タブと「キー」タブの違いは何ですか?
Section titled “Q. 「Key Sequence」タブと「キー」タブの違いは何ですか?”どちらも同じ C_POSKey テーブルを編集するタブです。テーブルもレコードも共通で、表示されるフィールドの構成だけが異なります。片方で行った変更はもう一方にもそのまま反映されます。
Q. 1レイアウトに登録できるキー数に上限はありますか?
Section titled “Q. 1レイアウトに登録できるキー数に上限はありますか?”AD 上の制約はありません。ただしレイアウトのキャッシュ(ImmutableIntPOCache)は容量3と小さいため、多数のレイアウトを切り替える運用ではキャッシュミスが発生しやすくなります。
Q. 列数(Columns)を設定しないとどうなりますか?
Section titled “Q. 列数(Columns)を設定しないとどうなりますか?”Columns は任意項目で既定値もありません。折り返し位置を明示したい場合は必ず入力してください。
業務フロー上の位置づけ
Section titled “業務フロー上の位置づけ”graph TD
A["📦 品目マスタ"] --> B["🔘 POS キー<br/>C_POSKey"]
C["⌨️ POS キーレイアウト<br/>C_POSKeyLayout"] --> B
B -->|サブレイアウト| C
C --> D["🖥 POS 端末<br/>C_POS"]
D --> E["🛒 POS フォーム"]
E --> F["📋 受注伝票"]
🛠 技術仕様(開発者向け)
POS キーレイアウトはマスタデータ型のウィンドウ(AD_Window_ID: 339)で、C_POSKeyLayout(レイアウト)と C_POSKey(キー)の2テーブルで構成されます。MPOSKeyLayout クラス(207行)がキーの取得とキャッシュを、MPOSKey クラス(122行)が削除時の画像クリーンアップを担当します。どちらも ImmutablePOSupport に対応した不変化(markImmutable())をサポートします。Document 型ではありません。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MPOSKeyLayout {
+get(int C_POSKeyLayout_ID)$ MPOSKeyLayout
+get(Properties, int)$ MPOSKeyLayout
+getKeys(boolean requery) MPOSKey[]
+getNoOfKeys() int
+markImmutable() MPOSKeyLayout
}
class MPOSKey {
#postDelete() boolean
+markImmutable() MPOSKey
}
class X_C_POSKeyLayout {
<<generated>>
}
class X_C_POSKey {
<<generated>>
}
class PO {
<<abstract>>
}
MPOSKeyLayout --|> X_C_POSKeyLayout
MPOSKey --|> X_C_POSKey
X_C_POSKeyLayout --|> PO
X_C_POSKey --|> PO
MPOSKeyLayout --> MPOSKey : has many
MPOSKey --> MPOSKeyLayout : sub layout
MPOS --> MPOSKeyLayout : uses
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MPOSKeyLayout.java(207行)、MPOSKey.java(122行)
関連DBテーブル
Section titled “関連DBテーブル”C_POSKeyLayout(POS キーレイアウト)
Section titled “C_POSKeyLayout(POS キーレイアウト)”テーブル属性: 削除可(IsDeleteable=Y)/大量データ扱いなし/アクセスレベル=クライアント/ビューではない。
| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_POSKeyLayout_ID | ID | PK | キーレイアウトID | 主キー |
| C_POSKeyLayout_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 | コメント | |
| POSKeyLayoutType | List(1) | N | レイアウトタイプ | K=Keyboard, N=Numberpad, P=Product(AD_Reference_ID=53351) |
| Columns | Integer | N | 列数 | 既定値なし |
| AD_PrintColor_ID | Table Direct | N | カラー | |
| AD_PrintFont_ID | Table Direct | N | 印刷フォント | |
| IsActive | Yes-No | Y | 有効 | 既定 Y |
C_POSKey(POS キー)
Section titled “C_POSKey(POS キー)”テーブル属性: 削除可/アクセスレベル=クライアント。
| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_POSKey_ID | ID | PK | キーID | 主キー |
| C_POSKey_UU | UUID(36) | N | UUIDキー | |
| C_POSKeyLayout_ID | Table Direct | Y | 親レイアウトFK | 更新不可 |
| SeqNo | Integer | Y | シーケンスNo | 既定 @SQL=SELECT NVL(MAX(SeqNo),0)+10 ... WHERE C_POSKeyLayout_ID=@C_POSKeyLayout_ID@ |
| Name | String(60) | Y | 名称 | 識別子カラム |
| Description | String(255) | N | 説明 | |
| Text | String(22) | N | 補助テキスト | 画面ラベルは「Description」 |
| SubKeyLayout_ID | Table | N | サブレイアウト | 階層メニュー用 |
| M_Product_ID | Search | N | 品目 | |
| Qty | Quantity | N | 数量 | |
| SpanX | Integer | N | 横セル結合数 | |
| SpanY | Integer | N | 縦セル結合数 | |
| AD_PrintColor_ID | Table Direct | N | カラー | 既定 -1 |
| AD_PrintFont_ID | Table Direct | N | 印刷フォント | 既定 -1 |
| AD_Image_ID | Image | N | 画像 | 削除時に連動削除 |
| IsActive | Yes-No | Y | 有効 | 既定 Y |
erDiagram
C_POSKeyLayout ||--o{ C_POSKey : "keys"
C_POSKey }o--o| C_POSKeyLayout : "sub layout"
C_POSKey }o--o| M_Product : "product key"
C_POSKey }o--o| AD_Image : "icon"
C_POS }o--o| C_POSKeyLayout : "product keys"
C_POS }o--o| C_POSKeyLayout : "OSK / OSNP layout"
C_POSKeyLayout_ID は C_POS から3つのカラム(C_POSKeyLayout_ID、OSK_KeyLayout_ID、OSNP_KeyLayout_ID)で参照され、C_POSKey.SubKeyLayout_ID からも自己参照されます。
ビジネスロジック
Section titled “ビジネスロジック”キー取得(getKeys)
Section titled “キー取得(getKeys)”SELECT * FROM C_POSKeyWHERE C_POSKeyLayout_ID=? AND IsActive = 'Y'ORDER BY SeqNogetKeys(boolean requery) は上記 SQL で有効なキーのみを取得し、結果を内部フィールド m_keys にキャッシュします。requery=false かつキャッシュ済みの場合は再クエリしません。レイアウトが immutable の場合、取得した全キーも markImmutable() されます。getNoOfKeys() は getKeys(false).length を返します。
画像の連動削除(postDelete)
Section titled “画像の連動削除(postDelete)”MPOSKey.postDelete() は、キーに AD_Image_ID が設定されている場合に該当画像レコードを削除します(MImage.delete(true))。削除に失敗した場合は警告ログを出力し false を返すため、キーの削除自体もロールバックされます。
flowchart TD
A["キーを削除"] --> B{"AD_Image_ID > 0?"}
B -->|No| C["✅ 削除完了"]
B -->|Yes| D["MImage.delete(true)"]
D --> E{"削除成功?"}
E -->|Yes| C
E -->|No| F["⚠️ 警告ログ<br/>削除を中止"]
MPOSKeyLayout は ImmutableIntPOCache<Integer, MPOSKeyLayout>(テーブル名キー、容量3)を持ち、get(C_POSKeyLayout_ID) / get(ctx, C_POSKeyLayout_ID) でキャッシュ参照します。markImmutable() は自身と保持している全キーを不変化します。
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”public class CustomPOSKeyValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (po instanceof MPOSKey && (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE)) { MPOSKey key = (MPOSKey) po; // 例: 商品キーには品目とサブレイアウトのどちらか一方だけを許可 if (key.getM_Product_ID() > 0 && key.getSubKeyLayout_ID() > 0) { throw new AdempiereException("品目とサブレイアウトは同時に指定できません"); } } return null; }}Callout
Section titled “Callout”C_POSKeyLayout / C_POSKey のカラムには AD 上の callout 定義がありません。品目選択時にキー名称を自動補完するなどの挙動が必要な場合は、独自 callout を追加してください。
レイアウト描画のカスタマイズ
Section titled “レイアウト描画のカスタマイズ”キーの配置(列数・セル結合)の解釈は POS フォームの描画側で行われます。独自の並びルールやテーマを適用する場合は、getKeys() の結果を利用する独自フォームを OSGi プラグインとして提供する構成が安全です。コアの MPOSKeyLayout を継承・改変する必要はありません。
関連プロセス
Section titled “関連プロセス”このウィンドウには専用のプロセスボタンは定義されていません。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”POS キーレイアウトはサブレイアウトによる階層メニューやセル結合に対応しており、店舗ごとのタッチ UI を柔軟に設計できます。 独自の商品分類ボタンやレシート連携、タブレット向けの描画も OSGi プラグインでコア改変なしに追加できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。