Skip to content

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つが必須項目です。特に現金取引先は、都度顧客を登録せずに現金販売を計上するための「窓口取引先」なので、専用の取引先を用意しておいてください。

  • 端末ごとに販売元倉庫(M_Warehouse_ID)を割り当てる
  • 販売価格表(SO_PriceList_ID)・購買用価格表(PO_PriceList_ID)を端末単位で指定する
  • 現金売上を計上する現金出納帳と現金取引先を設定する
  • 現金・カード・小切手ごとに振替先(銀行口座 / 現金出納帳)を切り替える
  • 新規顧客作成時のひな形となるテンプレート取引先(C_TemplateBPartner_ID)を指定する
  • レシート出力用のプリンタ名(PrinterName)と社内担当者(SalesRep_ID)を設定する
  • 端末のロック/自動ロック・ロック時間・解除時刻を制御する

⚠️ 注意: iDempiere 13 標準ではこのウィンドウは無効化されており、標準メニューにも登録されていません(旧バージョンからの互換用)。新規の業務設計での利用は推奨されません。

単一タブに、決済手段ごとの振替設定がまとまった構成です。

タブ名テーブル項目数役割
TerminalU_POSTerminal約29項目端末の全設定(倉庫・価格表・現金/カード/小切手・ロック)

項目は用途別に次の4グループに分けて捉えると理解しやすくなります。

グループ主な項目役割
基本検索キー・名称・説明・コメント・倉庫・社内担当者・プリンタ名称端末の識別と販売元の指定
取引先・価格Template BPartner・現金取引先・販売価格表・購買用価格表販売時に適用する取引先と単価
決済・振替現金出納帳・現金帳振替タイプ・現金/カード/小切手の振替現金帳・振替銀行口座決済手段別の入金先
ロック自動ロック・Locked・Lock Time・Last Lock Time・UnlockingTime端末の施錠制御
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["💾 保存"]

ウィンドウを開く (標準メニュー未登録のため メニュー登録が必要) 新規 検索キー・名称を入力 倉庫を選択 (販売元ロケーション) 販売価格表を選択 現金取引先を選択 (必須・窓口用取引先) 現金出納帳を選択 (必須) 現金帳振替タイプ (必須) B = 銀行口座 現金振替銀行口座を設定 C = 現金出納帳 現金振替現金帳を設定 カード・小切手の 振替タイプと振替先を設定 プリンタ名称・ 社内担当者を設定 自動ロック(必須)と Lock Time を設定 保存

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

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

