Loading

Stornieren oder Buchen von Rechnungsposten im Status "Entwurf", während die Rechnung den Status "Gebucht" hat

Veröffentlichungsdatum: Sep 27, 2025
Beschreibung
Unter bestimmten Bedingungen kann eine Rechnung gebucht werden, die Rechnungsposten verbleiben jedoch im Status "Entwurf". Wenn dies der Fall ist, werden die Auftragsprodukte nicht aktualisiert und sind nicht zum Erstellen einer weiteren Rechnung verfügbar. Der Auftrag hängt. Erfahren Sie, wie Sie diese Situation beheben und wie Sie die Datenintegrität bewahren können.

Das Buchen einer Rechnung umfasst mindestens vier Objekte. Es ist möglich, dass eine Rechnung gebucht wird und die Rechnungsposten im Status "Entwurf" verbleiben, wenn Kombinationen von benutzerdefinierten Validierungen und/oder Automatisierungen dazu führen, dass der Prozess fehlschlägt und nicht abgeschlossen wird. Diese Rechnung befindet sich jetzt in einem Status, in dem "Stornieren und neu abrechnen" nicht funktioniert, und die Rechnungsposten können nicht separat gebucht werden. Da der Status der Rechnungsposten die Aktualisierung des zugehörigen Auftragsprodukts steuert, muss diese Rechnung korrigiert werden, bevor zusätzliche Rechnungen aus dem Auftrag erstellt werden können.

Beachten Sie, dass Salesforce Billing Validierungen vornimmt, die verhindern, dass der Rechnungsstatus von "Gebucht" geändert wird oder die Rechnungsposten separat gebucht werden. Dies ist so gewollt. 
 
Beim Buchen des Rechnungspostens werden die folgenden Felder im Auftragsprodukt aktualisiert:
  • Der Verarbeitungsstatus des Rechnungslaufs wird von "Wird durchgeführt" zu "Rechnungsstellung ausstehend" oder "Abgeschlossen" geändert.
  • "Nächstes Abrechnungsdatum", "Datum der nächsten Rechnungserstellung" und "Datum zur letzten Abrechnung" werden für den nächsten Zeitraum aktualisiert.
  • Felder mit Abrechnungskennzahlen wie "Berechneter Betrag (ohne Steuern)", "Ausst. Abrechnungsbetrag (ohne Steuern)", "Berechnete Steuern" und "Gesamtabrechnungen" werden berechnet.
Lösung
Die einzige Möglichkeit, dieses Problem zu beheben und dabei die Datenintegrität zu wahren, besteht darin, den Rechnungsstatus von "Gebucht" auf "Entwurf" zu aktualisieren, das Feld "Rechnung gebucht" auf null festzulegen und die Abrechnungsauslöser zu deaktivieren. Dies kann über die Paketeinstellungen erfolgen, sollte aber besser über einen anonymen Apex unter Verwendung der globalen Apex-API TriggerControl erfolgen, um CPQ- und Billing-Auslöser manuell zu deaktivieren.  

Im Folgenden sehen Sie einen Beispielcode für diese Vorgehensweise. Überprüfen Sie den Code in der Sandbox, bevor Sie ihn in der Produktion verwenden. Ersetzen Sie durch die Datensatz-ID der Rechnung. 
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);
}

HINWEIS: Aktualisieren Sie das Feld "Status" für den Rechnungsposten nicht, wenn die Auslöser deaktiviert sind. Dies kann zu Problemen mit der Datenintegrität führen und in Zukunft falsche Rechnungszeilen für dieses Auftragsprodukt zur Folge haben. Eine Ausnahme davon ist die Aktualisierung des Status von Rechnungsposten von "Entwurf" auf "Storniert", nachdem Sie die Bereinigung für einen Rechnungslauf verwendet haben. Dies ist eine gültige Änderung, sofern der Status der Rechnung erfolgreich zu "Storniert" geändert wurde.

SIEHE AUCH
Disable CPQ and Billing triggers in Apex (Deaktivieren von CPQ- und Billing-Auslösern in Apex)
Nummer des Knowledge-Artikels

000380799

 
Laden
Salesforce Help | Article