Zum Inhalt

Fakturatexte

Die Fakturatexte sind über Events erweiterbar.

Achtung

Die nachfolgenden Erweiterungen benötigen mindestens die Version 17.6.

Beispiel: Erweiterung über Codeunit 5250260 "BSSSP LayoutCalculation"

Szenario: Wir wollen einen zusätzlichen Platzhalter für Gruppierungen und Ausgaben vom Typ Leistungsart durchführen. Dieser Platzhalter soll die Kundennummer der Leistung beinhalten.

Über das Event OnGetAvailableDocumentPlaceholders in der Codeunit "BSSSP LayoutCalculation" können wir folgenden Eventsubscriber erstellen, nachfolgend eine beispielhafte Implementierung:

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"BSSSP LayoutCalculation", 'OnGetAvailableDocumentPlaceholders', '', true, false)]
    local procedure OnGetAvailableDocumentPlaceholders(var DocumentLayoutLineBuffer: Record "BSSSP Document Layout Line"; var ReturnText: Text)
    var
        ContentLbl: Label '%%1 = %2\';
    begin
        if DocumentLayoutLineBuffer."Calculation Type" = DocumentLayoutLineBuffer."Calculation Type"::Service then begin
            ReturnText += StrSubstNo(ContentLbl, 'KdNr', 'Kundennummer');
        end;
    end;

Über diese Implementierung sieht der Kunde schonmal den Platzhalter als "Vorschlag", der Platzhalter ist %KdNr mit der Beschreibung "Kundennummer".

Um den Platzhalter nun zu ersetzen, verwenden wir ein weiteres Event, OnGetDocumentText, nachfolgend eine beispielhafte Implementierung:

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"BSSSP LayoutCalculation", 'OnGetDocumentText', '', true, false)]
    local procedure OnGetDocumentTextCustomerNo(var DocumentLayoutLineBuffer: Record "BSSSP Document Layout Line"; SourceRecordVariant: Variant; var ReturnText: Text)
    var
        Service: Record "BSSSP Service";
    begin
        if DocumentLayoutLineBuffer."Calculation Type" = DocumentLayoutLineBuffer."Calculation Type"::Service then begin
            if SourceRecordVariant.IsRecord() then begin
                Service := SourceRecordVariant;

                //Platzhalter suchen und durch Kundennummer in der Leistung ersetzen
                ReturnText := ReturnText.Replace('%KdNr', Service."Sell-to Customer No.");
            end;
        end;
    end;

Wichtig

Der "SourceRecordVariant: Variant" ist immer anhängig von dem aktuellen "Calculation Type" der Zeile, wenn die Ausgabe nach Einsatz erfolgen sollen, steht hier nur der Einsatz zur Verfügung.