[gelöst]FORMAT(TODAY) + CURRREPORT.LANGUAGE

13. Juli 2012 13:50

Hallo zusammen,
wieder einmal bin ich auf etwas gestoßen wo mir weder die Forumssuche hier noch Google weiterhelfen konnte:

Ich setze mit CurrReport.Language die Sprache auf Englisch - die Konstanten kommen auch alle treu und brav wie sie sollen.
Zusätzlich gebe ich ein Datum aus: STRSUBSTNO(gctx_0001, ltxt_city, FORMAT(TODAY)). gctx_0001 ist dabei eine globale Konstante die soetwas enthält: '%1, den %2'. ltxt_city ist natürlich eine Ortsbezeichnung - soweit alles gut und funktioniert auch. Leider kommt das Datum immer in Deutsch (24.6.12) statt 12-6-24 oder wenigstens 12.6.24 - egal wie die Sprache vorher gesetzt wurde. Berücksichtigt FORMAT die Sprache des Reports nicht?

Zusatz: Ich meine mich zu erinnern mal eine Tabelle gesehen zu haben wo das Datumsformat abgelegt war wie z. B. '<day>.<month>.<year>'. Erinnert ihr euch zufällig wo? Schlimmstenfalls greif ich dort einfach mit der Sprache rein und übergebe den String dem FORMAT zusätzlich.

Ich hoffe ihr habt eine Erklärung dafür - und vllt auch eine Lösung. Ich mache für heute erst mal Schluss - schönes Wochenende euch allen.
WoF
Zuletzt geändert von WoF am 13. Juli 2012 16:20, insgesamt 1-mal geändert.

Re: FORMAT(TODAY) + CURRREPORT.LANGUAGE

13. Juli 2012 14:10

Hallo WoF,

auf die Gefahr hin das ich mich jetzt furchtbar irre (in diesem Fall möge man mich korrigieren), aber soweit ich weiß wird das Datumsformat (genau wie z.B. Dezimaltrenner) durch die Systemsprache (Regional & Language Settings) vorgegeben und können nicht übersteuert werden. Ich habe dafür mal eine Funktion geschrieben, die aus einem beliebigen Datum mit Übergabe des Sparchcodes einen String erzeugt, der dann auf Reports gedruckt werden kann.

Vielleicht hilft dir die ja:
Code:
TransferDate(pDate : Date;pLanguageCode : Code[20]) : Text[30]
IF ((pDate = 0D) OR (pLanguageCode = '')) THEN
  EXIT(FORMAT(pDate));


// lcArrDate[1] - Day
// lcArrDate[2] - Month
// lcArrDate[3] - Year
FOR i := 1 TO 3 DO BEGIN
  lcArrDate[i] := FORMAT(DATE2DMY(pDate, i));
END;

CASE pLanguageCode OF
  'ENU':
    EXIT(lcArrDate[3] + '/' + lcArrDate[2] + '/' + lcArrDate[1]);
  'DEU':
    EXIT(lcArrDate[1] + '.' + lcArrDate[2] + '.' + lcArrDate[3]);
  ELSE // as default use ENU
    EXIT(lcArrDate[3] + '/' + lcArrDate[2] + '/' + lcArrDate[1]);
END;


Gruß,
Christoph

Re: FORMAT(TODAY) + CURRREPORT.LANGUAGE

13. Juli 2012 14:29

WoF hat geschrieben:Berücksichtigt FORMAT die Sprache des Reports nicht?

Wie bereits gesagt wurde: Nein.

Zusatz: Ich meine mich zu erinnern mal eine Tabelle gesehen zu haben wo das Datumsformat abgelegt war wie z. B. '<day>.<month>.<year>'. Erinnert ihr euch zufällig wo?

Das ist keine Tabelle, sondern ein Teil der FORMAT-Funktion, siehe C/SIDE-Reference Guide: Format Property
Anwendungsbeispiel:
Um dein Datum in der Form 03/04/05 zu schreiben, schreibe:
Code:
USDatumsText := FORMAT(DeinDatum,0,3);

Dies funktioniert aber nur bei lokaler US-Spracheinstellung!
oder
Code:
USDatumsText := FORMAT(DeinDatum,0,'<Closing><Year>/<Month,2>/<Day,2>');

Dies funktioniert dann bei jeder Sprache.

Oder bastle dir ein völlig neues Format zusammen; die Bausteine befinden sich alle dem o.g. Hilfeartikel.

Re: FORMAT(TODAY) + CURRREPORT.LANGUAGE

13. Juli 2012 15:09

