[gelöst] Datum mit Platzhalter

12. Januar 2010 16:42

Hallo,

ich brauche mal wieder die Hilfe der Profis :-)

Wie kann ich bei einem Datum einen Platzhalter mit anhängen????

Beispiel:

Ich habe mehrere daten mit 12.01.10
12.01.09

Ich möchte jetzt alle die mit 12.01 anfangen und dabei das Jahr nicht berücksichtigen. Gibt es da einen wie den * bei einem String z. B. ???

Danke euch schon mal im Voraus :-)

Grüße Norbert
Zuletzt geändert von _Norbert am 24. Juni 2010 08:55, insgesamt 1-mal geändert.

Re: Datum mit Platzhalter

12. Januar 2010 17:08

_Norbert hat geschrieben:Ich möchte jetzt alle die mit 12.01 anfangen und dabei das Jahr nicht berücksichtigen. Gibt es da einen wie den * bei einem String z. B. ???

Probier es doch aus: Gehe in irgendeine Übersicht, die ein Datumsfeld enthält, und versuche wie beschrieben zu filtern. Geht das?
Habs selbst noch niemals ausprobiert :-)

Re: Datum mit Platzhalter

12. Januar 2010 17:17

Hallo Natalie,

habe ich schon ausprobiert, allerdings habe ich keines gefunden.

Evtl. kennst Du eine andere Lösung.

Ich versuche Daten anzeigen zu lassen, die mit z. B. 12.01. anfangen und das Jahr ignorieren. Habe es über die CodeUnit mit einem Filter gemacht und das Form 0 zum Anzeigen ausgewählt. Kann ich das vielleicht über ein Form machen und den Filter setzen? Kann ich in einem Form mit einer SQL-Anweisung arbeiten? Sorry, bin noch nicht so bewandert in NAV. Komme leider nur alle heilige Zeit zum Proggen :-)

Gruß Norbert

Re: Datum mit Platzhalter

12. Januar 2010 18:22

Da Navision ein 12.01. automatisch mit der Jahreszahl auffüllt, wird das vermutlich nicht klappen.
Vermutlich müsstest du dir eine FOR .. NEXT Schleife machen, die den gewünschten bereich druchläuft und dir für jedes jahr den "Datums-Sting" erstellt.

Eine andere Idee hätte ich sonst auch nicht :wink:

Re: Datum mit Platzhalter

12. Januar 2010 19:06

Hallo Norbert,

du wirst sicherlich noch mit der Jahreszahl noch ein wenig Basteln müssen, aber als Vorschlag zum weiter spinnen.

Code:
Setfilter(Date,'%1.2010|%1.2009|%1.2008|%1.2007',DateText);


Gruß, Fiddi

Re: Datum mit Platzhalter

12. Januar 2010 19:36

Ich lasse mich gern eines Besseren belehren, aber meines Wissens gibt es bei Filtern auf Datumsfeldern keinen Platzhalter. Ich hatte ein ähnliches Problem mal in der Übersicht der Kontakte. Dort wollte man "schnell" eine Übersicht über alle Kontakte bekommen, die in einem bestimmten Monat Geburtstag haben. Gelöst habe ich es über ein selbst "programmiertes" Filterfeld auf der Form. Dazu wurde in der Form eine globale Variable mit dem Namen "MonatFilter" angelegt und auf der Form angezeigt. Im OnValidate-Trigger des Feldes kam dann dieser Code:
Code:
IF (MonatFilter > 0) AND (MonatFilter < 13) THEN BEGIN 
  FINDFIRST;
  REPEAT
    IF DATE2DMY("Birthday Date",2) = MonatFilter THEN
      MARK(TRUE)
    ELSE
      MARK(FALSE);
  UNTIL NEXT = 0;
  MARKEDONLY(TRUE);
END ELSE
  MARKEDONLY(FALSE);


Ok - die Fehlerbehandlung ist nicht der Brüller, aber es sollte ja auch eine "schnelle" Lösung werden :wink:

Re: Datum mit Platzhalter

12. Januar 2010 23:58

Eine allgemeingültige Lösung hierfür fällt mir spontan auch nicht ein.
Sollte diese Form der Filterung jedoch nur auf einer (oder sehr wenigen) Tabelle(n) gewünscht sein, so könnte man das Datumsfeld auch zusätzlich in zwei bzw. drei weitere Felder aufteilen, welche jeweils Tag, Monat und Jahr aufnehmen.

Im OnValidate-Trigger des Datumsfeldes trägst du folgendes ein:
Code:
IF DeinDatumsFeld <> 0D THEN BEGIN
  DeinTagFeld := Date2DMY(DeinDatumsFeld,1);
  DeinMonatFeld := Date2DMY(DeinDatumsFeld,2);
  DeinJahrFeld := Date2DMY(DeinDatumsFeld,3);
END;


Die drei "Einzelfelder" stellst du am besten auf Editable=Nein.

Nun kannst du deinen Filter wie folgt erstellen:
Tag=12
Monat=01

Wie du siehst, musst du für diese Anforderung jedes Datumsfeld, welches du auf diese Art und Weise filtern können möchtest, zusätzlich in zwei bzw. drei Einzelfelder aufteilen und für die entsprechende Befüllung sorgen.
Sofern es sich z. B. nur um das Feld "Geburtstag" der Mitarbeiterkarte handelt, wäre der Aufwand vertretbar, sollte dies jedoch z. B. für alle "Buchungsdatum"-Felder gelten, so wäre es eine Fleißarbeit, wobei selbst dann noch nicht einmal gesichert wäre, dass der OnValidate-Code deines Datumsfeldes ausgeführt würde, da die Buchungsroutinen die Tabellen in der Regel ohne VALIDATE befüllen.

Re: Datum mit Platzhalter

14. Januar 2010 10:08

Hallo,

danke euch für eure schnelle Antwort. Werde die Punkte mal durchgehen:-)

Habe auch mal so "Mitgesponnen" und werde wahrscheinlich den Weg gehen, die Daten in eine Temporäre Tabelle zu schreiben, wo Tag, Monat und Jahr getrennt sind.

Danke euch :-)

Gruß Norbert

Re: [gelöst] Datum mit Platzhalter

17. November 2010 17:36

Hallo,

Ich bin über die Suche auf diesen Beitrag gestossen, habe aber später dann doch einen anderen Entwicklungsansatz gewählt. Ich dachte dieser könnte Anderen evtl. noch weiter helfen, darum gebe ich ihn hier zum besten:

Wir haben ein zusätliches Integer-Feld angelegt und dieses mit den Daten für Monat und Tag wie folgt befüllen lassen (OnValidate & via patch)

FilterAnnualDate := date2dmy(birthday, 2) * 100 + date2dmy(birthday, 1)

für den Report wurden, mit der gleichen logik, zahlen für die von- und bis-Dati erstellt. so konnten wir bequeme setrange-filterungen auf ein Feld auf den Tabellen vornehmen. (Performance freundlich) Ausserdem brauchten wir uns nicht um Schaltjahre zu sorgen und konnten auch mitten im Monat (z.b. für Kalenderwochen) unsere Filterbereiche setzen.

Gruss StLi