Skip to content

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_InvoiceBatch13項目バッチヘッダー(通貨・販売/購買区分・記帳予定金額・処理ボタン)
請求一括作成伝票明細C_InvoiceBatchLine28項目生成される請求明細(取引先・料金・単価・税)

💡 ヒント: ヘッダーの「販売(ON) / 購買(OFF)」(IsSOTrx、既定値は N=購買)で、生成される請求書が売上請求書か仕入請求書かが決まります。経費請求のバッチ入力では既定の購買のまま使用します。

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/>処理済みになる"]

メニューから開く 購買管理 > 請求一括作成伝票 ヘッダーを新規作成 伝票日付・通貨・社内担当者 販売(ON)/購買(OFF) を選択 (既定は購買) 記帳予定金額を入力 (検算する場合) 明細タブで請求行を連続入力 伝票番号・取引先・料金・単価 伝票金額が明細合計と 一致するか確認 ▶ 請求伝票作成ボタンを実行 伝票番号・取引先・住所の 区切りごとに請求書を生成 明細に請求伝票/明細のリンクがセット 処理済みになる

⚠️ 注意: 明細の伝票番号は、選択した伝票タイプの採番設定によって生成時に上書きされる場合があります(タブ説明に明記された仕様)。手入力した伝票番号をそのまま使いたい場合は、伝票タイプの採番設定を確認してください。

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

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

メニューから「購買管理 > 請求一括作成伝票」を開きます。

  1. 新規」ボタンをクリック
  2. ヘッダー必須項目を入力:
    • 伝票番号DocumentNo): バッチの識別番号
    • 伝票日付DateDoc): 既定はログイン日付(@#Date@
    • 販売(ON) / 購買(OFF)IsSOTrx): 既定は購買(N
    • 社内担当者SalesRep_ID
    • 通貨C_Currency_ID): 既定はクライアント通貨
    • 記帳予定金額ControlAmt): 既定 0。0 以外を入れると検算に使用
  3. 必要に応じて 通貨レートタイプC_ConversionType_ID)・説明を入力
  4. 保存」をクリック
  1. 請求一括作成伝票明細」タブに移動
  2. 明細を 1 行ずつ入力:
    • 伝票タイプC_DocType_ID
    • 伝票番号DocumentNo): 同一番号の連続行が 1 枚の請求書になる
    • 取引先 / 取引先住所
    • 請求日付 / 転記日付: 未入力時はヘッダーの伝票日付を継承
    • 料金C_Charge_ID): 必須。経費の勘定を決めます
    • 入力数量QtyEntered、既定 1) / 入力単価PriceEntered
    • 税込IsTaxIncluded) / 税率C_Tax_ID
  3. 行合計LineNetAmt)・税額TaxAmt)・税込行合計LineTotalAmt)が自動計算されることを確認
  4. 必要に応じて プロジェクト・アクティビティ・部門・コストセンター・ユーザー1/2 を設定

💡 ヒント: 明細の取引先・伝票タイプ・伝票番号・税込区分は、前行の値が既定値として引き継がれます(@C_BPartner_ID@@C_DocType_ID@@DocumentNo@@IsTaxIncluded@)。同じ仕入先の複数行を続けて入力する運用に最適化されています。

  1. ヘッダーの 伝票金額DocumentAmt)と 記帳予定金額ControlAmt)を照合
  2. ヘッダーの「請求伝票作成」ボタン(Processing)を実行
  3. 伝票番号・取引先・取引先住所の区切りごとに請求書が生成される
  4. 各明細の「仕入請求伝票」「仕入請求伝票明細」にリンクがセットされ、処理済みになる
項目名必須説明
伝票番号必須文字列バッチの伝票番号
伝票日付必須日付バッチの日付(既定: ログイン日付)
説明-文字列任意の説明
販売(ON) / 購買(OFF)必須チェックON=売上請求書、OFF=仕入請求書(既定 OFF)
社内担当者必須選択担当者
通貨必須選択バッチの通貨
通貨レートタイプ-選択為替換算タイプ
記帳予定金額必須金額0 以外の場合、伝票の借方金額と一致する必要がある(既定 0)
伝票金額必須金額明細の税込行合計の合計(自動更新)
請求伝票作成-ボタン請求書の一括生成処理
処理済み必須チェック処理済みフラグ