標準メニューには登録されていません(AD_Window_ID: 53065)。参照が必要な場合は、システム管理者がアプリケーション辞書からウィンドウをメニューへ追加してください。

  1. ツールバーの「新規」ボタンをクリック
  2. 必須項目を入力:
    • 現金取引先: 現金販売の相手先となる取引先(C_CashBPartner_ID
    • 現金出納帳: 売上を計上する現金出納帳(C_CashBook_ID
    • 現金帳振替タイプ: B(銀行口座へ振替)または C(別の現金出納帳へ振替)
    • 自動ロック: 締め処理時に端末を自動ロックするか(既定値 N
  3. 基本情報を入力:
    • 検索キー: 端末コード(最大40文字)
    • 名称: 端末名(最大60文字)
    • 倉庫: 販売元の倉庫
    • 販売価格表: 店頭で適用する価格表
  4. 決済の振替先を設定:
    • カード: Card Transfer Type と、カード振替現金帳 または Transfer Card trx to(銀行口座)
    • 小切手: Check Transfer Type と、小切手振替現金簿 または Tranfer Check trx to(銀行口座)
  5. 保存」をクリック
  1. ロックしたいときは「Locked」にチェックを入れて保存
  2. 保存時に「Last Lock Time」が現在時刻で自動セットされます
  3. 解除方法は次の2通りです:
    • UnlockingTime に解除予定時刻を設定 → その時刻を過ぎるとロード時に自動解除
    • Lock Time(分)を設定 → Last Lock Time から指定分数が経過するとロード時に自動解除
  4. 手動で解除する場合は「Locked」チェックを外して保存

💡 ヒント: 自動解除はレコードの読み込み時(MPOSTerminal.get() / loadComplete())に判定されます。時刻が過ぎていても、誰も端末レコードを読み込まない限り Locked の値は更新されません。

項目名必須説明
検索キー-文字列(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-日時ロックを解除する予定時刻

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

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 分 を現在時刻が過ぎている

LockTime0 または未設定で UnlockingTime も未設定の場合、時間経過による自動解除は行われません。手動で解除してください。

Q. 現金帳振替タイプの BC はどう使い分けますか?

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)に属します。テーブルのアクセスレベルは「組織」のみのため、店舗を組織として定義し、店舗ごとに端末・倉庫・現金出納帳を分けて設定してください。

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

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 標準で無効化されています。

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

+get(int) MPOSTerminal +get(Properties, int) MPOSTerminal +checkLock(MPOSTerminal) void #loadComplete(boolean) void #beforeSave(boolean) boolean <> <> <> > X_U_POSTerminal X_U_POSTerminal --

パッケージ: org.compiere.model ソースファイル: org.adempiere.base/src/org/compiere/model/MPOSTerminal.java(生成クラス: X_U_POSTerminal.java / インターフェース: I_U_POSTerminal.java

U_POSTerminal(POS Terminal)主要カラム

Section titled “U_POSTerminal(POS Terminal)主要カラム”
カラム名必須説明備考
U_POSTerminal_IDIDPK端末ID主キー
AD_Client_IDTable DirectYクライアント既定値 @#AD_Client_ID@
AD_Org_IDTable DirectY組織既定値 @#AD_Org_ID@
ValueString(40)N検索キー
NameString(60)N名称
DescriptionString(255)N説明
HelpText(2000)Nコメント
M_Warehouse_IDTable DirectN倉庫販売元
C_CashBook_IDTable DirectY現金出納帳必須
C_CashBPartner_IDSearchY現金取引先必須
C_TemplateBPartner_IDSearchNテンプレート取引先新規顧客のひな形
CashBookTransferTypeList(1)Y現金帳振替タイプB=BankAccount / C=CashBook
CashTransferBankAccount_IDTableN現金振替銀行口座
CashTransferCashBook_IDTableN現金振替現金帳
CardTransferTypeList(1)Nカード振替タイプB / C
Card_BankAccount_IDTableNカード処理口座
CardTransferBankAccount_IDTableNカード振替銀行口座
CardTransferCashBook_IDTableNカード振替現金帳
CheckTransferTypeList(1)N小切手振替タイプB / C
Check_BankAccount_IDTableN小切手処理口座
CheckTransferBankAccount_IDTableN小切手振替銀行口座
CheckTransferCashBook_IDTableN小切手振替現金帳
SO_PriceList_IDTableN販売価格表
PO_PriceList_IDTableN購買用価格表
SalesRep_IDTableN社内担当者
PrinterNameString(60)Nプリンタ名称
AutoLockYes-NoY自動ロック既定値 N
LockedYes-NoNロック中既定値 N
LockTimeIntegerNロック維持分数
LastLockTimeDate+TimeN最終ロック日時beforeSave() で自動セット
UnlockingTimeDate+TimeN解除予定時刻
U_POSTerminal_UUUUID(36)NUUID

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"

sells from cash book cash bpartner template bpartner card / check / cash transfer SO / PO price list sales rep

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 を現在時刻で更新します。検証による保存拒否は行いません。

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

get() / loadComplete(true) checkLock(terminal) isLocked()? 何もしない UnlockingTime != null かつ 現在時刻 > UnlockingTime? setLocked(false) LastLockTime != null かつ LockTime > 0? 現在時刻 > LastLockTime + LockTime 分? saveEx()

⚠️ 注意: checkLock() は判定後に必ず saveEx() を呼びます。ロック中の端末を読み込むたびに UPDATE が発行される点に留意してください(Updated / UpdatedBy が更新されます)。

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 メソッドであるため直接のオーバーライドはできません。独自の IModelFactoryMPOSTerminal のサブクラスを返し、loadComplete() を上書きする方法を検討してください。

このウィンドウに紐づく標準プロセスは、リファレンスページ・メニューのいずれにも登録されていません。


店舗 POS の要件は、端末ごとの倉庫・価格表・入金先の設計次第で運用負荷が大きく変わります。 決済手段別の振替ルールやロック運用も、Model Validator と OSGi プラグインでコア改変なしに実装できます。

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

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