iDempiere 経費(未払い)の使い方|取引先管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 取引先管理の全体像: 取引先管理の全体図 も合わせてご覧ください。
経費(未払い)(Expenses (not reimbursed))は、従業員や仕入先へまだ払い戻していない立替経費の明細を、取引先ごとに一覧して確認・調整する照会ウィンドウです。経費報告(Expense Report)で起票された明細のうち、仕入請求伝票がまだ生成されていないものだけが表示されます。
📌 ポイント: 払い戻しの前に、このウィンドウで**精算価格(
PriceReimbursed)と精算数量(QtyReimbursed)**を必ず確認してください。ここで確定した内容が、そのまま従業員・仕入先への仕入請求伝票(買掛)に反映されます。
経費(未払い)でできること
Section titled “経費(未払い)でできること”- 未精算の立替経費を、従業員・仕入先ごとに絞って確認する
- 明細ごとの精算価格(
PriceReimbursed)・精算数量(QtyReimbursed)を払い戻し前に調整する - 時間単位レポート(作業時間のみの記録)と実費経費を区別して確認する
- 経費金額・換算金額(基軸通貨換算)を照会する
- 従業員/仕入先タブで購買側の支払条件・債権債務残高を確認する
- プロジェクト・フェーズ・タスク・営業活動への原価配賦状況を確認する
親子2タブ構成です。親タブで払い戻し先を選び、子タブでその相手の未精算明細を見ます。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 従業員/仕入先 | C_BPartner | 7項目 | 払い戻し対象の取引先を選択(仕入先・従業員フラグと支払条件を確認) |
| レポート詳細 | S_TimeExpenseLine | 27項目 | 当該取引先の未精算経費明細を照会・修正 |
💡 ヒント: 従業員への立替精算を行うには、対象の人物が取引先マスタで**従業員(
IsEmployee)または仕入先(IsVendor)**として登録されている必要があります。人事側の登録は 従業員マスタ を参照してください。
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 メニューから開く<br/>取引先管理 > サービス > 経費(未払い)"] --> B["🔍 従業員/仕入先タブで<br/>払い戻し対象を選択"]
B --> C["📋 レポート詳細タブへ移動<br/>未精算の明細一覧を表示"]
C --> D{"精算内容は妥当か"}
D -->|調整が必要| E["✏️ 精算価格 PriceReimbursed<br/>精算数量 QtyReimbursed を修正"]
D -->|問題なし| F["✅ 精算内容を確定"]
E --> G["💾 保存<br/>(換算金額・行合計を自動再計算)"]
G --> F
F --> H["🧾 仕入請求伝票の生成<br/>(C_InvoiceLine_ID がセットされる)"]
H --> I["💴 支払処理で払い戻し"]
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”メニューから「取引先管理 > サービス > 経費(未払い)」を開きます(AD_Window_ID: 254)。
確認・調整の手順
Section titled “確認・調整の手順”- 「従業員/仕入先」タブで払い戻し先の取引先を検索・選択します
- 検索キー / 名称: 取引先の特定に使用
- 仕入先 / 従業員: どちらの区分で登録されているかを確認
- 支払条件(購買)(
PO_PaymentTerm_ID): 払い戻し時に適用される支払条件 - 債権債務残高: 現在の未決済残高
- 「レポート詳細」タブに移動し、未精算明細を確認します
- 必要に応じて明細を調整します
- 精算数量(
QtyReimbursed): 実際に払い戻す数量 - 請求価格(
PriceReimbursed): 従業員の購買価格表通貨での精算単価 - 経費金額 / 通貨: 立替額と通貨
- 説明 / メモ: 精算理由の補足
- 精算数量(
- 「保存」をクリックします
- 内容確定後、経費から仕入請求伝票を生成する処理を実行します
⚠️ 注意: 親の経費報告が処理済み(
Processed=Y)の場合、その報告に新しい明細を追加できません。MTimeExpenseLine.beforeSave()がParentCompleteエラーで拒否します。
項目リファレンス
Section titled “項目リファレンス”従業員/仕入先タブ(C_BPartner)
Section titled “従業員/仕入先タブ(C_BPartner)”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 検索キー | 必須 | 文字列 | 取引先コード(一意) |
| 名称 | 必須 | 文字列 | 取引先名 |
| 読み方 | - | 文字列 | 補助名称(カナ等) |
| 仕入先 | 必須 | チェック | 仕入先として扱うか |
| 従業員 | 必須 | チェック | 従業員として扱うか |
| 支払条件(購買) | - | 選択 | 購買側(払い戻し側)の支払条件 |
| 債権債務残高 | - | 金額 | 基軸通貨換算の未決済残高 |
レポート詳細タブ(S_TimeExpenseLine)主要項目
Section titled “レポート詳細タブ(S_TimeExpenseLine)主要項目”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 経費報告 | 必須 | 検索 | 親となる経費報告(S_TimeExpense) |
| 明細番号 | 必須 | 整数 | 伝票内の一意な行番号(既定は最大値+10) |
| 作業日付 | 必須 | 日付 | 経費・作業の発生日 |
| 取引先 | - | 検索 | 払い戻し先の取引先 |
| 品目 | - | 検索 | 経費に対応する品目・サービス |
| 数量 | - | 数量 | 立替数量(既定 1) |
| 数量単位 | - | 選択 | 数量の単位 |
| 経費金額 | - | 金額 | 1単位あたりの立替額 |
| 通貨 | - | 選択 | 経費金額の通貨 |
| 換算金額 | - | 金額 | 報告通貨へ換算した金額(自動計算) |
| 請求数量(精算数量) | - | 数量 | 実際に払い戻す数量 |
| 請求価格(精算単価) | - | 単価 | 従業員の購買価格表通貨での精算単価 |
| 時間タイプ | - | 選択 | 作業時間の分類(S_TimeType) |
| 時間単位レポート | 必須 | チェック | ON の場合は時間のみの記録(金額は 0 に強制) |
| 請求済み | 必須 | チェック | 請求・精算処理済みか |
| 仕入請求伝票明細 | - | 検索 | 生成された仕入請求明細への参照 |
| 処理済み | 必須 | チェック | 親伝票が処理済みか |
| プロジェクト | - | 選択 | 原価を配賦するプロジェクト |
顧客請求側との違い
Section titled “顧客請求側との違い”同じ S_TimeExpenseLine を扱いますが、目的が逆方向です。
| 観点 | 経費精算伝票(未請求) | 経費(未払い)(本ページ) |
|---|---|---|
| 相手 | 得意先(顧客) | 従業員・仕入先 |
| 目的 | 立替経費を顧客へ請求する | 立替経費を本人へ払い戻す |
| 主な金額項目 | PriceInvoiced / QtyInvoiced | PriceReimbursed / QtyReimbursed |
| 生成される伝票 | 受注伝票 → 売上請求伝票 | 仕入請求伝票(買掛) |
| 参照カラム | C_OrderLine_ID | C_InvoiceLine_ID |
業務フロー上の位置づけ
Section titled “業務フロー上の位置づけ”graph TD
A["従業員が立替払い"] --> B["経費報告<br/>S_TimeExpense を起票"]
B --> C["経費明細<br/>S_TimeExpenseLine"]
C --> D["経費(未払い)<br/>(本ウィンドウ)で精算内容を確認"]
D --> E["仕入請求伝票の生成"]
E --> F["支払処理<br/>(従業員へ払い戻し)"]
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 対象の従業員が「従業員/仕入先」タブに出てきません
Section titled “Q. 対象の従業員が「従業員/仕入先」タブに出てきません”その人物が取引先マスタに登録されていないか、従業員(IsEmployee)または仕入先(IsVendor)のチェックが入っていない可能性があります。取引先マスタ で該当取引先を開き、区分フラグを確認してください。
Q. 明細を追加しようとすると「ParentComplete」エラーになります
Section titled “Q. 明細を追加しようとすると「ParentComplete」エラーになります”親の経費報告(S_TimeExpense)が処理済み(Processed=Y)です。MTimeExpenseLine.beforeSave() は新規行追加時に親の処理済み判定を行い、処理済みなら保存を拒否します。追加分は新しい経費報告として起票してください。
Q. 「時間単位レポート」の明細が 0 円で表示されます
Section titled “Q. 「時間単位レポート」の明細が 0 円で表示されます”仕様です。IsTimeReport=Y の明細は作業時間のみを記録するもので、beforeSave() により経費金額・換算金額・行合計が強制的に 0 にセットされます。払い戻し対象の実費であればチェックを外してください。
Q. 経費の通貨と精算通貨が異なる場合はどうなりますか?
Section titled “Q. 経費の通貨と精算通貨が異なる場合はどうなりますか?”明細の通貨(C_Currency_ID)と報告通貨(getC_Currency_Report_ID())が異なる場合、beforeSave() が MConversionRate.convert() を呼び、作業日付(DateExpense)時点の為替レートで換算金額(ConvertedAmt)を算出します。該当日のレートが未登録だと換算に失敗するため、為替レートの整備が必要です。
Q. 精算価格を空欄のままにするとどうなりますか?
Section titled “Q. 精算価格を空欄のままにするとどうなりますか?”精算単価が決まらないため、払い戻し金額が意図と異なる可能性があります。PriceReimbursed は従業員の購買(AP)価格表の通貨で入力する項目です。価格表から自動で決めたい場合は、対象取引先に購買価格表を設定しておいてください。
- 経費報告(Expense Report)の使い方
- 経費精算伝票(顧客請求前チェック)の使い方
- 経費タイプの使い方
- 時間タイプの使い方
- 取引先マスタの使い方
- 従業員マスタの使い方
- 画面リファレンス: 経費(未払い)
🛠 技術仕様(開発者向け)
経費(未払い)(AD_Window_ID: 254)は照会・修正型のウィンドウで、親タブに C_BPartner、子タブに S_TimeExpenseLine を持ちます。窓口としては AD_Window_ID 242(経費精算伝票)と対になっており、同じ S_TimeExpenseLine を「仕入請求伝票が未生成」という条件で絞り込みます。ロジックは MTimeExpenseLine クラス(360行)が担当し、親の MTimeExpense(613行)が伝票処理を保持します。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MTimeExpense {
+getLines(boolean) MTimeExpenseLine[]
+getC_Currency_ID() int
}
class MTimeExpenseLine {
+getParent() MTimeExpense
+getQtyReimbursed() BigDecimal
+getPriceReimbursed() BigDecimal
+getApprovalAmt() BigDecimal
+getLaborCost(MAcctSchema) BigDecimal
#beforeSave(boolean) boolean
#afterSave(boolean, boolean) boolean
#afterDelete(boolean) boolean
}
class X_S_TimeExpenseLine {
<<generated>>
}
class PO {
<<abstract>>
}
MTimeExpenseLine --|> X_S_TimeExpenseLine
X_S_TimeExpenseLine --|> PO
MTimeExpense --> MTimeExpenseLine : has many
MTimeExpenseLine --> MResourceAssignment : syncs
MTimeExpenseLine --> MConversionRate : uses
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MTimeExpenseLine.java
関連DBテーブル
Section titled “関連DBテーブル”S_TimeExpense(経費報告ヘッダー・参考)
Section titled “S_TimeExpense(経費報告ヘッダー・参考)”このウィンドウには表示されませんが、明細の親として動作を左右します。
| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| S_TimeExpense_ID | ID | PK | 経費報告ID | 主キー |
| DocumentNo | String | Y | 伝票番号 | |
| C_BPartner_ID | Search | Y | 取引先 | 経費の申請者 |
| DateReport | Date | Y | 報告日付 | 既定 @#Date@ |
| M_PriceList_ID | TableDirect | Y | 価格表 | 精算通貨の基準 |
| M_Warehouse_ID | TableDirect | Y | 倉庫 | |
| DocStatus | List | Y | 伝票状態 | 既定 DR |
| DocAction | Button | Y | 伝票アクション | 既定 CO |
| IsApproved | YesNo | Y | 承認済み | |
| ApprovalAmt | Amount | N | 承認金額 | |
| Processed | YesNo | Y | 処理済み | 明細追加の可否を決定 |
S_TimeExpenseLine(経費明細)精算側の主要カラム
Section titled “S_TimeExpenseLine(経費明細)精算側の主要カラム”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| S_TimeExpenseLine_ID | ID | PK | 経費明細ID | 主キー |
| S_TimeExpense_ID | Search | Y | 経費報告FK | 親伝票 |
| Line | Integer | Y | 明細番号 | 既定 SQL(MAX+10) |
| DateExpense | Date | Y | 作業日付 | 換算レートの基準日 |
| C_BPartner_ID | Search | N | 取引先 | 払い戻し先 |
| M_Product_ID | Search | N | 品目 | callout: CalloutTimeExpense.product |
| Qty | Quantity | N | 数量 | 既定 1 / callout あり |
| ExpenseAmt | Amount | N | 経費金額 | callout: CalloutTimeExpense.amount |
| C_Currency_ID | TableDirect | N | 通貨 | callout: CalloutTimeExpense.amount |
| ConvertedAmt | Amount | N | 換算金額 | beforeSave で自動算出 |
| LineNetAmt | Amount | N | 行合計 | ExpenseAmt × Qty |
| QtyReimbursed | Quantity | N | 精算数量 | 払い戻し数量 |
| PriceReimbursed | Costs+Prices | N | 精算単価 | 従業員 AP 価格表通貨 |
| C_InvoiceLine_ID | Search | N | 仕入請求明細 | 精算後にセットされる |
| IsTimeReport | YesNo | Y | 時間単位レポート | Y なら金額を 0 に強制 |
| IsInvoiced | YesNo | Y | 請求済み | |
| Processed | YesNo | Y | 処理済み | |
| S_ResourceAssignment_ID | Assignment | N | リソースアサイン | callout: CalloutAssignment.product |
erDiagram
C_BPartner ||--o{ S_TimeExpense : "reported by"
S_TimeExpense ||--o{ S_TimeExpenseLine : "lines"
S_TimeExpenseLine }o--o| C_InvoiceLine : "reimbursed via"
S_TimeExpenseLine }o--o| M_Product : "product"
S_TimeExpenseLine }o--o| S_TimeType : "time type"
S_TimeExpenseLine }o--o| C_Project : "cost allocation"
ビジネスロジック
Section titled “ビジネスロジック”beforeSave() の処理
Section titled “beforeSave() の処理”- 親伝票の完了チェック: 新規行かつ親が
Processed=YならParentCompleteエラーで保存中止 - 換算金額の算出: 新規、または
ExpenseAmt/C_Currency_IDが変更された場合に再計算。明細通貨=報告通貨ならExpenseAmtをそのまま、異なる場合はMConversionRate.convert()でDateExpense時点のレートを適用 - 行合計の算出: 新規、または
Qty/ExpenseAmt変更時にLineNetAmt = ExpenseAmt × Qty - 時間レポートのゼロ化:
IsTimeReport=YならExpenseAmt/ConvertedAmt/LineNetAmtをすべてEnv.ZERO
afterSave() / afterDelete() の処理
Section titled “afterSave() / afterDelete() の処理”- どちらも
updateHeader()を呼び、親の経費報告の集計金額を更新します afterSave()はリソースアサイン(S_ResourceAssignment_ID)の差し替えを検知し、旧レコードを削除して新レコードへ数量・説明を同期しますafterDelete()は紐付いていたリソースアサインを削除します
労務原価の取得
Section titled “労務原価の取得”getLaborCost(MAcctSchema as) は、会計スキーマを引数に当該明細の労務原価を返します。プロジェクト原価や会計仕訳の生成側から参照されます。
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”登録済み Callout
Section titled “登録済み Callout”| カラム | Callout クラス |
|---|---|
| ExpenseAmt / Qty / C_Currency_ID | org.compiere.model.CalloutTimeExpense.amount |
| M_Product_ID | org.compiere.model.CalloutTimeExpense.product |
| S_ResourceAssignment_ID | org.compiere.model.CalloutAssignment.product |
OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”精算上限や勘定区分の強制など、社内規程のチェックは Model Validator が適しています。
public class CustomReimbursementValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (po instanceof MTimeExpenseLine) { MTimeExpenseLine line = (MTimeExpenseLine) po; if (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE) { // 例: 1明細あたりの精算上限チェック if (line.getConvertedAmt().compareTo(new BigDecimal("50000")) > 0) { throw new AdempiereException("1明細あたりの精算額が上限を超えています"); } } } return null; }
@Override public String docValidate(PO po, int timing) { return null; // S_TimeExpenseLine は Document 型ではない }}承認フローの追加
Section titled “承認フローの追加”親の S_TimeExpense は DocStatus / DocAction を持つ Document 型テーブルです。金額に応じた多段承認を組む場合は、S_TimeExpense に対してワークフロー(Document Process)を割り当てるか、docValidate() の TIMING_BEFORE_COMPLETE でチェックを追加します。
関連プロセス
Section titled “関連プロセス”| プロセス名 | 説明 |
|---|---|
| 経費からの仕入請求生成 | 未精算の経費明細から買掛側の仕入請求伝票を生成(C_InvoiceLine_ID がセットされる) |
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”立替経費の精算は、上限額・承認段数・勘定科目の割り当てなど社内規程に強く依存する領域です。 Model Validator とワークフローの組み合わせで、コア改変なしに規程どおりの運用を実現できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。