コンテンツにスキップ

iDempiere 支払条件の使い方|取引先管理 操作マニュアル・技術仕様

📖 取引先管理の全体像: 取引先管理の全体図 も合わせてご覧ください。

支払条件は、取引先との支払期日や割引条件を定義するマスタです。受注伝票・発注伝票・請求書に適用され、支払期日の自動計算や分割払いスケジュールの生成を行います。

📌 ポイント: 支払条件を取引先マスタに設定しておくと、伝票作成時に自動的にセットされます。月末締翌月払いなどの固定日払いも「固定月日締め」フラグで対応できます。

支払条件は取引先マスタにデフォルト値として設定でき、伝票作成時に自動的にセットされます。

  • 支払期日の自動計算(ネット日数ベース)
  • 早期支払割引の設定(割引率・割引日数)
  • 分割払いスケジュールの定義(複数回払い)
  • 月末締め翌月払い等の固定日払い
  • 納品後支払いの設定
  • 受注伝票・請求書への自動適用

支払条件はシンプルな3タブ構成です。

タブ名テーブル項目数役割
支払条件C_PaymentTerm約15項目基本条件(日数・割引・固定月日等)
スケジュールC_PaySchedule約6項目分割払いの各回設定(割合・日数・割引率)
翻訳C_PaymentTerm_Trl約4項目多言語対応の翻訳

💡 ヒント: 分割払いを使用しない場合は「支払条件」タブだけで設定が完了します。スケジュールタブは分割払い(2回払い以上)の場合のみ使用してください。

graph TD
    A["🚀 メニューから開く<br/>取引先管理 > 取引先ルール > 支払条件"] --> B["➕ 新規で基本情報を入力<br/>(検索キー・名前・ネット日数)"]
    B --> C{支払タイプ}
    C -->|シンプルな期日払い| D["📅 ネット日数を設定<br/>(例: 30日後払い)"]
    C -->|早期割引あり| E["💰 割引率・割引日数を設定<br/>(例: 10日以内2%割引)"]
    C -->|固定月日払い| F["📆 固定月日締めにチェック<br/>固定月日・オフセット月数を設定"]
    C -->|分割払い| G["📋 スケジュールタブへ移動<br/>各回の割合・日数を登録"]
    D --> H["💾 保存"]
    E --> H
    F --> H
    G --> I["✅ 検証ボタンで<br/>合計100%を確認"]
    I --> H
    H --> J["🔗 取引先マスタに<br/>デフォルト支払条件として設定"]

メニューから開く 取引先管理 > 取引先ルール > 支払条件 新規で基本情報を入力 (検索キー・名前・ネット日数) ネット日数を設定 (例: 30日後払い) 割引率・割引日数を設定 (例: 10日以内2%割引) 固定月日締めにチェック 固定月日・オフセット月数を設定 スケジュールタブへ移動 各回の割合・日数を登録 保存 検証ボタンで 合計100%を確認 取引先マスタに デフォルト支払条件として設定 支払タイプ シンプルな期日払い 早期割引あり 固定月日払い 分割払い

⚠️ 注意: スケジュールタブで設定した各回の割合の合計が100%でないと「有効」フラグがfalseになり、伝票への適用時にエラーとなります。