請求一括作成伝票明細タブ(主要項目)

Section titled “請求一括作成伝票明細タブ(主要項目)”
項目名必須説明
明細番号必須整数行番号(既定: 最大値+10)
伝票タイプ必須選択生成される請求書の伝票タイプ
伝票番号必須文字列同一番号の行が 1 枚の請求書になる
取引先必須検索仕入先/得意先
取引先住所必須選択請求元/請求先住所
請求日付必須日付既定はヘッダーの伝票日付
転記日付必須日付既定はヘッダーの伝票日付
料金必須検索経費の料金コード
入力数量必須数量既定 1
入力単価必須金額単価(0 は不可)
税込必須チェック単価が税込かどうか
税率必須選択適用税率
行合計必須金額税抜の行金額
税額必須金額明細の税額
税込行合計必須金額税込の行合計
仕入請求伝票-検索生成された請求書へのリンク
仕入請求伝票明細-検索生成された請求明細へのリンク
部門 / コストセンター-選択会計ディメンション
処理済み必須チェック処理済みフラグ

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

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 により両方に対応します)。

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

請求一括作成伝票は C_InvoiceBatch(“Expense Invoice Batch Header”)と C_InvoiceBatchLine(“Expense Invoice Batch Line”)に格納されます。いずれもアクセスレベル 1(組織)です。モデルクラスは MInvoiceBatch(153行)と MInvoiceBatchLine(120行)で、どちらも Document 型(DocAction/DocStatus)ではなく、Processing ボタンによるプロセス実行型です。

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

+getLines(boolean reload) MInvoiceBatchLine[] +setProcessed(boolean) void #beforeSave(boolean) boolean #afterSave(boolean, boolean) boolean <> <> > X_C_InvoiceBatch MInvoiceBatchLine -- > PO X_C_InvoiceBatchLine --

パッケージ: org.compiere.model ソースファイル: org.adempiere.base/src/org/compiere/model/MInvoiceBatch.java / MInvoiceBatchLine.java

C_InvoiceBatch(請求一括作成伝票ヘッダー)

Section titled “C_InvoiceBatch(請求一括作成伝票ヘッダー)”
カラム名必須説明備考
C_InvoiceBatch_IDIDPKバッチID主キー
AD_Client_IDTable DirectYクライアントdefault @#AD_Client_ID@
AD_Org_IDTable DirectY組織default @#AD_Org_ID@
DocumentNoStringY伝票番号
DateDocDateY伝票日付default @#Date@
IsSOTrxYes-NoY販売取引default N(購買)
SalesRep_IDTableY社内担当者
C_Currency_IDTable DirectY通貨default @$C_Currency_ID@
C_ConversionType_IDTable DirectN通貨レートタイプ
ControlAmtAmountY記帳予定金額default 0
DocumentAmtAmountY伝票金額afterSave で自動集計・更新不可
ProcessingButtonN請求伝票作成プロセス起動
ProcessedYes-NoY処理済み
DescriptionStringN説明

C_InvoiceBatchLine(請求一括作成伝票明細・主要カラム)

