iDempiere 立替経費及び作業時間報告の使い方|取引先管理 操作マニュアル・技術仕様
📖 取引先管理の全体像: 取引先管理の全体図 も合わせてご覧ください。
立替経費及び作業時間報告は、従業員(または外注先)がプロジェクト等に費やした作業時間と立替経費を記録する伝票です。完了した報告の明細は、顧客への再請求(受注・売上請求書)と従業員への立替金精算(仕入請求書)の両方の起点になります。
📌 ポイント: 取引先には「従業員」フラグが有効で、住所と担当者(連絡先)が登録済みの取引先を指定する必要があります。価格表は経費の仕入側(精算額)の初期値を決める「購買価格表」の位置づけです。
立替経費及び作業時間報告でできること
Section titled “立替経費及び作業時間報告でできること”- 従業員ごとの経費明細(金額・通貨・日付)の記録
- 作業時間の記録(時間単位レポート)と請求可否の区分
- 外貨経費の自動換算(価格表通貨への換算金額算出)
- 承認金額の自動集計(明細合計をヘッダに反映)
- プロジェクト・フェーズ・タスク・アクティビティへの紐付け
- リソースアサインとの連動(数量の同期)
- 伝票処理(完了・取消・クローズ)による確定管理
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 立替経費及び作業時間報告 | S_TimeExpense | 約13項目 | ヘッダ(従業員・報告日付・価格表・倉庫・伝票状態) |
| 報告明細 | S_TimeExpenseLine | 約28項目 | 経費・作業時間の明細(品目・数量・金額・プロジェクト等) |
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 メニューから開く<br/>取引先管理 > サービス > 立替経費及び作業時間報告"] --> B["➕ ヘッダを入力<br/>(従業員・報告日付・価格表・倉庫)"]
B --> C["📋 報告明細タブへ移動"]
C --> D{明細の種類}
D -->|立替経費| E["💰 品目(経費タイプ)・<br/>経費金額・通貨を入力"]
D -->|作業時間| F["⏱ 時間単位レポートをチェック<br/>数量(時間)を入力"]
E --> G{顧客に再請求する?}
F --> G
G -->|する| H["✅ 請求済みフラグ+取引先(顧客)<br/>+プロジェクト等を設定"]
G -->|しない| I["💾 明細を保存"]
H --> I
I --> J["⚙️ ヘッダに戻り伝票処理から<br/>「完了」を実行"]
J --> K["🔗 経費精算伝票(再請求)・<br/>経費(未払い)(従業員精算)へ"]
⚠️ 注意: 明細で「請求済み」(顧客再請求)をチェックした場合は、明細の取引先(請求先顧客)が必須です。未設定のまま完了しようとすると「Invoiced, but no Business Partner」エラーになります。
アクセス方法
Section titled “アクセス方法”メニューから「取引先管理 > サービス > 立替経費及び作業時間報告」を開きます。
- ツールバーの「新規」ボタンをクリック
- ヘッダ情報を入力:
- 伝票番号: 自動採番(変更可)
- 取引先: 経費を立て替えた従業員(住所・担当者登録済みであること)
- 報告日付: 経費報告の基準日(デフォルトはログイン日付)
- 価格表: 精算額の初期値を決める購買価格表
- 倉庫: 在庫品目を顧客請求した場合の在庫補正に使用
- 「保存」をクリック
- 「報告明細」タブで明細を登録:
- 作業日付: 経費発生日・作業日(デフォルトは報告日付)
- 品目: 経費タイプに対応する経費品目、または作業のサービス品目
- 数量・経費金額・通貨: 立替額(外貨も入力可能)
- 時間単位レポート: 経費を伴わない作業時間のみの記録の場合にチェック
- 請求済み: 顧客に再請求する場合にチェックし、取引先(顧客)を設定
- プロジェクト/フェーズ/タスク: 原価集計先(任意)
ヘッダの「経費プロセス」(DocAction)ボタンから実行します。
| アクション | 説明 |
|---|---|
| 完了(Complete) | 会計期間・明細有無・請求先設定を検証し、承認金額を確定して伝票を完了 |
| 取消(Void) | 伝票を無効化(内部的にはクローズと同じ処理) |
| クローズ(Close) | 伝票を閉じ、以後の変更を禁止 |
完了時に承認されていない場合は自動で承認(Implicit Approval)されます。完了後は明細の追加ができません。
項目リファレンス(主要項目)
Section titled “項目リファレンス(主要項目)”ヘッダ(立替経費及び作業時間報告タブ)
Section titled “ヘッダ(立替経費及び作業時間報告タブ)”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 伝票番号 | 必須 | 文字列(30) | 伝票の連番 |
| 取引先 | 必須 | 検索 | 従業員(住所・担当者必須) |
| 報告日付 | 必須 | 日付 | 報告の基準日(会計期間チェックに使用) |
| 価格表 | 必須 | 選択 | 精算額の初期値となる購買価格表 |
| 倉庫 | 必須 | 選択 | 在庫補正に使用する倉庫 |
| 承認金額 | 自動 | 金額 | 明細の換算金額×数量の合計(自動集計) |
| 伝票状態 | 自動 | リスト | ドラフト→完了→クローズ |
報告明細タブ
Section titled “報告明細タブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 明細番号 | 必須 | 整数 | 自動採番(既存最大+10) |
| 作業日付 | 必須 | 日付 | 経費発生日(デフォルト: 報告日付) |
| 時間単位レポート | 必須 | チェック | 作業時間のみの記録(金額は0に強制) |
| 請求済み | 必須 | チェック | 顧客への再請求対象 |
| 品目 | - | 検索 | 経費品目・サービス品目 |
| 数量 | - | 数量 | デフォルト1 |
| 経費金額 / 通貨 | - | 金額 | 立替額(外貨可) |
| 換算金額 | 自動 | 金額 | 価格表通貨への換算額 |
| 請求額 | - | 価格 | 再請求単価(0なら顧客の販売価格表を適用) |
| 取引先 | 条件付 | 検索 | 再請求先顧客(請求済み=Y のとき必須) |
| プロジェクト等 | - | 選択 | プロジェクト/フェーズ/タスク/アクティビティ/営業活動 |
全項目一覧はリファレンス参照(正しくは 画面リファレンス: 立替経費及び作業時間報告)
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 完了時に「PeriodClosed」エラーになります
Section titled “Q. 完了時に「PeriodClosed」エラーになります”報告日付の会計期間が、仕入請求書(AP Invoice)の伝票基本タイプに対して開いていません。prepareIt() は報告日付を APInvoice 基準で期間チェックします。カレンダー期間の該当月を開いてから再実行してください。
Q. 明細を入れたのに完了できません(NoLines)
Section titled “Q. 明細を入れたのに完了できません(NoLines)”明細が1件も保存されていない伝票は完了できません。また「請求済み」チェック済みで明細の取引先が空の行があると「Invoiced, but no Business Partner」で完了が拒否されます。
Q. 外貨で立て替えた経費はどう換算されますか?
Section titled “Q. 外貨で立て替えた経費はどう換算されますか?”明細保存時に、経費金額が明細通貨から価格表通貨へ MConversionRate.convert()(作業日付時点のレート)で自動換算され、「換算金額」にセットされます。同一通貨なら経費金額がそのまま入ります。
Q. 時間単位レポートにすると金額が消えるのはなぜですか?
Section titled “Q. 時間単位レポートにすると金額が消えるのはなぜですか?”仕様です。「時間単位レポート」チェック時は、保存時に経費金額・換算金額・明細金額が 0 に強制されます(作業時間のみを記録するため)。
Q. 完了後の報告はどう請求・精算につながりますか?
Section titled “Q. 完了後の報告はどう請求・精算につながりますか?”顧客への再請求は経費精算伝票、従業員への立替金精算は経費(未払い)で未処理明細を確認したうえで処理します。
業務フロー上の位置づけ
Section titled “業務フロー上の位置づけ”graph TD
A[経費タイプ登録] --> B[立替経費及び作業時間報告]
B -->|完了| C{明細の区分}
C -->|請求済み=Y| D[経費精算伝票<br/>顧客へ再請求]
C -->|経費あり| E[経費(未払い)<br/>従業員へ精算]
D --> F[受注伝票 → 売上請求書]
E --> G[仕入請求書 → 支払]
🛠 技術仕様(開発者向け)
立替経費及び作業時間報告は Document 型ウィンドウ(AD_Window_ID: 235)で、ヘッダ S_TimeExpense・明細 S_TimeExpenseLine に格納されます。MTimeExpense クラス(613行)が DocAction を実装し伝票処理を担い、MTimeExpenseLine クラス(360行)が換算・ヘッダ集計・リソースアサイン同期を担います。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MTimeExpense {
+getLines(boolean) MTimeExpenseLine[]
+processIt(String) boolean
+prepareIt() String
+completeIt() String
+voidIt() boolean
+closeIt() boolean
+createPDF() File
}
class MTimeExpenseLine {
+getParent() MTimeExpense
+getApprovalAmt() BigDecimal
+getLaborCost(MAcctSchema) BigDecimal
#beforeSave(boolean) boolean
#afterSave(boolean, boolean) boolean
#afterDelete(boolean) boolean
}
class DocAction {
<<interface>>
}
class X_S_TimeExpense {
<<generated>>
}
MTimeExpense --|> X_S_TimeExpense
MTimeExpense ..|> DocAction
MTimeExpense --> MTimeExpenseLine : has many
MTimeExpenseLine --> MResourceAssignment : sync/delete
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MTimeExpense.java / MTimeExpenseLine.java
関連DBテーブル
Section titled “関連DBテーブル”S_TimeExpense(ヘッダ)
Section titled “S_TimeExpense(ヘッダ)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| S_TimeExpense_ID | ID | PK | 経費報告ID | 主キー |
| DocumentNo | String(30) | Y | 伝票番号 | |
| C_BPartner_ID | Search | Y | 従業員(取引先) | |
| DateReport | Date | Y | 報告日付 | default @#Date@ |
| M_PriceList_ID | TableDirect | Y | 価格表 | 換算先通貨を決定 |
| M_Warehouse_ID | TableDirect | Y | 倉庫 | |
| ApprovalAmt | Amount | N | 承認金額 | 明細から自動集計 |
| DocStatus | List(2) | Y | 伝票状態 | default DR |
| DocAction | Button(2) | Y | 伝票アクション | default CO |
| IsApproved / Processed | YesNo | Y | 承認/処理済み |
S_TimeExpenseLine(明細)
Section titled “S_TimeExpenseLine(明細)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| S_TimeExpenseLine_ID | ID | PK | 明細ID | |
| S_TimeExpense_ID | Search | Y | ヘッダFK | |
| Line | Integer | Y | 明細番号 | default @SQL=SELECT NVL(MAX(Line),0)+10 ... |
| DateExpense | Date | Y | 作業日付 | default @DateExpense@;@DateReport@ |
| IsTimeReport | YesNo | Y | 時間単位レポート | Y なら金額を0に強制 |
| IsInvoiced | YesNo | Y | 再請求対象 | |
| M_Product_ID | Search | N | 品目 | callout CalloutTimeExpense.product |
| S_ResourceAssignment_ID | Assignment | N | リソースアサイン | callout CalloutAssignment.product |
| Qty | Quantity | N | 数量 | default 1、callout CalloutTimeExpense.amount |
| ExpenseAmt | Amount | N | 経費金額 | callout CalloutTimeExpense.amount |
| C_Currency_ID | TableDirect | N | 通貨 | default @$C_Currency_ID@、callout 同上 |
| ConvertedAmt | Amount | N | 換算金額 | beforeSave で自動計算 |
| LineNetAmt | Amount | N | 明細金額 | ExpenseAmt × Qty |
| InvoicePrice / PriceInvoiced | Costs+Prices | N | 請求単価/請求済価格 | 0 なら既定価格 |
| QtyReimbursed / PriceReimbursed | Quantity/Price | N | 精算数量/精算価格 | 経費(未払い)で設定 |
| C_Project_ID ほか | TableDirect | N | プロジェクト/フェーズ/タスク/アクティビティ/営業活動 |
ビジネスロジック
Section titled “ビジネスロジック”prepareIt()(ソース根拠)
Section titled “prepareIt()(ソース根拠)”- 報告日付の会計期間チェック(APInvoice 伝票基本タイプで
MPeriod.isOpen)→ 閉鎖なら@PeriodClosed@ - 明細 0 件なら
@NoLines@で Invalid - 全明細の
getApprovalAmt()を合算しApprovalAmtにセット IsInvoiced=Yかつ明細取引先未設定の行があれば Invalid(“Invoiced, but no Business Partner”)
completeIt()
Section titled “completeIt()”未承認なら approveIt() を暗黙実行(Implicit Approval)→ Processed=Y、DocAction=Close をセットして完了。仕訳(Posting)を伴う会計 Facts はこの伝票自体では生成せず、後続の請求書で計上されます。voidIt() は内部的に closeIt() を呼ぶだけで、反対仕訳は発生しません。
明細の beforeSave() / afterSave()
Section titled “明細の beforeSave() / afterSave()”- 通貨換算: 明細通貨 ≠ 価格表通貨のとき
MConversionRate.convert()(作業日付基準)でConvertedAmtを算出 - 明細金額:
LineNetAmt = ExpenseAmt × Qty - 時間単位レポート:
IsTimeReport=Yなら金額3項目を 0 に強制 - ヘッダ集計: afterSave/afterDelete のたびに
UPDATE S_TimeExpense SET ApprovalAmt = (SELECT SUM(Qty*ConvertedAmt) ...)を直接実行 - リソースアサイン同期: アサイン変更時は旧
S_ResourceAssignmentレコードを削除し、新アサインに数量・説明を同期。明細削除時もアサインを削除 - 親完了チェック: ヘッダが処理済みの伝票へは新規明細を追加不可(
ParentCompleteエラー)
拡張ポイント
Section titled “拡張ポイント”標準 Callout
Section titled “標準 Callout”| カラム | Callout | 動作 |
|---|---|---|
| M_Product_ID | org.compiere.model.CalloutTimeExpense.product | 品目選択時に単価等を補完 |
| Qty / ExpenseAmt / C_Currency_ID | org.compiere.model.CalloutTimeExpense.amount | 金額関連の再計算 |
| S_ResourceAssignment_ID | org.compiere.model.CalloutAssignment.product | アサインから品目を補完 |
Callout 実装は org.adempiere.base.callout プラグインにあります。
OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”伝票検証は docValidate() の TIMING_BEFORE_PREPARE / TIMING_BEFORE_COMPLETE 等で拡張できます(prepareIt()/completeIt() が ModelValidationEngine.fireDocValidate を呼び出します):
@Overridepublic String docValidate(PO po, int timing) { if (po instanceof MTimeExpense && timing == TIMING_BEFORE_COMPLETE) { MTimeExpense te = (MTimeExpense) po; // 例: 承認金額の上限チェック if (te.getApprovalAmt().compareTo(new BigDecimal("100000")) > 0 && !te.isApproved()) return "10万円超の経費報告は事前承認が必要です"; } return null;}関連プロセス
Section titled “関連プロセス”この伝票の後続処理(顧客への受注作成・従業員への仕入請求作成)は、経費精算伝票・経費(未払い)ウィンドウ経由で行います。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”経費報告の承認フロー強化(金額別承認・上長承認)や、外部経費精算システムとの連携は Model Validator と REST API で安全に実現できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。