Einen Bericht in der Sprache des Empfängers erstellen

Abgeschlossen

Neben der Sprache des Benutzers, der den Bericht ausführt, sollten Sie auch die Sprache des Empfängers berücksichtigen. Wenn Sie beispielsweise den Bericht Verkaufsrechnung ausführen, und er nicht in der Sprache des Benutzers generiert werden muss, der den Bericht ausführt, generieren Sie ihn stattdessen in der Sprache der Person (oder des Unternehmens), an die Sie den Bericht senden.

Im Falle des Berichts Verkaufsrechnung und vieler anderer Dokumentberichte handelt es sich bei dieser Sprache wahrscheinlich um die des Debitors, der im Dokument angegeben ist. Diese Sprache kann je nach Debitor unterschiedlich sein. Wenn Sie mehrere Rechnungen gleichzeitig drucken, muss der Bericht daher abhängig von dem Datensatz, der derzeit im Dataset abgerufen wird, die Sprache ändern. Der Bericht muss einen mehrsprachigen Dataset generieren.

Aus diesem Grund können Sie in diesem Fall nicht den Abschnitt IncludeCaption oder Beschriftungen verwenden, da Beschriftungen festgelegt sind und während der Dataset-Generierung nicht geändert werden können. Stattdessen müssen Sie Tabellen‑ und Feldbeschriftungen manuell in das Dataset und dann Beschriftungen als Variablen in das Dataset einfügen.

Diese Technik vergrößert das Dataset, da für jedes Feld, das mehrsprachig sein muss, ein Feld zum Dataset hinzugefügt wird. Das Dataset besteht aus mehreren Spalten, sodass sich dieser Faktor möglicherweise auf die Leistung des Berichts auswirkt.

Im Folgenden sind die verfügbaren Methoden zum Generieren eines mehrsprachigen Datasets aufgeführt:

  • FieldCaption () – Ruft die aktuelle Beschriftung des angegebenen Felds als Zeichenfolge ab

    • Caption :=   Record.FieldCaption(Field: Any);
  • TableCaption() – Ruft die aktuelle Beschriftung einer Tabelle als Zeichenfolge ab

    • Caption :=   Record.TableCaption();

Um eine Beschriftung als Variable zu deklarieren, können Sie die folgende Syntax verwenden:

    var
       a: Label 'Label Text', Comment = 'Foo', MaxLength = 999, Locked = true;

Der Datentyp Label wird in XLF-Dateien für Übersetzungen verwendet.

In der Regel wird in einem Dokumentbericht der folgende Code im Trigger OnAfterGetRecord() in der Header-Tabelle angezeigt:

CurrReport.Language := Language.GetLanguageIdOrDefault("Language Code");

Die Header-Tabelle sollte das Feld Sprachcode beinhalten, das den Sprachcode des Empfängers des Belegs enthält. Mit der Funktion GetLanguageIdOrDefault() wird die Sprach-ID basierend auf ihrem Code abgerufen, oder sie verwendet standardmäßig die aktuelle Benutzersprache.

Mit der Methode CurrReport.Language() wird die aktuelle Spracheinstellung für den Bericht abgerufen oder festgelegt.

Sehen Sie sich das folgende Beispiel eines Berichts an, der eine Debitorenliste generiert. Der Bericht hat die folgende Syntax:

report 50107 CustomerListLangRecReport
{
    UsageCategory = ReportsAndAnalysis;
    ApplicationArea = All;
    Caption = 'Customer List Report Language Recipient';
    AdditionalSearchTerms = 'Customer List Report Language Recipient';
    RDLCLayout = 'CustomerListReportLangRep.rdl';
    WordLayout = 'CustomerListReportLangRep.docx';
    DefaultLayout = RDLC;

    dataset
    {
        dataitem(Customer; Customer)
        {
            column(CustomerNo; "No.")
            {
            }
            column(CustomerNoCptn; fieldcaption("No."))
            {
            }
            column(CustomerName; Name)
            {
            }
            column(CustomerNameCptn; fieldcaption(Name))
            {
            }
            column(CustomerLanguageCode; "Language Code")
            {
            }
            column(CustomerLanguageCodeCptn; fieldcaption("Language Code"))
            {
            }
            column(City; City)
            {
            }
            column(CityCptn; fieldcaption(City))
            {
            }
            column(BalanceLCY; "Balance (LCY)")
            {
            }
            column(BalanceLCYCptn; fieldcaption("Balance (LCY)"))
            {
            }
            trigger OnAfterGetRecord()
            begin
                CurrReport.Language := Language.GetLanguageIdOrDefault("Language Code");
            end;
        }
    }
    var
        Language: Codeunit Language;
        ReportTitle: Label 'Report Title', Comment = 'Foo', MaxLength = 999, Locked = true;
}

Nach dem Abrufen des Debitorendatensatzes aus der Debitorentabelle überprüft der Bericht den Sprachcode des Debitors und verwendet ihn dann zum Festlegen der Sprache des Berichts. Diese Aktion ändert das Ergebnis der Funktion fieldcaption. In die Dataset-Felder wurden separate Spalten für die Beschriftungen hinzugefügt.

Das Layout des Berichts sollte dem folgenden Bild ähneln.

Im Layout des Berichts, im Header, werden Ausdrücke verwendet, um die Cptn-Werte abzurufen. Die Detailzeilen zeigen, dass Sie die normalen Werte abrufen. Um sicherzustellen, dass Sie Debitoren nach Nummern gruppieren können, wurde die Tabelle in einen Listencontainer eingefügt.

Wenn Sie den Bericht ausführen, ähnelt er dem im folgenden Beispiel.