コンテンツにスキップ

iDempiere 源泉徴収(取引先)の使い方|取引先管理 操作マニュアル・技術仕様

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

源泉徴収(取引先)は、取引先ごとにどの源泉徴収区分を適用するか、源泉徴収が義務付けられているか、一時的に免除されているかを登録するウィンドウです。C_BP_Withholding テーブルが取引先(C_BPartner)と源泉徴収マスタ(C_Withholding)を結ぶ中間テーブルとして機能します。

📌 ポイント: このウィンドウは iDempiere 13 標準では無効化されています(AD_Window_ID: 53104、標準メニュー未登録)。AD 上のタブ説明も「Define Withholding (Beta)」であり、MWithholding クラス(77行)はコンストラクタのみで計算ロジックを持ちません。日本の源泉徴収税の実務運用にそのまま使える機能ではない点にご注意ください。

  • 取引先と源泉徴収区分(C_Withholding)の紐づけ登録
  • 「義務付け源泉徴収」フラグによる源泉徴収必須の明示
  • 「一時免除」フラグによる一時的な源泉徴収停止
  • 「免税理由」(20文字)への免除根拠の記録
  • 1取引先に対する複数の源泉徴収区分の登録
  • 「有効」フラグによる設定の無効化

⚠️ 注意: このウィンドウは取引先ごとの設定を保持するだけです。源泉徴収額の計算・請求書や支払への自動反映は iDempiere 13 標準では実装されていません(後述の技術仕様を参照)。

源泉徴収(取引先)は単一タブの構成です。

タブ名テーブル項目数役割
源泉徴収C_BP_Withholding8項目取引先と源泉徴収区分の紐づけ・義務/免除の設定
graph TD
    A["🚀 ウィンドウを開く<br/>(標準メニュー未登録のため<br/>メニュー追加が必要)"] --> B["🏢 対象の取引先を選択"]
    B --> C["📑 源泉徴収区分を選択<br/>(C_Withholding マスタ)"]
    C --> D{源泉徴収の要否}
    D -->|義務あり| E["☑ 義務付け源泉徴収に<br/>チェック"]
    D -->|一時的に免除| F["☑ 一時免除にチェック<br/>免税理由を入力"]
    E --> G["💾 保存"]
    F --> G

ウィンドウを開く (標準メニュー未登録のため メニュー追加が必要) 対象の取引先を選択 源泉徴収区分を選択 (C_Withholding マスタ) 義務付け源泉徴収に チェック 一時免除にチェック 免税理由を入力 保存 源泉徴収の要否 義務あり 一時的に免除

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

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

iDempiere 13 標準ではメニューに登録されていません。利用する場合は、システム管理者が「システム管理 > 一般ルール > システムルール > メニュー」で AD_Window_ID 53104(Withholding)のメニュー項目を追加し、ロールにウィンドウアクセス権を付与します。

