Regionsspezifische Ausgabeformate
Dieses Skript zeigt, wie abhängig von einem Feldinhalt die Formatierung (Dezimaltrennzeichen, Tausender-Separator, Datumsformat) auf eine andere Region umgestellt werden kann - z.B. von deutscher auf Schweizer Formatierung.
Anwendungsfall
Ein Unternehmen mit Sitz in Deutschland hat eine Schweizer Tochtergesellschaft. Belege für die Schweizer Gesellschaft sollen mit Schweizer Formatierung ausgegeben werden (Dezimalpunkt statt Komma, Hochkomma als Tausender-Separator), obwohl das System auf Deutsch eingestellt ist.
Konfiguration in PRINT+PLUS
- Exporter-Typ: Dokument-Exporter (Word, Excel, Text)
- Es werden zwei Skripte benötigt:
- Skript 1 im Event
AfterLoadData: stellt die Sprache/Region um - Skript 2 im Event
AfterClosingDocument: setzt die Sprache wieder zurück
- Skript 1 im Event
Funktionsprinzip
Die .NET-Runtime verwendet die Thread.CurrentThread.CurrentCulture für die Formatierung von Zahlen und Daten. Wird diese vor der Dokumenterstellung umgestellt, formatiert PRINT+PLUS alle Werte automatisch gemäß der neuen Region.
Wichtig: Nach der Dokumenterstellung muss die Kultur wieder zurückgesetzt werden, damit andere Ausgaben nicht beeinflusst werden.
Skript 1: Sprache setzen
Event: AfterLoadData
// Version 6
namespace Ruthardt.PrintPlus.Skripting
{
using System;
using System.Globalization;
using System.Threading;
using Ruthardt.CobraBase.Functions.Access.Ado;
using Ruthardt.PrintPlus.Model.Interfaces;
public class SpracheSetzen : IScriptAction
{
public void Execute(IPrintContext printContext, ICurrentContext currentContext, IChildContext childContext)
{
// Prüfen ob der Datensatz zur Schweizer Gesellschaft gehört
var mandant = currentContext.Data.GetStringValue("Mandant");
// Firmenname entsprechend anpassen
if (mandant.Equals("<Name der Firma>", StringComparison.OrdinalIgnoreCase))
{
// Auf Schweizer Formatierung umstellen (Dezimalpunkt, Hochkomma als Tausender)
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("de-CH");
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("de-CH");
}
}
}
}
Skript 2: Sprache zurücksetzen
Event: AfterClosingDocument
// Version 6
namespace Ruthardt.PrintPlus.Skripting
{
using System.Globalization;
using System.Threading;
using Ruthardt.CobraBase.Functions.Access.Ado;
using Ruthardt.PrintPlus.Model.Interfaces;
public class SpracheReset : IScriptAction
{
public void Execute(IPrintContext printContext, ICurrentContext currentContext, IChildContext childContext)
{
// Zurück auf deutsche Formatierung
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("de-DE");
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("de-DE");
}
}
}
Auswirkung auf die Formatierung
| Wert | de-DE (Deutschland) | de-CH (Schweiz) | fr-FR (Frankreich) |
|---|---|---|---|
| 1234.50 | 1.234,50 | 1'234.50 | 1 234,50 |
| Datum | 15.07.2026 | 15.07.2026 | 15/07/2026 |
Erklärung
- Skript 1 (
AfterLoadData): Wird pro Datensatz aufgerufen, bevor das Dokument erstellt wird. Je nach Feldwert (hier: „Mandant") wird die Thread-Kultur umgestellt. Alle nachfolgenden Formatierungen im Dokument verwenden automatisch die neue Region. - Skript 2 (
AfterClosingDocument): Setzt die Kultur wieder auf den Standard zurück, nachdem das Dokument fertig ist. So werden nachfolgende Datensätze (die evtl. einem anderen Mandanten gehören) wieder korrekt formatiert.
Variante: Kultur aus der Adresse ableiten
// Land der Adresse bestimmt die Formatierung
var land = currentContext.ParentDataByPrefix["Adresse"].GetStringValue("Land");
var kultur = land switch
{
"Schweiz" or "CH" => "de-CH",
"Österreich" or "AT" => "de-AT",
"France" or "FR" => "fr-FR",
_ => "de-DE"
};
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(kultur);
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(kultur);
Hinweise
Immer zurücksetzen: Vergessen Sie nie das Reset-Skript. Ohne Zurücksetzen bleibt die geänderte Kultur für alle nachfolgenden Datensätze im selben Export aktiv.
Verfügbare Kulturen: Eine vollständige Liste aller Kultur-Codes finden Sie in der Microsoft-Dokumentation.
Nur Formatierung: Die Kultur beeinflusst nur die Zahlen-/Datumsformatierung. Der Vorlagentext selbst (Sprache der Textbausteine) muss separat gehandhabt werden, z.B. über bedingte Vorlagen.
Keine Kommentare vorhanden
Keine Kommentare vorhanden