iDempiere Web POS端末の使い方|販売管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 販売管理の全体像: 販売管理の全体図 も合わせてご覧ください。
Web POS端末は、店頭 POS のレジ端末1台ごとの動作設定を定義するマスタです。販売元となる倉庫、適用する価格表、売上を計上する現金出納帳、現金・カード・小切手それぞれの振替先(銀行口座または現金出納帳)、レシートプリンタ、端末ロックの挙動をまとめて設定します。
📌 ポイント: 現金出納帳(
C_CashBook_ID)・現金取引先(C_CashBPartner_ID)・現金帳振替タイプ(CashBookTransferType)・自動ロック(AutoLock)の4つが必須項目です。特に現金取引先は、都度顧客を登録せずに現金販売を計上するための「窓口取引先」なので、専用の取引先を用意しておいてください。
Web POS端末でできること
Section titled “Web POS端末でできること”- 端末ごとに販売元倉庫(
M_Warehouse_ID)を割り当てる - 販売価格表(
SO_PriceList_ID)・購買用価格表(PO_PriceList_ID)を端末単位で指定する - 現金売上を計上する現金出納帳と現金取引先を設定する
- 現金・カード・小切手ごとに振替先(銀行口座 / 現金出納帳)を切り替える
- 新規顧客作成時のひな形となるテンプレート取引先(
C_TemplateBPartner_ID)を指定する - レシート出力用のプリンタ名(
PrinterName)と社内担当者(SalesRep_ID)を設定する - 端末のロック/自動ロック・ロック時間・解除時刻を制御する
⚠️ 注意: iDempiere 13 標準ではこのウィンドウは無効化されており、標準メニューにも登録されていません(旧バージョンからの互換用)。新規の業務設計での利用は推奨されません。
単一タブに、決済手段ごとの振替設定がまとまった構成です。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| Terminal | U_POSTerminal | 約29項目 | 端末の全設定(倉庫・価格表・現金/カード/小切手・ロック) |
項目は用途別に次の4グループに分けて捉えると理解しやすくなります。
| グループ | 主な項目 | 役割 |
|---|---|---|
| 基本 | 検索キー・名称・説明・コメント・倉庫・社内担当者・プリンタ名称 | 端末の識別と販売元の指定 |
| 取引先・価格 | Template BPartner・現金取引先・販売価格表・購買用価格表 | 販売時に適用する取引先と単価 |
| 決済・振替 | 現金出納帳・現金帳振替タイプ・現金/カード/小切手の振替現金帳・振替銀行口座 | 決済手段別の入金先 |
| ロック | 自動ロック・Locked・Lock Time・Last Lock Time・UnlockingTime | 端末の施錠制御 |
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 ウィンドウを開く<br/>(標準メニュー未登録のため<br/>メニュー登録が必要)"] --> B["➕ 新規<br/>検索キー・名称を入力"]
B --> C["🏬 倉庫を選択<br/>(販売元ロケーション)"]
C --> D["💴 販売価格表を選択"]
D --> E["👤 現金取引先を選択<br/>(必須・窓口用取引先)"]
E --> F["📕 現金出納帳を選択<br/>(必須)"]
F --> G{"現金帳振替タイプ<br/>(必須)"}
G -->|"B = 銀行口座"| H["🏦 現金振替銀行口座を設定"]
G -->|"C = 現金出納帳"| I["📗 現金振替現金帳を設定"]
H --> J["💳 カード・小切手の<br/>振替タイプと振替先を設定"]
I --> J
J --> K["🖨 プリンタ名称・<br/>社内担当者を設定"]
K --> L["🔒 自動ロック(必須)と<br/>Lock Time を設定"]
L --> M["💾 保存"]
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”標準メニューには登録されていません(AD_Window_ID: 53065)。参照が必要な場合は、システム管理者がアプリケーション辞書からウィンドウをメニューへ追加してください。
- ツールバーの「新規」ボタンをクリック
- 必須項目を入力:
- 現金取引先: 現金販売の相手先となる取引先(
C_CashBPartner_ID) - 現金出納帳: 売上を計上する現金出納帳(
C_CashBook_ID) - 現金帳振替タイプ:
B(銀行口座へ振替)またはC(別の現金出納帳へ振替) - 自動ロック: 締め処理時に端末を自動ロックするか(既定値
N)
- 現金取引先: 現金販売の相手先となる取引先(
- 基本情報を入力:
- 検索キー: 端末コード(最大40文字)
- 名称: 端末名(最大60文字)
- 倉庫: 販売元の倉庫
- 販売価格表: 店頭で適用する価格表
- 決済の振替先を設定:
- カード: Card Transfer Type と、カード振替現金帳 または Transfer Card trx to(銀行口座)
- 小切手: Check Transfer Type と、小切手振替現金簿 または Tranfer Check trx to(銀行口座)
- 「保存」をクリック
端末ロックの運用
Section titled “端末ロックの運用”- ロックしたいときは「Locked」にチェックを入れて保存
- 保存時に「Last Lock Time」が現在時刻で自動セットされます
- 解除方法は次の2通りです:
- UnlockingTime に解除予定時刻を設定 → その時刻を過ぎるとロード時に自動解除
- Lock Time(分)を設定 → Last Lock Time から指定分数が経過するとロード時に自動解除
- 手動で解除する場合は「Locked」チェックを外して保存
💡 ヒント: 自動解除はレコードの読み込み時(
MPOSTerminal.get()/loadComplete())に判定されます。時刻が過ぎていても、誰も端末レコードを読み込まない限りLockedの値は更新されません。
項目リファレンス
Section titled “項目リファレンス”Terminal タブ(主要項目)
Section titled “Terminal タブ(主要項目)”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 検索キー | - | 文字列(40) | 端末コード |
| 名称 | - | 文字列(60) | 端末名 |
| 説明 | - | 文字列(255) | 端末の説明 |
| コメント | - | テキスト | 補足メモ |
| 倉庫 | - | 選択 | 販売元の倉庫・サービス拠点 |
| Template BPartner | - | 検索 | 新規顧客作成時のひな形取引先 |
| 現金取引先 | 必須 | 検索 | 現金取引に使用する取引先 |
| 現金出納帳 | 必須 | 選択 | 小口現金を記録する現金出納帳 |
| 現金帳振替タイプ | 必須 | リスト | B=銀行口座 / C=現金出納帳 |
| 現金振替銀行口座 | - | 選択 | 現金取引の振替先銀行口座 |
| 現金振替現金帳 | - | 選択 | 現金取引の振替先現金出納帳 |
| Card Transfer Type | - | リスト | B=銀行口座 / C=現金出納帳 |
| Card Bank Account | - | 選択 | カード取引を処理する銀行口座 |
| Check Transfer Type | - | リスト | B=銀行口座 / C=現金出納帳 |
| 販売価格表 | - | 選択 | 店頭販売に適用する価格表 |
| 購買用価格表 | - | 選択 | 購買時に適用する価格表 |
| 社内担当者 | - | 選択 | 売上に紐づく営業担当 |
| プリンタ名称 | - | 文字列(60) | レシート出力先プリンタ名 |
| 自動ロック | 必須 | チェック | 締め時に自動ロックするか(既定値 N) |
| Locked | - | チェック | 現在ロック中か(既定値 N) |
| Lock Time | - | 整数 | ロックを維持する分数 |
| Last Lock Time | - | 日時 | 最後にロックした日時(自動セット) |
| UnlockingTime | - | 日時 | ロックを解除する予定時刻 |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 「Last Lock Time」は手入力が必要ですか?
Section titled “Q. 「Last Lock Time」は手入力が必要ですか?”不要です。MPOSTerminal.beforeSave() が Locked の値変更を検知し、Locked=Y に変わった保存時に現在時刻を LastLockTime へ自動セットします。手入力した値は次回のロック時に上書きされます。
Q. ロックが自動で解除されません
Section titled “Q. ロックが自動で解除されません”自動解除は端末レコードの読み込み時(MPOSTerminal.get() および loadComplete())にのみ判定されます。判定条件は次の2つで、いずれかに該当すると Locked=N に更新して保存されます。
| 条件 | 判定内容 |
|---|---|
| UnlockingTime による解除 | UnlockingTime が設定済みで、現在時刻がそれを過ぎている |
| Lock Time による解除 | LastLockTime が設定済みかつ LockTime > 0 で、LastLockTime + LockTime 分 を現在時刻が過ぎている |
LockTime が 0 または未設定で UnlockingTime も未設定の場合、時間経過による自動解除は行われません。手動で解除してください。
Q. 現金帳振替タイプの B と C はどう使い分けますか?
Section titled “Q. 現金帳振替タイプの B と C はどう使い分けますか?”B(Bank Account)は現金出納帳の残高を銀行口座へ移す運用、C(Cash Book)は別の現金出納帳へ移す運用です。選んだタイプに合わせて「現金振替銀行口座」または「現金振替現金帳」を設定してください。カード(Card Transfer Type)・小切手(Check Transfer Type)も同じ B / C の値セットを使用します。
Q. 保存時にどんな検証が走りますか?
Section titled “Q. 保存時にどんな検証が走りますか?”MPOSTerminal.beforeSave() はロック時刻の自動セットのみを行い、return true で常に保存を許可します。項目間の整合性チェック(例: 振替タイプと振替先の組み合わせ)はコアに実装されていないため、必要であれば Model Validator で追加してください。
Q. 端末を複数店舗で使い分けたい
Section titled “Q. 端末を複数店舗で使い分けたい”端末レコードは組織(AD_Org_ID)に属します。テーブルのアクセスレベルは「組織」のみのため、店舗を組織として定義し、店舗ごとに端末・倉庫・現金出納帳を分けて設定してください。
- 受注伝票(Sales Order)の使い方
- 販売請求伝票(Sales Invoice)の使い方
- 倉庫・ロケーターの使い方
- 取引先マスタ(Business Partner)の使い方
- 画面リファレンス: Web POS Terminal
🛠 技術仕様(開発者向け)
Web POS端末はマスタデータ型のウィンドウ(AD_Window_ID: 53065)で、U_POSTerminal テーブルに格納されます。モデルクラスは MPOSTerminal(170行)で、生成クラス X_U_POSTerminal を継承します。Document 型ではなく、DocStatus / DocAction カラムを持ちません。
テーブル属性: アクセスレベル 1(組織)、削除可(IsDeleteable=Y)、大量データ扱いなし(IsHighVolume=N)、ビューではありません。
MRoleMenu / MWebProperties と異なり、MPOSTerminal には @Deprecated は付いていませんが、ウィンドウ自体は iDempiere 13 標準で無効化されています。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MPOSTerminal {
+get(int) MPOSTerminal
+get(Properties, int) MPOSTerminal
+checkLock(MPOSTerminal) void
#loadComplete(boolean) void
#beforeSave(boolean) boolean
}
class X_U_POSTerminal {
<<generated>>
}
class I_U_POSTerminal {
<<interface>>
}
class PO {
<<abstract>>
}
MPOSTerminal --|> X_U_POSTerminal
X_U_POSTerminal --|> PO
X_U_POSTerminal ..|> I_U_POSTerminal
MPOSTerminal --> MWarehouse : sells from
MPOSTerminal --> MCashBook : posts to
MPOSTerminal --> MBPartner : cash / template partner
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MPOSTerminal.java(生成クラス: X_U_POSTerminal.java / インターフェース: I_U_POSTerminal.java)
関連DBテーブル
Section titled “関連DBテーブル”U_POSTerminal(POS Terminal)主要カラム
Section titled “U_POSTerminal(POS Terminal)主要カラム”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| U_POSTerminal_ID | ID | PK | 端末ID | 主キー |
| AD_Client_ID | Table Direct | Y | クライアント | 既定値 @#AD_Client_ID@ |
| AD_Org_ID | Table Direct | Y | 組織 | 既定値 @#AD_Org_ID@ |
| Value | String(40) | N | 検索キー | |
| Name | String(60) | N | 名称 | |
| Description | String(255) | N | 説明 | |
| Help | Text(2000) | N | コメント | |
| M_Warehouse_ID | Table Direct | N | 倉庫 | 販売元 |
| C_CashBook_ID | Table Direct | Y | 現金出納帳 | 必須 |
| C_CashBPartner_ID | Search | Y | 現金取引先 | 必須 |
| C_TemplateBPartner_ID | Search | N | テンプレート取引先 | 新規顧客のひな形 |
| CashBookTransferType | List(1) | Y | 現金帳振替タイプ | B=BankAccount / C=CashBook |
| CashTransferBankAccount_ID | Table | N | 現金振替銀行口座 | |
| CashTransferCashBook_ID | Table | N | 現金振替現金帳 | |
| CardTransferType | List(1) | N | カード振替タイプ | B / C |
| Card_BankAccount_ID | Table | N | カード処理口座 | |
| CardTransferBankAccount_ID | Table | N | カード振替銀行口座 | |
| CardTransferCashBook_ID | Table | N | カード振替現金帳 | |
| CheckTransferType | List(1) | N | 小切手振替タイプ | B / C |
| Check_BankAccount_ID | Table | N | 小切手処理口座 | |
| CheckTransferBankAccount_ID | Table | N | 小切手振替銀行口座 | |
| CheckTransferCashBook_ID | Table | N | 小切手振替現金帳 | |
| SO_PriceList_ID | Table | N | 販売価格表 | |
| PO_PriceList_ID | Table | N | 購買用価格表 | |
| SalesRep_ID | Table | N | 社内担当者 | |
| PrinterName | String(60) | N | プリンタ名称 | |
| AutoLock | Yes-No | Y | 自動ロック | 既定値 N |
| Locked | Yes-No | N | ロック中 | 既定値 N |
| LockTime | Integer | N | ロック維持分数 | |
| LastLockTime | Date+Time | N | 最終ロック日時 | beforeSave() で自動セット |
| UnlockingTime | Date+Time | N | 解除予定時刻 | |
| U_POSTerminal_UU | UUID(36) | N | UUID |
CardTransferType / CashBookTransferType / CheckTransferType はいずれも同一の参照(AD_Reference_ID=52002)を共有し、値は B(Bank Account)と C(Cash Book)の2種類です。
erDiagram
U_POSTerminal }o--o| M_Warehouse : "sells from"
U_POSTerminal }o--|| C_CashBook : "cash book"
U_POSTerminal }o--|| C_BPartner : "cash bpartner"
U_POSTerminal }o--o| C_BPartner : "template bpartner"
U_POSTerminal }o--o| C_BankAccount : "card / check / cash transfer"
U_POSTerminal }o--o| M_PriceList : "SO / PO price list"
U_POSTerminal }o--o| AD_User : "sales rep"
ビジネスロジック
Section titled “ビジネスロジック”beforeSave()
Section titled “beforeSave()”protected boolean beforeSave(boolean newRecord){ // Update last lock time if (is_ValueChanged(COLUMNNAME_Locked) && isLocked()) { setLastLockTime(new Timestamp(System.currentTimeMillis())); } return true;}Locked が変更されかつ Y になった場合に限り LastLockTime を現在時刻で更新します。検証による保存拒否は行いません。
ロック自動解除(checkLock)
Section titled “ロック自動解除(checkLock)”flowchart TD
A["get() / loadComplete(true)"] --> B["checkLock(terminal)"]
B --> C{"isLocked()?"}
C -->|No| Z["何もしない"]
C -->|Yes| D{"UnlockingTime != null かつ<br/>現在時刻 > UnlockingTime?"}
D -->|Yes| E["setLocked(false)"]
D -->|No| F{"LastLockTime != null かつ<br/>LockTime > 0?"}
E --> F
F -->|Yes| G{"現在時刻 ><br/>LastLockTime + LockTime 分?"}
F -->|No| H["saveEx()"]
G -->|Yes| I["setLocked(false)"]
G -->|No| H
I --> H
⚠️ 注意:
checkLock()は判定後に必ずsaveEx()を呼びます。ロック中の端末を読み込むたびに UPDATE が発行される点に留意してください(Updated/UpdatedByが更新されます)。
get() の戻り値
Section titled “get() の戻り値”MPOSTerminal.get(ctx, U_POSTerminal_ID) は、生成したインスタンスの get_ID() が引数と一致しない場合(=レコードが存在しない場合)に null を返します。呼び出し側で null チェックが必要です。キャッシュは使用していないため、呼び出しごとに DB アクセスが発生します。
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”本テーブルには Callout(AD_Column.Callout)が定義されていません。項目間の整合性チェックを追加する場合は Model Validator を使用します。
public class CustomPOSTerminalValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (po instanceof MPOSTerminal) { MPOSTerminal t = (MPOSTerminal) po; if (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE) { // 例: 振替タイプと振替先の整合性を強制する if (MPOSTerminal.CASHBOOKTRANSFERTYPE_BankAccount.equals(t.getCashBookTransferType()) && t.getCashTransferBankAccount_ID() == 0) { throw new AdempiereException("現金帳振替タイプが銀行口座の場合、現金振替銀行口座は必須です"); } } } return null; }
@Override public String docValidate(PO po, int timing) { return null; // U_POSTerminal は Document 型ではないため不要 }}ロック解除ポリシーを変えたい場合は、checkLock() が static メソッドであるため直接のオーバーライドはできません。独自の IModelFactory で MPOSTerminal のサブクラスを返し、loadComplete() を上書きする方法を検討してください。
関連プロセス
Section titled “関連プロセス”このウィンドウに紐づく標準プロセスは、リファレンスページ・メニューのいずれにも登録されていません。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”店舗 POS の要件は、端末ごとの倉庫・価格表・入金先の設計次第で運用負荷が大きく変わります。 決済手段別の振替ルールやロック運用も、Model Validator と OSGi プラグインでコア改変なしに実装できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。