Section titled “C_InvoiceBatchLine(請求一括作成伝票明細・主要カラム)”
カラム名必須説明備考(default・callout)
C_InvoiceBatchLine_IDIDPK明細ID主キー
C_InvoiceBatch_IDSearchYバッチFK
LineIntegerY明細番号default @SQL=SELECT NVL(MAX(Line),0)+10 ...
C_DocType_IDTable DirectY伝票タイプdefault @C_DocType_ID@ / callout CalloutInvoiceBatch.docType
DocumentNoStringY伝票番号default @DocumentNo@
C_BPartner_IDSearchY取引先default @C_BPartner_ID@ / callout CalloutInvoiceBatch.bPartner
C_BPartner_Location_IDTable DirectY取引先住所default @C_BPartner_Location_ID@ / callout CalloutInvoiceBatch.tax
DateInvoicedDateY請求日付default @DateInvoiced@;@DateDoc@ / callout CalloutInvoiceBatch.date
DateAcctDateY転記日付default @DateAcct@;@DateDoc@
C_Charge_IDSearchY料金callout CalloutInvoiceBatch.charge
QtyEnteredQuantityY入力数量default 1 / callout CalloutInvoiceBatch.amt
PriceEnteredAmountY入力単価callout CalloutInvoiceBatch.amt
IsTaxIncludedYes-NoY税込default @IsTaxIncluded@ / callout CalloutInvoiceBatch.amt
C_Tax_IDTable DirectY税率callout CalloutInvoiceBatch.amt
LineNetAmtAmountY行合計更新不可(計算値)
TaxAmtAmountY税額
LineTotalAmtAmountY税込行合計更新不可(計算値)
C_Invoice_IDSearchN生成された請求伝票
C_InvoiceLine_IDSearchN生成された請求伝票明細
C_Project_ID / C_Activity_ID / AD_OrgTrx_ID-N会計ディメンション
C_Department_ID / C_CostCenter_IDTable DirectN部門 / コストセンター
User1_ID / User2_IDSearchNユーザー定義要素
ProcessedYes-NoY処理済み
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"

expense charge doc type

単価の必須チェックのみを行います。

protected boolean beforeSave (boolean newRecord)
{
// PriceEntered is mandatory
if (getPriceEntered().signum() == 0)
{
log.saveError("FillMandatory", Msg.getElement(getCtx(), "PriceEntered"));
return false;
}
return true;
}

保存成功時に、親バッチの DocumentAmt を SQL で再集計します。

UPDATE C_InvoiceBatch h
SET 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)と突き合わせる際は税込ベースで比較します。

明細タブの定義に「伝票番号・取引先・取引先住所のいずれかが異なると新しい請求書が作成される」と明記されています。生成処理では明細を走査し、この 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"]

請求伝票作成 Processing 明細を順に走査 伝票番号・取引先・住所が 前行と同じ? 同じ請求書に明細追加 新しい C_Invoice を作成 C_Invoice_ID / C_InvoiceLine_ID を 明細にセット Processed = Y

MInvoiceBatchsetProcessed(boolean) をオーバーライドしており、ヘッダーの処理済みフラグ変更を明細側にも波及させます。getLines(boolean reload) で明細を取得できます。

拡張ポイント(カスタマイズ箇所)

Section titled “拡張ポイント(カスタマイズ箇所)”

C_InvoiceBatchLine には org.compiere.model.CalloutInvoiceBatch の Callout が多数設定されています。

カラムCallout役割
C_DocType_IDCalloutInvoiceBatch.docType伝票タイプ選択時の関連値セット
C_BPartner_IDCalloutInvoiceBatch.bPartner取引先選択時の住所・税等のセット
C_BPartner_Location_IDCalloutInvoiceBatch.tax住所変更時の税率再判定
DateInvoicedCalloutInvoiceBatch.date請求日付変更時の関連日付セット
C_Charge_IDCalloutInvoiceBatch.charge料金選択時の税カテゴリ等のセット
QtyEntered / PriceEntered / IsTaxIncluded / C_Tax_IDCalloutInvoiceBatch.amt金額・税額・税込行合計の再計算

金額計算ロジックを変更したい場合は、AD_Column.Callout を独自クラスに差し替えるか、Callout を追記して連結します。

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;
}
}
プロセス名説明
Process Batch(請求伝票作成)バッチ明細から仕入請求伝票/売上請求伝票を一括生成

経費請求のバッチ入力は、CSV 取り込みや請求書 OCR との連携によってさらに省力化できます。 料金コードの自動判定や部門・コストセンターの自動割当も、Callout と Model Validator で実装可能です。

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

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