![]() |
Frage zu EncodeDateWeek
Hallo,
versuche gerade folgendes: 1. Datum der letzten Lieferung liegt vor, zB 13.07.2009 2. Es gibt ein Enddatum (per Eingabe) zB. 29.07.2009 3. Es gibt ein Intervall zB 1 (dh jede Woche liefern oder 2 für alle 2 Wochen usw) Es sollen mir alle Tagen ausgegeben werden, die hier zutreffen, dh: 20.07.2009 27.07.2009 Mein Versuch bis jetzt: 1. Mit Kalenderwoche_ermitteln(LSLIEFERDATE.Value) bekomme ich die Kalenderwoche der letzten Lieferung 2. Mit Kalenderwoche_ermitteln(LSLIEFERDATE.Value) + AUTOINTERVALL.Value die Kalenderwoche der nächsten Lieferung Jetzt möchte ich schauen ob der Montag in der neuen Kalenderwoche noch <=Enddatum ist, bevor ich diese Tage auswerten kann: EncodeDateWeek(YearOf(LSLIEFERDATE.Value),Kalender woche_ermitteln(LSLIEFERDATE.Value) + AUTOINTERVALL.Value,1); Was ich nicht verstehe, die Function EncodeDateWeek benötigt vorne eine Jahreseingabe (bei mir im Moment Jahr aus dem Datum der letzten Lieferung). Was ist wenn das Jahr zB (wie aktuell) 2009 ist, aber nach dieser Formel der Montag in 2010 kommt??? Gibt es eine Fehlermeldung und ich muss das Jahr erhöhen oder wie?? Viele Grüsse Andreas Bremer PS. Einfach zu dem Datum der letzten Lieferung 7 addieren (mit Schleife) geht nicht, manche Kunden werden mehrmals in der Woche automatisch beliefert |
Re: Frage zu EncodeDateWeek
Ich verstehe die Schleifen-Bemerkung nicht wirklich. Die folgende Funktion ist aber kompatibel und berücksichtigt den Jahreswechsel (schon fast) korrekt (LSLIEFERDATE.Value darf nicht z.B. 2.1.2010 sein, denn das ist KW53/2009 - aber wer liefert da schon was? :) ).
Delphi-Quellcode:
Ich würde die folgende Variante bevorzugen
//Ergibt Montag in <AUTOINTERVALL.Value>-Wochen
NaechsterMontag := EncodeDateWeek(YearOf(LSLIEFERDATE.Value), Kalenderwoche_ermitteln(LSLIEFERDATE.Value),1) + AUTOINTERVALL.Value*7;
Delphi-Quellcode:
P.S. Vielleicht hätte ich mich noch zur Frage äußern sollen? Ja, es gibt eine Fehlermeldung (denn KW 60 gibt es im Jahr 2009 nicht (2010 übrigens auch nicht :) )
//Datum des Wochenanfangs der letzten Lieferung + <AUTOINTERVALL.Value>-Wochen
NaechsterMontag := LSLIEFERDATE.Value - DayOfTheWeek(LSLIEFERDATE.Value) + AUTOINTERVALL.Value*7 + 1; |
Re: Frage zu EncodeDateWeek
Danke für deine Hilfe.
Bin noch blutiger Anfänger mit viel Talent alles zu kompliziert zu machen :) Verstehe diese Formel aber nicht ganz: //Datum des Wochenanfangs der letzten Lieferung + <AUTOINTERVALL.Value>-Wochen NaechsterMontag := LSLIEFERDATE.Value - DayOfTheWeek(LSLIEFERDATE.Value) + AUTOINTERVALL.Value*7 + 1; Wenn ich meine Werte jetzt reinstelle: NaechsterMontag := 13.07.2009 - 1 + 1 * 7 + 1; Habs ausprobiert, Delphi gibt hier: 27.07.2009 aus, müßte aber den 20.07.2009 ausgeben |
Re: Frage zu EncodeDateWeek
Zitat:
|
Re: Frage zu EncodeDateWeek
Hi,
ich verstehe grad nicht ganz, warum das so kompliziert über KW gerechnet wird. Mein Vorschlag, in welchem auch Jahreswechsel und 53.KW furzegal sein sollten ;): [EDIT] DU willst den Montag prüfen, daher ein wenig umgebaut^^
Delphi-Quellcode:
Grußfunction GetLieferzeitpunkte(dtLetzteLieferung, dtEnde: TDateTime): String; var dtPruef: TDateTime; begin dtPruef := dtLetzteLieferung + 7 + DayOfTheWeek(dtLetzteLieferung) + 1 dtLetzteLieferung := dtLetzteLieferung + 7; while dtPruef <= dtEnde do begin Result := Result + DateTimeToStr(dtLetzteLieferung); dtLetzteLieferung := dtLetzteLieferung + 7; dtPruef := dtPruef + 7; end; end; Ansgar |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz