iDempiere 請求一括作成伝票の使い方|購買管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 購買管理の全体像: 購買管理の全体図 も合わせてご覧ください。
請求一括作成伝票(Invoice Batch)は、複数枚の経費請求書をまとめて 1 画面で入力し、バッチ処理で実際の請求書を一括生成する機能です。1 行ずつ請求書を開いて起票する必要がなく、月次でまとめて届く経費請求(水道光熱費・通信費・各種手数料など)の入力を大幅に効率化できます。
📌 ポイント: 明細は 1 行=1 請求明細ですが、伝票番号・取引先・取引先住所のいずれかが変わると新しい請求書が作られます。同じ請求書にまとめたい明細は、同一の伝票番号・取引先・住所で連続して入力してください。
請求一括作成伝票でできること
Section titled “請求一括作成伝票でできること”- 複数の経費請求書を 1 画面で連続入力
- 買掛(購買)と売掛(販売)の切り替え(
IsSOTrx=「販売(ON) / 購買(OFF)」) - 料金(
C_Charge_ID)ベースの明細入力と税額の自動計算 - 記帳予定金額(
ControlAmt)による入力金額の検算 - 明細合計(
DocumentAmt)の自動集計 - 「請求伝票作成」ボタンによる請求書(
C_Invoice)の一括生成 - 生成された請求伝票・請求伝票明細へのリンク保持
- 部門(
C_Department_ID)・コストセンター(C_CostCenter_ID)等の会計ディメンション付与
請求一括作成伝票は 2 タブ構成です。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 請求一括作成伝票 | C_InvoiceBatch | 13項目 | バッチヘッダー(通貨・販売/購買区分・記帳予定金額・処理ボタン) |
| 請求一括作成伝票明細 | C_InvoiceBatchLine | 28項目 | 生成される請求明細(取引先・料金・単価・税) |
💡 ヒント: ヘッダーの「販売(ON) / 購買(OFF)」(
IsSOTrx、既定値はN=購買)で、生成される請求書が売上請求書か仕入請求書かが決まります。経費請求のバッチ入力では既定の購買のまま使用します。
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 メニューから開く<br/>購買管理 > 請求一括作成伝票"] --> B["➕ ヘッダーを新規作成<br/>伝票日付・通貨・社内担当者"]
B --> C["🔀 販売(ON)/購買(OFF) を選択<br/>(既定は購買)"]
C --> D["🧮 記帳予定金額を入力<br/>(検算する場合)"]
D --> E["📋 明細タブで請求行を連続入力<br/>伝票番号・取引先・料金・単価"]
E --> F["💴 伝票金額が明細合計と<br/>一致するか確認"]
F --> G["▶ 請求伝票作成ボタンを実行"]
G --> H["🧾 伝票番号・取引先・住所の<br/>区切りごとに請求書を生成"]
H --> I["🔗 明細に請求伝票/明細のリンクがセット<br/>処理済みになる"]
⚠️ 注意: 明細の伝票番号は、選択した伝票タイプの採番設定によって生成時に上書きされる場合があります(タブ説明に明記された仕様)。手入力した伝票番号をそのまま使いたい場合は、伝票タイプの採番設定を確認してください。
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”メニューから「購買管理 > 請求一括作成伝票」を開きます。
新規登録(バッチヘッダー)
Section titled “新規登録(バッチヘッダー)”- 「新規」ボタンをクリック
- ヘッダー必須項目を入力:
- 伝票番号(
DocumentNo): バッチの識別番号 - 伝票日付(
DateDoc): 既定はログイン日付(@#Date@) - 販売(ON) / 購買(OFF)(
IsSOTrx): 既定は購買(N) - 社内担当者(
SalesRep_ID) - 通貨(
C_Currency_ID): 既定はクライアント通貨 - 記帳予定金額(
ControlAmt): 既定 0。0 以外を入れると検算に使用
- 伝票番号(
- 必要に応じて 通貨レートタイプ(
C_ConversionType_ID)・説明を入力 - 「保存」をクリック
- 「請求一括作成伝票明細」タブに移動
- 明細を 1 行ずつ入力:
- 伝票タイプ(
C_DocType_ID) - 伝票番号(
DocumentNo): 同一番号の連続行が 1 枚の請求書になる - 取引先 / 取引先住所
- 請求日付 / 転記日付: 未入力時はヘッダーの伝票日付を継承
- 料金(
C_Charge_ID): 必須。経費の勘定を決めます - 入力数量(
QtyEntered、既定 1) / 入力単価(PriceEntered) - 税込(
IsTaxIncluded) / 税率(C_Tax_ID)
- 伝票タイプ(
- 行合計(
LineNetAmt)・税額(TaxAmt)・税込行合計(LineTotalAmt)が自動計算されることを確認 - 必要に応じて プロジェクト・アクティビティ・部門・コストセンター・ユーザー1/2 を設定
💡 ヒント: 明細の取引先・伝票タイプ・伝票番号・税込区分は、前行の値が既定値として引き継がれます(
@C_BPartner_ID@・@C_DocType_ID@・@DocumentNo@・@IsTaxIncluded@)。同じ仕入先の複数行を続けて入力する運用に最適化されています。
請求伝票の一括生成
Section titled “請求伝票の一括生成”- ヘッダーの 伝票金額(
DocumentAmt)と 記帳予定金額(ControlAmt)を照合 - ヘッダーの「請求伝票作成」ボタン(
Processing)を実行 - 伝票番号・取引先・取引先住所の区切りごとに請求書が生成される
- 各明細の「仕入請求伝票」「仕入請求伝票明細」にリンクがセットされ、処理済みになる
項目リファレンス
Section titled “項目リファレンス”請求一括作成伝票タブ
Section titled “請求一括作成伝票タブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 伝票番号 | 必須 | 文字列 | バッチの伝票番号 |
| 伝票日付 | 必須 | 日付 | バッチの日付(既定: ログイン日付) |
| 説明 | - | 文字列 | 任意の説明 |
| 販売(ON) / 購買(OFF) | 必須 | チェック | ON=売上請求書、OFF=仕入請求書(既定 OFF) |
| 社内担当者 | 必須 | 選択 | 担当者 |
| 通貨 | 必須 | 選択 | バッチの通貨 |
| 通貨レートタイプ | - | 選択 | 為替換算タイプ |
| 記帳予定金額 | 必須 | 金額 | 0 以外の場合、伝票の借方金額と一致する必要がある(既定 0) |
| 伝票金額 | 必須 | 金額 | 明細の税込行合計の合計(自動更新) |
| 請求伝票作成 | - | ボタン | 請求書の一括生成処理 |
| 処理済み | 必須 | チェック | 処理済みフラグ |
請求一括作成伝票明細タブ(主要項目)
Section titled “請求一括作成伝票明細タブ(主要項目)”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 明細番号 | 必須 | 整数 | 行番号(既定: 最大値+10) |
| 伝票タイプ | 必須 | 選択 | 生成される請求書の伝票タイプ |
| 伝票番号 | 必須 | 文字列 | 同一番号の行が 1 枚の請求書になる |
| 取引先 | 必須 | 検索 | 仕入先/得意先 |
| 取引先住所 | 必須 | 選択 | 請求元/請求先住所 |
| 請求日付 | 必須 | 日付 | 既定はヘッダーの伝票日付 |
| 転記日付 | 必須 | 日付 | 既定はヘッダーの伝票日付 |
| 料金 | 必須 | 検索 | 経費の料金コード |
| 入力数量 | 必須 | 数量 | 既定 1 |
| 入力単価 | 必須 | 金額 | 単価(0 は不可) |
| 税込 | 必須 | チェック | 単価が税込かどうか |
| 税率 | 必須 | 選択 | 適用税率 |
| 行合計 | 必須 | 金額 | 税抜の行金額 |
| 税額 | 必須 | 金額 | 明細の税額 |
| 税込行合計 | 必須 | 金額 | 税込の行合計 |
| 仕入請求伝票 | - | 検索 | 生成された請求書へのリンク |
| 仕入請求伝票明細 | - | 検索 | 生成された請求明細へのリンク |
| 部門 / コストセンター | - | 選択 | 会計ディメンション |
| 処理済み | 必須 | チェック | 処理済みフラグ |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 「入力単価」を空欄のまま保存できません
Section titled “Q. 「入力単価」を空欄のまま保存できません”MInvoiceBatchLine.beforeSave() が PriceEntered の値をチェックし、符号がゼロ(未入力または 0)の場合に “FillMandatory” エラーで保存を中止します。金額ゼロの行は登録できない仕様です。
Q. 伝票金額(DocumentAmt)はいつ更新されますか?
Section titled “Q. 伝票金額(DocumentAmt)はいつ更新されますか?”明細の保存のたびに MInvoiceBatchLine.afterSave() が実行され、C_InvoiceBatch.DocumentAmt を「有効(IsActive='Y')な明細の税込行合計(LineTotalAmt)の合計」で更新します。明細を非有効化した場合も再計算されます。
Q. 記帳予定金額(ControlAmt)は何のための項目ですか?
Section titled “Q. 記帳予定金額(ControlAmt)は何のための項目ですか?”入力金額の検算用です。項目説明のとおり「0 でない場合、伝票の借方金額はこの金額と一致していなければならない」という制御に用います。請求書の束の合計金額をあらかじめ入れておき、明細入力後に伝票金額と突き合わせる運用が有効です。
Q. 1 枚の請求書に複数行をまとめるには?
Section titled “Q. 1 枚の請求書に複数行をまとめるには?”明細タブの説明にあるとおり、伝票番号・取引先・取引先住所のいずれかが変わると新しい請求書が作成されます。同一請求書にまとめたい行は、これら 3 項目を同じ値にしてください。前行の値が既定値として引き継がれるため、続けて入力するだけで同一請求書になります。
Q. 生成後にバッチを修正できますか?
Section titled “Q. 生成後にバッチを修正できますか?”生成処理が完了すると、明細の「仕入請求伝票」「仕入請求伝票明細」にリンクがセットされ、Processed が立ちます。処理済みのバッチを修正するのではなく、生成された請求書側で修正・取消を行ってください。
Q. 売上請求書の一括作成にも使えますか?
Section titled “Q. 売上請求書の一括作成にも使えますか?”使えます。ヘッダーの「販売(ON) / 購買(OFF)」を ON にすると売上請求書が生成されます(テーブル説明上は経費請求のバッチですが、IsSOTrx により両方に対応します)。
- 仕入請求伝票(Purchase Invoice)の使い方
- 経費請求書(アルファ)の使い方
- 料金(Charge)の使い方
- 伝票タイプ(Document Type)の使い方
- 税率(Tax Rate)の使い方
- 画面リファレンス: 請求一括作成伝票
🛠 技術仕様(開発者向け)
請求一括作成伝票は C_InvoiceBatch(“Expense Invoice Batch Header”)と C_InvoiceBatchLine(“Expense Invoice Batch Line”)に格納されます。いずれもアクセスレベル 1(組織)です。モデルクラスは MInvoiceBatch(153行)と MInvoiceBatchLine(120行)で、どちらも Document 型(DocAction/DocStatus)ではなく、Processing ボタンによるプロセス実行型です。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MInvoiceBatch {
+getLines(boolean reload) MInvoiceBatchLine[]
+setProcessed(boolean) void
}
class MInvoiceBatchLine {
#beforeSave(boolean) boolean
#afterSave(boolean, boolean) boolean
}
class X_C_InvoiceBatch {
<<generated>>
}
class X_C_InvoiceBatchLine {
<<generated>>
}
class PO {
<<abstract>>
}
MInvoiceBatch --|> X_C_InvoiceBatch
MInvoiceBatchLine --|> X_C_InvoiceBatchLine
X_C_InvoiceBatch --|> PO
X_C_InvoiceBatchLine --|> PO
MInvoiceBatch --> MInvoiceBatchLine : has many
MInvoiceBatchLine --> MInvoice : generates
MInvoiceBatchLine --> MInvoiceLine : generates
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MInvoiceBatch.java / MInvoiceBatchLine.java
関連DBテーブル
Section titled “関連DBテーブル”C_InvoiceBatch(請求一括作成伝票ヘッダー)
Section titled “C_InvoiceBatch(請求一括作成伝票ヘッダー)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_InvoiceBatch_ID | ID | PK | バッチID | 主キー |
| AD_Client_ID | Table Direct | Y | クライアント | default @#AD_Client_ID@ |
| AD_Org_ID | Table Direct | Y | 組織 | default @#AD_Org_ID@ |
| DocumentNo | String | Y | 伝票番号 | |
| DateDoc | Date | Y | 伝票日付 | default @#Date@ |
| IsSOTrx | Yes-No | Y | 販売取引 | default N(購買) |
| SalesRep_ID | Table | Y | 社内担当者 | |
| C_Currency_ID | Table Direct | Y | 通貨 | default @$C_Currency_ID@ |
| C_ConversionType_ID | Table Direct | N | 通貨レートタイプ | |
| ControlAmt | Amount | Y | 記帳予定金額 | default 0 |
| DocumentAmt | Amount | Y | 伝票金額 | afterSave で自動集計・更新不可 |
| Processing | Button | N | 請求伝票作成 | プロセス起動 |
| Processed | Yes-No | Y | 処理済み | |
| Description | String | N | 説明 |
C_InvoiceBatchLine(請求一括作成伝票明細・主要カラム)
Section titled “C_InvoiceBatchLine(請求一括作成伝票明細・主要カラム)”| カラム名 | 型 | 必須 | 説明 | 備考(default・callout) |
|---|---|---|---|---|
| C_InvoiceBatchLine_ID | ID | PK | 明細ID | 主キー |
| C_InvoiceBatch_ID | Search | Y | バッチFK | |
| Line | Integer | Y | 明細番号 | default @SQL=SELECT NVL(MAX(Line),0)+10 ... |
| C_DocType_ID | Table Direct | Y | 伝票タイプ | default @C_DocType_ID@ / callout CalloutInvoiceBatch.docType |
| DocumentNo | String | Y | 伝票番号 | default @DocumentNo@ |
| C_BPartner_ID | Search | Y | 取引先 | default @C_BPartner_ID@ / callout CalloutInvoiceBatch.bPartner |
| C_BPartner_Location_ID | Table Direct | Y | 取引先住所 | default @C_BPartner_Location_ID@ / callout CalloutInvoiceBatch.tax |
| DateInvoiced | Date | Y | 請求日付 | default @DateInvoiced@;@DateDoc@ / callout CalloutInvoiceBatch.date |
| DateAcct | Date | Y | 転記日付 | default @DateAcct@;@DateDoc@ |
| C_Charge_ID | Search | Y | 料金 | callout CalloutInvoiceBatch.charge |
| QtyEntered | Quantity | Y | 入力数量 | default 1 / callout CalloutInvoiceBatch.amt |
| PriceEntered | Amount | Y | 入力単価 | callout CalloutInvoiceBatch.amt |
| IsTaxIncluded | Yes-No | Y | 税込 | default @IsTaxIncluded@ / callout CalloutInvoiceBatch.amt |
| C_Tax_ID | Table Direct | Y | 税率 | callout CalloutInvoiceBatch.amt |
| LineNetAmt | Amount | Y | 行合計 | 更新不可(計算値) |
| TaxAmt | Amount | Y | 税額 | |
| LineTotalAmt | Amount | Y | 税込行合計 | 更新不可(計算値) |
| C_Invoice_ID | Search | N | 生成された請求伝票 | |
| C_InvoiceLine_ID | Search | N | 生成された請求伝票明細 | |
| C_Project_ID / C_Activity_ID / AD_OrgTrx_ID | - | N | 会計ディメンション | |
| C_Department_ID / C_CostCenter_ID | Table Direct | N | 部門 / コストセンター | |
| User1_ID / User2_ID | Search | N | ユーザー定義要素 | |
| Processed | Yes-No | Y | 処理済み |
erDiagram
C_InvoiceBatch ||--o{ C_InvoiceBatchLine : "lines"
C_InvoiceBatchLine }o--|| C_BPartner : "partner"
C_InvoiceBatchLine }o--|| C_Charge : "expense charge"
C_InvoiceBatchLine }o--|| C_Tax : "tax"
C_InvoiceBatchLine }o--|| C_DocType : "doc type"
C_InvoiceBatchLine ||--o| C_Invoice : "generates"
C_InvoiceBatchLine ||--o| C_InvoiceLine : "generates"
C_Invoice ||--o{ C_InvoiceLine : "lines"
ビジネスロジック
Section titled “ビジネスロジック”MInvoiceBatchLine.beforeSave()
Section titled “MInvoiceBatchLine.beforeSave()”単価の必須チェックのみを行います。
protected boolean beforeSave (boolean newRecord){ // PriceEntered is mandatory if (getPriceEntered().signum() == 0) { log.saveError("FillMandatory", Msg.getElement(getCtx(), "PriceEntered")); return false; } return true;}MInvoiceBatchLine.afterSave()
Section titled “MInvoiceBatchLine.afterSave()”保存成功時に、親バッチの DocumentAmt を SQL で再集計します。
UPDATE C_InvoiceBatch hSET DocumentAmt = NVL((SELECT SUM(LineTotalAmt) FROM C_InvoiceBatchLine l WHERE h.C_InvoiceBatch_ID = l.C_InvoiceBatch_ID AND l.IsActive = 'Y'), 0)WHERE C_InvoiceBatch_ID = ?📌 ポイント: 集計対象は 有効な明細の税込行合計(
LineTotalAmt) です。税抜のLineNetAmtではないため、記帳予定金額(ControlAmt)と突き合わせる際は税込ベースで比較します。
請求書生成の区切り
Section titled “請求書生成の区切り”明細タブの定義に「伝票番号・取引先・取引先住所のいずれかが異なると新しい請求書が作成される」と明記されています。生成処理では明細を走査し、この 3 項目の変化点で C_Invoice を切り替えます。生成後は各明細の C_Invoice_ID / C_InvoiceLine_ID にリンクが保持されます。
flowchart TD
A["請求伝票作成 Processing"] --> B["明細を順に走査"]
B --> C{"伝票番号・取引先・住所が<br/>前行と同じ?"}
C -->|Yes| D["同じ請求書に明細追加"]
C -->|No| E["新しい C_Invoice を作成"]
E --> D
D --> F["C_Invoice_ID / C_InvoiceLine_ID を<br/>明細にセット"]
F --> G["Processed = Y"]
MInvoiceBatch.setProcessed()
Section titled “MInvoiceBatch.setProcessed()”MInvoiceBatch は setProcessed(boolean) をオーバーライドしており、ヘッダーの処理済みフラグ変更を明細側にも波及させます。getLines(boolean reload) で明細を取得できます。
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”Callout(このテーブル固有)
Section titled “Callout(このテーブル固有)”C_InvoiceBatchLine には org.compiere.model.CalloutInvoiceBatch の Callout が多数設定されています。
| カラム | Callout | 役割 |
|---|---|---|
C_DocType_ID | CalloutInvoiceBatch.docType | 伝票タイプ選択時の関連値セット |
C_BPartner_ID | CalloutInvoiceBatch.bPartner | 取引先選択時の住所・税等のセット |
C_BPartner_Location_ID | CalloutInvoiceBatch.tax | 住所変更時の税率再判定 |
DateInvoiced | CalloutInvoiceBatch.date | 請求日付変更時の関連日付セット |
C_Charge_ID | CalloutInvoiceBatch.charge | 料金選択時の税カテゴリ等のセット |
QtyEntered / PriceEntered / IsTaxIncluded / C_Tax_ID | CalloutInvoiceBatch.amt | 金額・税額・税込行合計の再計算 |
金額計算ロジックを変更したい場合は、AD_Column.Callout を独自クラスに差し替えるか、Callout を追記して連結します。
OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”public class CustomInvoiceBatchValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (po instanceof MInvoiceBatch && type == TYPE_BEFORE_CHANGE) { MInvoiceBatch batch = (MInvoiceBatch) po; // 例: 記帳予定金額と伝票金額の不一致を処理前に検出 if (batch.getControlAmt().signum() != 0 && batch.getControlAmt().compareTo(batch.getDocumentAmt()) != 0) { throw new AdempiereException("記帳予定金額と伝票金額が一致していません"); } } return null; }}関連プロセス
Section titled “関連プロセス”| プロセス名 | 説明 |
|---|---|
| Process Batch(請求伝票作成) | バッチ明細から仕入請求伝票/売上請求伝票を一括生成 |
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”経費請求のバッチ入力は、CSV 取り込みや請求書 OCR との連携によってさらに省力化できます。 料金コードの自動判定や部門・コストセンターの自動割当も、Callout と Model Validator で実装可能です。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。