メニューから「取引先管理 > 取引先ルール > 支払条件」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. 基本情報を入力:
    • 検索キー: 支払条件コード(例: NET30
    • 名前: 支払条件名(例: 30日後払い
    • ネット日数: 支払期日までの日数(例: 30
    • 割引率(%): 早期支払割引率(例: 2
    • 割引日数: 割引が適用される日数(例: 10
  3. 保存」をクリック
  1. 支払条件タブで基本情報を入力・保存
  2. スケジュール」タブに移動
  3. 各分割回を登録:
    • 割合(%): 各回の支払割合(例: 1回目50%、2回目50%)
    • ネット日数: 各回の支払期日日数
    • 割引率(%): 各回の割引率
  4. 全回の割合合計が**100%**になるよう設定
  5. 支払条件タブに戻り「検証」ボタンで妥当性を確認
項目名必須説明
検索キー必須文字列支払条件の一意コード
名前必須文字列支払条件の名称
ネット日数必須整数支払期日までの日数
割引率(%)-数値早期支払の割引率
割引日数-整数割引が適用される日数
割引日数2-整数第2割引の日数
割引率2(%)-数値第2割引の割引率
固定月日締め-チェック月末等の固定日で締める場合にチェック
固定月日-整数締め日(例: 末日=31、20日=20)
固定月オフセット-整数締め日からの支払月数(例: 翌月=1)
納品後-チェック納品日を起算日とする場合にチェック
有効自動チェックスケジュールの妥当性(合計100%チェック)
デフォルト-チェックデフォルトの支払条件として使用
項目名必須説明
割合(%)必須数値当該回の支払割合
ネット日数必須整数当該回の支払期日日数
割引率(%)-数値当該回の割引率
割引日数-整数当該回の割引日数
有効自動チェックスケジュール全体の妥当性
graph TD
    A[支払条件マスタ] --> B{スケジュールあり?}
    B -->|なし| C[単純な期日計算]
    B -->|あり| D[分割払いスケジュール生成]
    C --> E[請求書に期日セット]
    D --> F[請求書に複数回の支払予定生成]
    E --> G[入出金管理で消込]
    F --> G

スケジュールあり? なし あり 支払条件マスタ 単純な期日計算 分割払いスケジュール生成 請求書に期日セット 請求書に複数回の支払予定生成 入出金管理で消込

支払条件名ネット日数割引率割引日数固定月日備考
即時払い0---現金取引
30日後払い30---基本的な掛売り
2/10 Net 30302%10-10日以内なら2%割引
月末締翌月末---31日、オフセット1固定月日締めを使用
3回分割----スケジュールタブで3回設定

Q. 「有効」フラグがfalseになるのはなぜですか?

Section titled “Q. 「有効」フラグがfalseになるのはなぜですか?”

スケジュールタブに登録した分割払いの割合合計が100%になっていません。各回の割合を見直し、合計が正確に100%になるよう調整してください。支払条件タブの「検証」ボタンで詳細を確認できます。

Q. 月末締め翌月末払いはどう設定しますか?

Section titled “Q. 月末締め翌月末払いはどう設定しますか?”
  1. 「固定月日締め」にチェック
  2. 「固定月日」に31(月末の意味)
  3. 「固定月オフセット」に1(翌月の意味)
  4. ネット日数は0に設定

Q. 支払条件を変更すると既存の伝票に影響しますか?

Section titled “Q. 支払条件を変更すると既存の伝票に影響しますか?”

完了済みの伝票には影響しません。支払条件の変更は、変更後に新規作成または再適用される伝票にのみ反映されます。

「納品後」フラグをチェックすると、支払期日の起算日が伝票日付ではなく納品日(出荷日)になります。納品が完了するまで支払期日が確定しません。

graph TD
    A[支払条件マスタ] --> B[取引先マスタ]
    B --> C[受注伝票]
    B --> D[発注伝票]
    C --> E[売上請求書]
    D --> F[仕入請求書]
    E --> G[支払スケジュール]
    F --> G
    G --> H[入出金管理]

支払条件マスタ 取引先マスタ 受注伝票 発注伝票 売上請求書 仕入請求書 支払スケジュール 入出金管理


iDempiereの支払条件は、単純な期日設定から分割払い・早期割引まで柔軟に対応できます。 取引先ごとの支払条件管理をオープンソースERPで効率化しませんか?

As-Link株式会社では、iDempiereの導入支援・カスタマイズ開発を承っております。

OSS ERP導入サービスの詳細はこちら


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

支払条件は請求書・受注伝票の支払期日と割引条件を定義するマスタで、C_PaymentTerm テーブルに格納されます。MPaymentTerm クラス(445行)が期日計算・割引計算・分割払いスケジュール生成のロジックを担います。

classDiagram
    class MPaymentTerm {
        +validate() String
        +apply(MInvoice) boolean
        +applyOrder(MOrder) boolean
        -applySchedule(MInvoice) boolean
        -applyNoSchedule(MInvoice) boolean
        -applyOrderSchedule(MOrder) boolean
        +getSchedule(boolean) MPaySchedule[]
    }
    class X_C_PaymentTerm {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    MPaymentTerm --|> X_C_PaymentTerm
    X_C_PaymentTerm --|> PO
    MPaymentTerm --> MPaySchedule : has many
    MPaymentTerm --> MInvoicePaySchedule : generates
    MPaymentTerm --> MOrderPaySchedule : generates

+validate() String +apply(MInvoice) boolean +applyOrder(MOrder) boolean -applySchedule(MInvoice) boolean -applyNoSchedule(MInvoice) boolean -applyOrderSchedule(MOrder) boolean +getSchedule(boolean) MPaySchedule[] <> <> > X_C_PaymentTerm X_C_PaymentTerm --

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

カラム名必須説明備考
C_PaymentTerm_IDIDPK支払条件ID主キー
AD_Client_IDTableDirectYクライアント
AD_Org_IDTableDirectY組織
ValueStringY検索キー
NameStringY名称
NetDaysIntegerYネット日数デフォルト0
DiscountNumberY割引率(%)デフォルト0
DiscountDaysIntegerY割引日数
Discount2NumberY割引率2(%)
DiscountDays2IntegerY割引日数2
IsAfterDeliveryYesNoY納品後フラグデフォルトN
IsDueFixedYesNoY固定月日締め
FixMonthDayIntegerN固定月日31=月末
FixMonthOffsetIntegerN固定月オフセット
FixMonthCutoffIntegerN締め日カットオフ
GraceDaysIntegerY猶予日数
IsValidYesNoY有効フラグスケジュール妥当性
IsDefaultYesNoYデフォルト

C_PaySchedule(支払スケジュール定義)

Section titled “C_PaySchedule(支払スケジュール定義)”
カラム名必須説明
C_PaySchedule_IDIDPKスケジュールID
C_PaymentTerm_IDTableDirectY支払条件FK
PercentageNumberY割合(%)
NetDaysIntegerYネット日数
DiscountNumberY割引率
DiscountDaysIntegerY割引日数
IsValidYesNoY有効フラグ
erDiagram
    C_PaymentTerm ||--o{ C_PaySchedule : "defines schedule"
    C_PaymentTerm ||--o{ C_PaymentTerm_Trl : "translations"
    C_PaymentTerm ||--o{ C_BPartner : "default for customer"
    C_PaymentTerm ||--o{ C_Order : "applied to"
    C_PaymentTerm ||--o{ C_Invoice : "applied to"
    C_Invoice ||--o{ C_InvoicePaySchedule : "generated schedule"
    C_Order ||--o{ C_OrderPaySchedule : "generated schedule"

defines schedule default for customer applied to generated schedule

validate() メソッドの処理:

  1. スケジュール(C_PaySchedule)の取得
  2. スケジュールが0件の場合、IsValid=true で正常終了
  3. 全スケジュールの Percentage を合算
  4. 合計が100% でない場合、IsValid=false にセットし差分を返却
flowchart TD
    A[apply MInvoice] --> B{支払方法チェック}
    B -->|掛売/口座振替以外| C[適用なし return false]
    B -->|掛売 or 口座振替| D{総合計 = 0?}
    D -->|Yes| C
    D -->|No| E{IsValid?}
    E -->|No| F[applyNoSchedule]
    E -->|Yes| G{スケジュール件数 > 0?}
    G -->|No| F
    G -->|Yes| H[applySchedule]
    F --> I[既存スケジュール削除]
    H --> J[既存スケジュール削除]
    J --> K[各回のInvoicePaySchedule生成]
    K --> L[端数を最終回に加算]
    L --> M[invoice.validatePaySchedule]

支払方法チェック 総合計 = 0? IsValid? スケジュール件数 > 0? 掛売/口座振替以外 掛売 or 口座振替 apply MInvoice 適用なし return false 既存スケジュール削除 各回のInvoicePaySchedule生成 端数を最終回に加算 invoice.validatePaySchedule

apply(MInvoice): 支払方法が「掛売」または「口座振替」の場合のみ適用。C_InvoicePaySchedule レコードを生成し、各回の支払金額と期日を計算。

applyOrder(MOrder): 受注伝票にも同様のロジックで C_OrderPaySchedule を生成。

期日計算は MPaySchedulegetNextDueDate() で実行されます:

  1. 基準日の決定: 納品後フラグ=Y の場合は出荷日、それ以外は伝票日付
  2. ネット日数の加算: 基準日 + NetDays
  3. 固定月日の適用: IsDueFixed=Y の場合、FixMonthDayFixMonthOffset で月末締め等を計算
  4. 猶予日数の加算: GraceDays を加算

分割払いの場合、各回の金額は GrandTotal * Percentage / 100 で計算されます。丸め誤差は最終回に加算されます:

remainder = GrandTotal - sum(各回のDueAmt)
最終回.DueAmt += remainder

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

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

支払条件に独自の制約を追加する方法:

public class CustomPaymentTermValidator implements ModelValidator {
@Override
public int modelChange(PO po, int type) throws Exception {
if (po instanceof MPaymentTerm) {
MPaymentTerm pt = (MPaymentTerm) po;
if (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE) {
// 例: ネット日数の上限チェック
if (pt.getNetDays() > 180) {
throw new AdempiereException("支払条件のネット日数は180日以内にしてください");
}
}
}
return null;
}
@Override
public String docValidate(PO po, int timing) {
return null; // C_PaymentTermはDocument型ではないため不要
}
}

請求書完了時の支払スケジュール制御

Section titled “請求書完了時の支払スケジュール制御”

請求書の completeIt() 実行時に支払条件が適用されます。カスタムの支払スケジュールロジックを追加する場合は、C_InvoiceTIMING_AFTER_COMPLETEC_InvoicePaySchedule を操作します:

@Override
public String docValidate(PO po, int timing) {
if (po instanceof MInvoice && timing == TIMING_AFTER_COMPLETE) {
MInvoice invoice = (MInvoice) po;
// 例: 特定の取引先は支払期日を強制的に延長
MBPartner bp = new MBPartner(invoice.getCtx(), invoice.getC_BPartner_ID(), invoice.get_TrxName());
if ("VIP".equals(bp.getC_BP_Group().getValue())) {
// C_InvoicePayScheduleの期日を調整
}
}
return null;
}
プロセス名説明
支払スケジュール検証支払条件のスケジュール合計が100%かを検証

iDempiereの支払条件は Model Validator で安全にカスタマイズできます。 独自の期日計算ルールや分割払いロジックなど、コア改変なしで業務要件に合わせた拡張が可能です。

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

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