Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

請求書が [転記済] 状況のときに [ドラフト] 状況の請求書品目をキャンセルまたは転記する

公開日: Sep 27, 2025
説明
特定の条件下では、請求書品目が [ドラフト] 状況のまま請求書が転記される場合があります。この現象が発生すると、注文商品は更新されず、別の請求書を作成することはできません。事実上、注文が止まってしまいます。この状況から復帰する方法とデータの整合性を維持する方法について説明します。

請求書を転記する場合、少なくとも 4 つのオブジェクトを操作します。カスタム入力規則や自動化の組み合わせによってプロセスが完了せずに失敗した場合、請求書が転記され、請求書品目は [ドラフト] 状況のままになる可能性があります。この請求書は現在、キャンセルと再請求が機能しない状態になっており、請求書品目を個別に転記することはできません。請求書品目の状況は関連する注文商品の更新を制御するため、この請求書を修正してから、追加の請求書を注文から作成する必要があります。

Salesforce Billing には検証があり、請求書の状況を転記から変更したり、請求書品目を個別に転記したりできないようにします。これは設計どおりの動作です。 
 
請求書品目が転記されると、注文商品の次の項目が更新されます。
  • 請求書の実行処理状況が [進行中] から [請求待機中] または [完了] に移動する
  • [次の請求日]、[次の課金日]、[Last Charge To Date] (最終請求日) が次の期間で更新される
  • 請求金額 (税抜)、請求待機金額 (税抜)、請求税額、総請求額などの請求メトリクス項目が計算されます。
解決策
データの整合性を維持しながらこの問題を修正する唯一の方法は、[請求書状況] を [転記済] から [ドラフト] に更新し、[請求書転記済] 項目を null に設定して請求トリガーをオフにすることです。これはパッケージ設定で行うことができますが、グローバルな Apex API TriggerControl を使用して、匿名 Apex から CPQ と請求のトリガーを手動で無効にすることをお勧めします。 

以下はそのためのサンプルコードです。サンドボックスで確認してから本番環境で使用してください。 は請求書のレコード ID に置き換えてください。 
List invoice2Update = new list();
for(blng__Invoice__c inv : [SELECT id, blng__InvoiceStatus__c from blng__Invoice__c 
               WHERE id = '' and blng__InvoiceStatus__c = 'Posted' LIMIT 1 ]){

inv.blng__InvoiceStatus__c = 'Draft';
inv.blng__InvoicePostedDate__c = null;
invoice2Update.add(inv);
}
try {
    SBQQ.TriggerControl.disable();
    update invoice2Update;
    SBQQ.TriggerControl.enable();
} catch (DmlException e) {
   System.debug(e);
}

注意:トリガーが無効になっている状態で請求書品目の [状況] 項目を更新しないでください。更新するとデータ整合性の問題が発生し、将来的にその注文商品の請求書品目が不正確になる可能性があります。これに対する例外として、請求書の実行でクリーンアップを使用すると、請求書品目が [ドラフト] から [キャンセル済み] に更新されます。これは、請求書の状況が正常に [キャンセル済み] に変更されている限り有効な変更です。

関連情報
ナレッジ記事番号

000380799

 
読み込み中
Salesforce Help | Article