Query-Abfragen direkt formatieren
By Lars Mäurer on 4. Mai 2023
BeginnerEs ist möglich, mit SQL-Funktionen die Einträge für einen Bericht auch direkt zu formatieren!
Hier geht es eigentlich vordergründig um das Datums-Format und Währungs-Format, die Lösungen sind aber grundsätzlich auch auf andere Daten anwendbar, die formatiert werden sollen.
Hier also das BEISPIEL Nr. 1:
So würde man normalerweise in der SQL-Abfrage das Transaktions-Datum ermitteln und die Spalte "Datum" nennen:
SELECT
`tabPayment Request`.transaction_date AS "Datum",
FROM
`tabPayment Request`
Das Datum wird dann in einem Standard-Format ausgegeben (bei uns hier war es: 2023/12/24) - nicht so schön.
Lösungs-Variante 1:
`tabPayment Request`.transaction_date AS "Datum:Date",
...verwendet also das Date-Format (auch das wird in verschiedenen ERPNExt's sicher verschiedenen aussehen (bei uns hier war es: 24-12-2023, immerhin))
Diese Lösungs-Variante funktioniert auch, um z.B. Währungsangaben so zu formatieren, wie es Standard im System ist, Beispiel:
`tabPayment Request`.grand_total AS "Betrag:Currency",
...verwendet dann also das Currency-Format aus dem System, in unserem Fall "€ x.xxx,xx" (Deutsches Komma!)
Man schreibt also einfach hinter den Doppelpunkt den gewünschten Format-Typ und erhält zumindest eine Formatierung, die erstmal halbwegs funktioniert.
Lösungs-Variante 2 (Supervariante):
SELECT
CONCAT(DAY(`tabPayment Request`.transaction_date),'.',MONTH(`tabPayment Request`.transaction_date),'.',YEAR(`tabPayment Request`.transaction_date)) AS "Datum",
FROM
`tabPayment Request`
Jetzt kann man direkt SQL-Funktionen verwenden, hier im Beispiel:
DAY(); MONTH(); YEAR() - ermittelt den Tag/Monat/Jahr einer Datumsangabe
CONCAT() verknüpft diese 3 Werte dann (mit Punkten dazwischen) zu einem typisch deutschen Datum. Hier sind natürlich kaum Beschränkungen mehr vorhanden, wie man das formatieren will -> Alle Freiheiten. :-)
Lösungsvariante 3 (Schnellvariante):
SELECT
TO_CHAR(`tabPayment Request`.transaction_date, 'DD.MM.YYYY') AS "Datum",
FROM
`tabPayment Request`
Das ist sozusagen die Schnell-Variante, die meist ausreichen sollte. Dies wandelt die Daten in Text um ("TO_CHAR") und formatiert sie in der gewünschten Weise.
Hier also das BEISPIEL Nr. 2:
In diesem Beispiel geht es um eine spezielle Währungsformatierung:
Es soll die korrekte (deutsche) Währungsformatierung erreicht werden, allerdings ohne "€"-Zeichen!
Mit "€"-Zeichen wäre das sehr einfach; siehe oben.
Ohne "€"-Zeichen:
FORMAT(`tabPayment Request`.grand_total, 2, 'de_DE') AS "Betrag",
FORMAT formatiert das Ergebnis der Anfrage, die 2 gibt die Anzahl der Nachkommastellen an (Bei Währung natürlich: 2), und das 'de_DE' kümmert sich um die deutsche Formatierung der Zahl, das bedeutet: Punkte zwischen den 3er-Gruppen.
Beispiel Ergebnis: 123.345,60
Wenn einer eine schönere und/oder mächtigere Variante gefunden hat, gerne her mit den Infos!
Weitere Artikel zum Drucken (Printing)