💡 ヒント: 事前に源泉徴収マスタ(C_Withholding)へ区分を登録しておく必要があります。こちらも標準では別ウィンドウでの管理となります。

  1. ツールバーの「新規」ボタンをクリック
  2. 必須項目を入力:
    • 取引先: 対象の 取引先
    • 源泉徴収: 適用する源泉徴収区分(C_Withholding
    • 義務付け源泉徴収: 源泉徴収が必須の場合にチェック
    • 一時免除: 一時的に源泉徴収を行わない場合にチェック
  3. 一時免除にチェックした場合は 免税理由(20文字まで)を入力
  4. 保存」をクリック

📌 ポイント: 「義務付け源泉徴収」「一時免除」はどちらも必須(Yes-No)項目です。チェックを入れない場合は N として保存されます。

項目名必須説明
クライアント必須Table Direct対象クライアント(既定値 @AD_Client_ID@
組織必須Table Direct対象組織(既定値 @AD_Org_ID@
取引先必須Search対象の取引先(C_BPartner
源泉徴収必須Table Direct源泉徴収区分(C_Withholding
義務付け源泉徴収必須チェック源泉徴収が義務付けられている
一時免除必須チェック一時的に源泉徴収を行わない
免税理由-文字列(20)源泉徴収を行わない理由
有効必須チェックレコードが有効かどうか(既定値 Y

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

参照先マスタ(C_Withholding)の主な項目

Section titled “参照先マスタ(C_Withholding)の主な項目”

取引先設定から参照する源泉徴収マスタ側には、次のような条件項目が定義されています。

項目名必須説明
名称必須文字列(60)源泉徴収区分の名称
受取人必須Search源泉徴収額の受取人(納付先)
支払条件必須Table Direct納付に用いる 支払条件
割合源泉徴収必須チェック率で計算するか
パーセント-数値源泉徴収率
固定金額-金額定額の源泉徴収額
最小金額 / 最大金額-金額源泉徴収額の下限・上限
しきい値(最小) / しきい値(最大)-金額源泉徴収を適用する対象金額の範囲
税源泉徴収必須チェック税の源泉徴収かどうか
税按分必須チェック税を按分するか
第三者支払必須チェック第三者へ支払うか

Q. 設定しても請求書に源泉徴収が反映されません

Section titled “Q. 設定しても請求書に源泉徴収が反映されません”

iDempiere 13 標準では、源泉徴収の計算・伝票反映ロジックが実装されていません。C_Withholding のモデルクラス MWithholding は77行でコンストラクタのみ、C_BP_Withholding に至っては M クラス自体が存在せず生成クラス X_C_BP_Withholding(257行)のみです。AD 上でも「Beta」と明記されています。設定値を実際の計算に使うにはカスタム実装が必要です。

Q. 日本の源泉徴収税(報酬・料金等)に使えますか?

Section titled “Q. 日本の源泉徴収税(報酬・料金等)に使えますか?”

そのままでは使えません。上記のとおり計算ロジックが未実装であることに加え、C_Withholding の条件項目も日本の税制(税率区分・復興特別所得税・支払調書)を直接表現するものではありません。実務では OSGi プラグインによる計算ロジックの実装、または 仕入請求書 側での明細分割による運用が現実的です。

Q. 1つの取引先に複数の源泉徴収区分を登録できますか?

Section titled “Q. 1つの取引先に複数の源泉徴収区分を登録できますか?”

できます。C_BP_Withholding は取引先と源泉徴収区分の組み合わせを1レコードとする中間テーブルのため、同じ取引先に対して複数区分を登録できます。ただし標準に「どれを優先するか」の判定ロジックはありません。

Q. 「義務付け源泉徴収」と「一時免除」を両方チェックしたらどうなりますか?

Section titled “Q. 「義務付け源泉徴収」と「一時免除」を両方チェックしたらどうなりますか?”

標準ではバリデーションが無いため、両方 Y でもエラーなく保存されます(C_BP_Withholding には Callout もモデルクラスの beforeSave も定義されていません)。矛盾する組み合わせを防ぎたい場合は Model Validator での実装が必要です。

Q. レコードを削除できますか?

Section titled “Q. レコードを削除できますか?”

C_BP_Withholding は削除可能テーブル(IsDeleteable=Y)です。ただし設定履歴を残したい場合は「有効」チェックを外す運用を推奨します。

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

源泉徴収(取引先)は C_BP_Withholding テーブルに格納される中間テーブルです。専用のビジネスロジッククラス(M クラス)は存在せず、生成クラス X_C_BP_Withholding(257行)のみが提供されます。参照先の源泉徴収マスタ C_Withholding には MWithholding(77行)がありますが、内容は UUID/ID/ResultSet の3コンストラクタのみで、計算・検証ロジックを一切持ちません。

項目
テーブルC_BP_Withholding
ウィンドウAD_Window_ID: 53104(Withholding、iDempiere 13 では無効化・Beta)
モデルクラスX_C_BP_Withholding(生成クラスのみ・257行)
インターフェースI_C_BP_Withholding
参照先マスタC_WithholdingMWithholding 77行 / X_C_Withholding
アクセスレベル3(クライアント+組織)
削除可否可(IsDeleteable=Y
大量データいいえ(IsHighVolume=N
classDiagram
    class X_C_BP_Withholding {
        <<generated>>
        +getC_BPartner_ID() int
        +getC_Withholding_ID() int
        +isMandatoryWithholding() boolean
        +isTemporaryExempt() boolean
        +getExemptReason() String
    }
    class MWithholding {
        +MWithholding(Properties, int, String)
    }
    class X_C_Withholding {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    X_C_BP_Withholding --|> PO
    MWithholding --|> X_C_Withholding
    X_C_Withholding --|> PO
    X_C_BP_Withholding --> X_C_Withholding : C_Withholding_ID
    X_C_BP_Withholding --> C_BPartner : C_BPartner_ID

<> +getC_BPartner_ID() int +getC_Withholding_ID() int +isMandatoryWithholding() boolean +isTemporaryExempt() boolean +getExemptReason() String +MWithholding(Properties, int, String) <> <> > PO MWithholding --

パッケージ: org.compiere.model ソースファイル: org.adempiere.base/src/org/compiere/model/X_C_BP_Withholding.java(参照先は MWithholding.java

C_BP_Withholding(取引先源泉徴収)

Section titled “C_BP_Withholding(取引先源泉徴収)”
カラム名必須説明備考
C_BP_Withholding_UUUUID(36)NUUID
AD_Client_IDTable DirectYクライアント既定値 @AD_Client_ID@
AD_Org_IDTable DirectY組織既定値 @AD_Org_ID@
C_BPartner_IDSearchY取引先C_BPartner 参照
C_Withholding_IDTable DirectY源泉徴収区分C_Withholding 参照
IsMandatoryWithholdingYes-No(1)Y義務付け源泉徴収
IsTemporaryExemptYes-No(1)Y一時免除
ExemptReasonString(20)N免税理由
IsActiveYes-No(1)Y有効既定値 Y
Created / CreatedByDate+Time / SearchY作成日時・作成者既定値 SYSDATE
Updated / UpdatedByDate+Time / SearchY更新日時・更新者既定値 SYSDATE

C_Withholding(源泉徴収マスタ・主要カラム)

Section titled “C_Withholding(源泉徴収マスタ・主要カラム)”
カラム名必須説明
C_Withholding_IDIDPK主キー
NameString(60)Y名称(識別子)
BeneficiarySearchY受取人
C_PaymentTerm_IDTable DirectY支払条件
IsPercentWithholdingYes-NoY率による源泉徴収
PercentNumberN源泉徴収率
FixAmtAmountN固定金額
MinAmt / MaxAmtAmountN源泉徴収額の下限・上限
Thresholdmin / ThresholdMaxAmountN適用対象金額のしきい値
IsTaxWithholdingYes-NoY税の源泉徴収
IsTaxProratedYes-NoY税の按分
IsPaidTo3PartyYes-NoY第三者への支払
erDiagram
    C_BPartner ||--o{ C_BP_Withholding : "withholding settings"
    C_Withholding ||--o{ C_BP_Withholding : "withholding type"
    C_Withholding ||--o| C_PaymentTerm : "payment term"
    C_Withholding ||--o{ C_Withholding_Acct : "accounting"

withholding settings withholding type payment term

C_BP_Withholding には M クラスが存在せず、MWithholdingC_Withholding 用)にもコンストラクタ以外のメソッドがありません。したがって以下はすべて未実装です。

  • 源泉徴収額の計算(率・固定額・しきい値の適用)
  • 請求書・支払伝票への自動反映
  • 「義務付け」「一時免除」の整合性チェック
  • C_Withholding_Acct を用いた会計仕訳の生成

保存時に働くのは基底クラス PO の標準処理(必須チェック・監査カラム更新)のみです。実務で使用する場合はロジック全体をプラグインで実装する前提になります。

このテーブルにはカラム単位の Callout は定義されていません。整合性チェックと計算の双方を OSGi プラグインで補う構成が基本になります。

public class WithholdingValidator implements ModelValidator {
@Override
public String modelChange(PO po, int type) throws Exception {
if (po instanceof X_C_BP_Withholding
&& (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE)) {
X_C_BP_Withholding bpw = (X_C_BP_Withholding) po;
// 例: 一時免除には理由を必須にする
if (bpw.isTemporaryExempt()
&& (bpw.getExemptReason() == null || bpw.getExemptReason().isEmpty()))
throw new AdempiereException("一時免除の場合は免税理由を入力してください");
}
return null;
}
@Override
public String docValidate(PO po, int timing) {
if (po instanceof MInvoice && timing == TIMING_BEFORE_COMPLETE) {
// 例: 請求書完了前に取引先の源泉徴収設定を読み、源泉税明細を生成する
}
return null;
}
}

計算を伝票へ反映させる場合は、C_InvoiceTIMING_BEFORE_COMPLETE で取引先の C_BP_Withholding を読み、C_Withholding の率・しきい値をもとに源泉税行を生成する構成が一般的です。

このウィンドウに紐づく標準プロセス・レポートはありません(標準メニュー未登録)。


源泉徴収はテーブル定義だけが用意された Beta 機能であり、日本の税制に沿った計算・支払調書対応には実装が不可欠です。 As-Link株式会社では、報酬・料金等の源泉徴収を請求・支払フローに組み込む実装をご支援します。

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

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