Existierenden Zeitraum überprüfen

11. Januar 2017 14:57

Hallo zusammen,

folgendes Problem habe ich gerade zu lösen, an dem ich schon einige Zeit sitze. Daher würde ich mich über einige Anregungen zur Lösung sehr freuen!

Auf einer Page gibt es ein Start- und ein Enddatum. Wird ein neuer Datensatz eingetragen, soll geprüft werden, ob sich dieser in einem bereits vorhanden Datensatz befindet.
Ich erläutere das einmal an einem kleinen Beispiel.
1. Datensatz: 02.01.2017 - 15.01.2017
2. Datensatz: 04.01.2017 - 16.01.2017 <- Hier sollte das erste Mal gemeckert werden, was bisher auch klappt. Soweit bin ich schon :) Kommt allerdings nun:
3. Datensatz: 01.01.2017 - 20.01.2017
Bin ich mit meinem Latein ein wenig am Ende.

Danke für eure Hilfe und einen schönen Tag noch!

Re: Existierenden Zeitraum überprüfen

11. Januar 2017 15:16

Wie sieht denn deine Prüfung aus?

Re: Existierenden Zeitraum überprüfen

11. Januar 2017 15:24

Oh ja, ganz vergessen den Code zu hinterlegen! :lol:
Code:
RecordVariable.SETRANGE("Contact No.","Contact No.");
Recordvariable.SETFILTER("Startdatum,'<%1',"Enddatum");
IF Recordvariable.FINDLAST THEN
  IF ("Enddatum" > Recordvariable."Startdatum") AND ("Enddatum" < Recordvariable."Enddatum") THEN
    ERROR(Text_EndingDateInExistingPeriod);

Re: Existierenden Zeitraum überprüfen

11. Januar 2017 16:07

Ich behelfe mir bei solchen Dingen immer damit, dass ich mir auf dem Papier einen klassischen Zeitstrahl aufzeichne:
Code:
              |  S----------E  |                 // <-- REFERENZ
S----------E  |                |                 // <-- OK, liegt davor
              |                |  S----------E   // <-- OK, liegt danach
         S----------E          |                 // <-- Ende liegt in dem Zeitraum
              |           S----------E           // <-- Start liegt in dem Zeitraum
              |      S---E     |                 // <-- Start und Ende liegen in dem Zeitraum


Fazit:
Es gibt immer einen Konflikt, wenn das Referenz-Startdatum kleiner dem Endedatum UND das Referenz-Endedatum größer dem Startdatum ist.

Code:
MyTable.SETFILTER("Starting Date",'<%1',"Ending Date");
MyTable.SETFILTER("Ending Date",'>%1',"Starting Date");
IF MyTable.FINDFIRST THEN
  
// There is an overlapping period conflict