iDempiere 請求スケジュールの使い方|取引先管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 取引先管理の全体像: 取引先管理の全体図 も合わせてご覧ください。
請求スケジュールは、複数の出荷をまとめて 1 枚の請求書にする「一括請求(サマリー請求)」の生成頻度と締切日を定義するマスタです。月末締めの合算請求など、出荷の都度ではなく決まったサイクルで請求書を発行したい顧客に対して設定します。
📌 ポイント: 請求スケジュールは作成しただけでは機能しません。取引先マスタ(顧客)に関連付けることで、請求書の一括生成時に「今日がこの顧客の請求日か」「どの出荷までを含めるか」の判定に使われます。
請求スケジュールでできること
Section titled “請求スケジュールでできること”- 請求書生成の頻度定義(日次 / 週次 / 月次 / 月2回)
- 週次請求の生成曜日と締切曜日の指定(偶数週のみの隔週請求も可)
- 月次請求の生成日と締切日の指定(1〜31 日)
- 最小請求金額の設定(下限金額に達するまで請求を保留)
- 顧客ごとの請求サイクルの使い分け(取引先マスタに関連付け)
請求スケジュールは 1 タブのみのシンプルな構成です。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 請求スケジュール | C_InvoiceSchedule | 14項目 | 請求頻度・締切日・最小金額の定義 |
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 メニューから開く<br/>取引先管理 > 取引先管理セットアップ > 請求スケジュール"] --> B["➕ 新規で名称を入力"]
B --> C{請求頻度}
C -->|日次| D["📅 追加設定不要<br/>(毎日が請求対象日)"]
C -->|週次| E["🗓 請求曜日・請求締切曜日を設定<br/>(必要なら偶数週のみ)"]
C -->|月次 / 月2回| F["📆 請求日付・請求締切日付を設定<br/>(1〜31)"]
D --> G["💰 必要に応じて<br/>最小請求金額設定+金額"]
E --> G
F --> G
G --> H["💾 保存"]
H --> I["🔗 取引先マスタ(顧客)に<br/>請求スケジュールとして設定"]
アクセス方法
Section titled “アクセス方法”メニューから「取引先管理 > 取引先管理セットアップ > 請求スケジュール」を開きます。
- ツールバーの「新規」ボタンをクリック
- 基本情報を入力:
- 名称: スケジュール名(例:
月末締め一括請求) - 請求頻度: 日次 / 週次 / 月次 / 月2回 から選択
- 名称: スケジュール名(例:
- 頻度に応じた詳細を入力:
- 週次の場合: 「請求曜日」(生成する曜日)と「請求締切曜日」(対象出荷の最終曜日)
- 月次・月2回の場合: 「請求日付」(生成日、1〜31)と「請求締切日付」(対象出荷の最終日)
- 下限金額を設けたい場合は「最小請求金額設定」にチェックし「金額」を入力
- 「保存」をクリック
- 取引先マスタ(顧客)の請求スケジュール欄に本レコードを設定
💡 ヒント: 「締切日付」と「請求日付」は役割が異なります。締切日付=「どの出荷までを今回の請求に含めるか」、請求日付=「いつ請求書を生成するか」です。例えば「20日締め・25日請求」なら締切日付=20、請求日付=25 とします。
項目リファレンス
Section titled “項目リファレンス”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 名称 | 必須 | 文字列 | スケジュール名(一覧での識別子) |
| 説明 | - | 文字列 | 補足説明 |
| 有効 | 必須 | チェック | レコードの有効/無効 |
| デフォルト | 必須 | チェック | デフォルトのスケジュールとして使用 |
| 請求頻度 | 必須 | リスト | 日次(D) / 週次(W) / 月次(M) / 月2回(T) |
| 請求曜日 | 必須 | リスト | 週次: 請求書を生成する曜日 |
| 請求締切曜日 | - | リスト | 週次: 対象出荷を含める最終曜日 |
| 偶数週の請求書 | - | チェック | 週次: 偶数週のみ請求(隔週請求) |
| 請求日付 | 必須 | 整数 | 月次: 請求書の生成日(1〜31、初期値1) |
| 請求締切日付 | - | 整数 | 月次: 対象出荷を含める最終日(1〜31) |
| 最小請求金額設定 | 必須 | チェック | 下限金額を超えた場合のみ請求 |
| 金額 | 必須 | 金額 | 最小請求金額の下限値 |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 請求スケジュールを設定したのに請求書がまとまりません
Section titled “Q. 請求スケジュールを設定したのに請求書がまとまりません”請求スケジュールはマスタ単体では動作しません。取引先マスタ(顧客)に本スケジュールが関連付けられているか、また顧客の請求ルールが一括請求の対象になっているかを確認してください。設定は 取引先マスタ の「顧客」タブで行います。
Q. 「金額」はいつ使われますか?
Section titled “Q. 「金額」はいつ使われますか?”「最小請求金額設定」にチェックした場合の下限金額です。未請求額がこの金額を超えるまで請求書の生成を保留する動きになります。なお金額判定付きの判定メソッド canInvoice(日付, 受注金額) は iDempiere 13 で非推奨(削除予定)となっており、「請求額は受注ではなく出荷実績から計算すべき」という理由がソースコードに明記されています。金額下限に依存した運用設計は避けることを推奨します。
Q. 「月2回」を選ぶと 15 日ずらした 2 回目が生成されますか?
Section titled “Q. 「月2回」を選ぶと 15 日ずらした 2 回目が生成されますか?”iDempiere 13 のソースコード上、月2回(TwiceMonthly)は月次と同じ判定分岐で処理され、「請求日付+15日」を判定する後続ブロックには到達しない実装になっています(MInvoiceSchedule.canInvoice())。月2回の請求サイクルを厳密に運用したい場合は、テスト環境での動作確認を強く推奨します。
Q. 月末締めにしたい場合、請求締切日付はいくつにしますか?
Section titled “Q. 月末締めにしたい場合、請求締切日付はいくつにしますか?”31 を設定します。判定はカレンダー日付ベースで行われるため、31 日が存在しない月でも月末側に寄せて扱われます。運用開始前に 2 月・30 日までの月で意図どおりに生成されるか確認してください。
🛠 技術仕様(開発者向け)
請求スケジュールは C_InvoiceSchedule テーブル(アクセスレベル 3 = クライアント+組織)に格納されるマスタです。モデルクラスは MInvoiceSchedule(297行)で、ImmutablePOSupport を実装しておりキャッシュ経由の高速参照(MInvoiceSchedule.get())が可能です。Document 型ではないため伝票処理(DocAction)はありません。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MInvoiceSchedule {
+get(C_InvoiceSchedule_ID) MInvoiceSchedule
+canInvoice(Timestamp) boolean
+canInvoice(Timestamp, BigDecimal) boolean
-getCalendarDay(String) int
+markImmutable() MInvoiceSchedule
}
class X_C_InvoiceSchedule {
<<generated>>
}
class PO {
<<abstract>>
}
class ImmutablePOSupport {
<<interface>>
}
MInvoiceSchedule --|> X_C_InvoiceSchedule
X_C_InvoiceSchedule --|> PO
MInvoiceSchedule ..|> ImmutablePOSupport
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MInvoiceSchedule.java
関連DBテーブル
Section titled “関連DBテーブル”C_InvoiceSchedule(請求スケジュール)
Section titled “C_InvoiceSchedule(請求スケジュール)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_InvoiceSchedule_ID | ID | PK | 請求スケジュールID | 主キー |
| AD_Client_ID | TableDirect | Y | クライアント | default @#AD_Client_ID@ |
| AD_Org_ID | TableDirect | Y | 組織 | default @#AD_Org_ID@ |
| Name | String(60) | Y | 名称 | 識別子(Identifier) |
| Description | String(255) | N | 説明 | |
| IsActive | YesNo | Y | 有効 | default Y |
| IsDefault | YesNo | Y | デフォルト | |
| InvoiceFrequency | List(1) | Y | 請求頻度 | D=日次 / W=週次 / M=月次 / T=月2回 |
| InvoiceWeekDay | List(1) | Y | 請求曜日 | 1=月 〜 7=日 |
| InvoiceWeekDayCutoff | List(1) | N | 請求締切曜日 | |
| EvenInvoiceWeek | YesNo | N | 偶数週の請求書 | |
| InvoiceDay | Integer | Y | 請求日付 | default 1、範囲 1〜31 |
| InvoiceDayCutoff | Integer | N | 請求締切日付 | default 1、範囲 1〜31 |
| IsAmount | YesNo | Y | 最小請求金額設定 | |
| Amt | Amount | Y | 金額(下限) |
コールアウトは設定されていません(callout 列はすべて未設定)。
ビジネスロジック
Section titled “ビジネスロジック”canInvoice(Timestamp) — 請求可否判定
Section titled “canInvoice(Timestamp) — 請求可否判定”指定日付の出荷が「今回の請求対象か」を判定します:
- 日次(D): 常に
true - 週次(W): 今日を基準に「請求締切曜日」「請求曜日」を直近の過去日に補正し、対象日付がその両方以前であれば
true - 月次(M)・月2回(T):
InvoiceDayCutoffが設定されていれば締切日超過を先に判定し、次にInvoiceDayベースで判定 - 注意: 月2回(T) は月次と同じ
if分岐(Monthly || TwiceMonthly)内で return するため、後続の「+15日」判定ブロック(Bi-Monthly)は到達不能コードになっています(13時点の実装)
canInvoice(Timestamp, BigDecimal) — 非推奨
Section titled “canInvoice(Timestamp, BigDecimal) — 非推奨”@Deprecated(since="13", forRemoval=true)。IsAmount=Y かつ受注金額が Amt 以上なら即 true を返す判定ですが、「請求額は出荷実績から計算すべきで、受注金額での判定は妥当でない」との理由で削除予定です。
キャッシュ(ImmutablePOSupport)
Section titled “キャッシュ(ImmutablePOSupport)”MInvoiceSchedule.get(C_InvoiceSchedule_ID) はイミュータブルなキャッシュ済みインスタンスを返します。一括請求処理のように同一スケジュールを繰り返し参照する場面では、コンストラクタ生成ではなく get() を使用してください。
拡張ポイント
Section titled “拡張ポイント”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”public class InvoiceScheduleValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (po instanceof MInvoiceSchedule && (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE)) { MInvoiceSchedule sched = (MInvoiceSchedule) po; // 例: 月次スケジュールでは締切日付の設定を必須にする if (MInvoiceSchedule.INVOICEFREQUENCY_Monthly.equals(sched.getInvoiceFrequency()) && sched.getInvoiceDayCutoff() <= 0) { throw new AdempiereException("月次請求では請求締切日付を設定してください"); } } return null; }}このテーブルに標準の Callout はないため、画面側の動的制御を追加する場合も IColumnCallout の新規実装で安全に拡張できます。
関連プロセス
Section titled “関連プロセス”請求スケジュールは、顧客への請求書を一括生成する処理から canInvoice() 経由で参照されます(ウィンドウ定義の説明にある「summary invoices の生成」用途)。このウィンドウ自身にボタン起動のプロセスはありません。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”請求スケジュールの判定ロジックは Model Validator や独自プロセスでコア改変なしに拡張できます。日本の商習慣(20日締め・月末締め等)に合わせた一括請求の設計もご相談ください。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。