WoF hat geschrieben:Ich meine mich zu erinnern mal eine Tabelle gesehen zu haben wo das Datumsformat abgelegt war wie z. B. '<day>.<month>.<year>'.
Eine solche Tabelle habe ich bisher noch nicht gesehen, aber die Idee ist gut.
Ich würde die Tabelle "Language" um ein entsprechendes Feld erweitern, wo der Format-String abgelegt werden kann (vielleicht noch auf der Form ein weiteres Feld, welches das aktuelle Arbeitsdatum entsprechend formatiert darstellt) und eine Funktion, welcher ich Datum und Sprachcode übergebe, und sie mir den formatierten Datumstext zurückliefert.
So kann der Anwender selber für jede beliebige Sprache eine Datumsformatierung festlegen.

Natürlich müsste man an allen Stellen die SourceExpression entsprechend anpassen, aber das müsstest du so oder so.

Re: FORMAT(TODAY) + CURRREPORT.LANGUAGE

13. Juli 2012 15:17

Ach, jetzt kapier ich erst, was mit der Tabelle gemeint war :lol: :oops:

Re: FORMAT(TODAY) + CURRREPORT.LANGUAGE

13. Juli 2012 16:19

Zunächst mal vielen Dank für die Antworten.
Ihr habt alle Recht. Das, woran ich mich erinnert habe war tatsächlich die Online-Doku. Mal sehen ob und wann unsere Sprachtabelle eine Datumsformat-Spalte hat.

Bis zum nächsten Mal
WoF

Re: FORMAT(TODAY) + CURRREPORT.LANGUAGE

17. Juli 2023 08:32

Hallo,
sorry, wenn ich diesen alten Thread noch einmal ausgrabe, aber der passt sehr gut zu einem Problem, mit dem ich mich gerade herumschlage; Mein AG exportiert Werte in eine Excelliste, bei der die Tausendertrennzeichen zwingend Punkte, die Dezimaltrennzeichen zwingend Kommata sein müssen.
Kürzlich hat anscheinend jemand unter dem Benutzer, unter dem auch der entsprechende Job läuft, die Regionaleinstellungen des Servers auf US-Englisch geändert, mit der Folge dass die Werte im Format XXX,XXX,XXX.XX dargestellt wurden.
Jetzt wäre meine Frage, ob man mit dem FORMAT-Befehl und einer Funktion ähnlich der unteren dafür sorgen kann, dass die Werte immer im Format XXX.XXX.XXX,XX in der Excelliste erscheinen, unabhängig vom Regionalformat, welches auf dem Server eingestellt ist.
Die von mir verwendete Version ist BC140, k.A., ob sich da in Bezug auf dieses Thema etwas grundlegen geändert hat.


Christoph hat geschrieben:Hallo WoF,

auf die Gefahr hin das ich mich jetzt furchtbar irre (in diesem Fall möge man mich korrigieren), aber soweit ich weiß wird das Datumsformat (genau wie z.B. Dezimaltrenner) durch die Systemsprache (Regional & Language Settings) vorgegeben und können nicht übersteuert werden. Ich habe dafür mal eine Funktion geschrieben, die aus einem beliebigen Datum mit Übergabe des Sparchcodes einen String erzeugt, der dann auf Reports gedruckt werden kann.

Vielleicht hilft dir die ja:
Code:
TransferDate(pDate : Date;pLanguageCode : Code[20]) : Text[30]
IF ((pDate = 0D) OR (pLanguageCode = '')) THEN
  EXIT(FORMAT(pDate));


// lcArrDate[1] - Day
// lcArrDate[2] - Month
// lcArrDate[3] - Year
FOR i := 1 TO 3 DO BEGIN
  lcArrDate[i] := FORMAT(DATE2DMY(pDate, i));
END;

CASE pLanguageCode OF
  'ENU':
    EXIT(lcArrDate[3] + '/' + lcArrDate[2] + '/' + lcArrDate[1]);
  'DEU':
    EXIT(lcArrDate[1] + '.' + lcArrDate[2] + '.' + lcArrDate[3]);
  ELSE // as default use ENU
    EXIT(lcArrDate[3] + '/' + lcArrDate[2] + '/' + lcArrDate[1]);
END;


Gruß,
Christoph

Re: [gelöst]FORMAT(TODAY) + CURRREPORT.LANGUAGE

17. Juli 2023 08:44

Hallo,

die Antwort ist https://learn.microsoft.com/en-us/dynamics-nav/format-property, bzw. mit dem Admin unerlaubte Dinge zu tun :mrgreen:

"1000Character" und "Comma"

Gruß Fiddi

Re: [gelöst]FORMAT(TODAY) + CURRREPORT.LANGUAGE

19. Juli 2023 11:28

Okay, scheint, als hätte ich es hingekriegt. Danke für den Hinweis.