Date calculation exclude weekend without the use of nav cal.

pushpraj1008pushpraj1008 Member Posts: 33
Hi,

I want to calculate the date excluding weekends (saturday and Sunday) without using
the navision base calender. During counting of days, the starting date should also be included. For example ,If "starting date" = 30.01.2013 and I want to calculate ('+7D'), it should also include date (30.01.2013), then the Ne Date should be 07.02.2013.

It is like that starting date should be taken to the calculation. So, we count 7 days and 1.day: 30.01.13, 2.day: 31.01.13, 3.day: 01.02.2013, (weekend 02.-03.02.2013), 4.day: 04.02.2013, 5.day: 05.02.2013, 6.day: 06.02.2013, 7.day: 07.02.2013.

Below mentioned is my code,
I created a function and passing two parameteds (DatevalueTxt,InitialDate)

Function -->ExcludeWeekends(DateValueTxt : Text[30];InitialDate : Date) : Date
The following variables are used

Name DataType Subtype
Date2 Record Date
Date1 Record Date
DayCount Integer
NewDate Date
DatevalueVar DateFormula

EVALUATE(DatevalueVar,DateValueTxt);
CLEAR(NewDate);
IF (DateValueTxt <>'') THEN BEGIN
Date2.RESET;
Date2.SETRANGE("Period Type",Date2."Period Type"::Date);
Date2.SETRANGE("Period Start",InitialDate,CALCDATE(DatevalueVar,InitialDate));
IF Date2.FINDSET THEN BEGIN
REPEAT
IF Date2."Period No." IN [6,7] THEN
DayCount +=1;
UNTIL Date2.NEXT=0;
NewDate := Date2."Period Start" +DayCount;
Date1.RESET;
Date1.SETRANGE("Period Type",Date1."Period Type"::Date);
Date1.SETRANGE("Period Start",NewDate);
IF Date1.FINDFIRST THEN BEGIN
IF Date1."Period No." = 6 THEN
NewDate := Date1."Period Start" + 2;
IF Date1."Period No." = 7 THEN
NewDate := Date1."Period Start" + 1;
END;
END;
END ELSE BEGIN
Date2.RESET;
Date2.SETRANGE("Period Type",Date2."Period Type"::Date);
Date2.SETRANGE("Period Start",InitialDate);
IF Date2.FINDFIRST THEN BEGIN
IF Date2."Period No." = 6 THEN
NewDate := Date2."Period Start" + 2
ELSE IF Date2."Period No." = 7 THEN
NewDate := Date2."Period Start" + 1
ELSE
NewDate := InitialDate;
END;
END;
EXIT(NewDate);

I am not getting how to include the starting date, it is calculating SD =08.02.2013, but it should calculate 07.02.2013, if give the values in function-->
ExcludeWeekends('7D',300113D).

Does somebody help in this regard.

Regards
Pushpraj
Regards
Pushpraj

Comments

  • aavioaavio Member Posts: 143
    try to loop for same date rec.
    apply filter for date rec as date2.setfilter("Period Start",InitialDate..);
    for each date use DATE2DWY Function, split day of the week --> check and repeat until 7 valid days.

    Hope it will work. :thumbsup:
    aav!o
  • icobaniicobani Member Posts: 70
    Another way for Date Diff Exclude Weekends between startdate and enddate.

    PROCEDURE DateDiffExcludeWeekends@1103301000(StartDate@1103301000 : Date;EndDate@1103301001 : Date) : Integer;
        VAR
          localDate@1103301002 : Record 2000000007;
        BEGIN
          //WLO214   13.03.2013  ICI        BEGIN
          //--------------------------------------------------
          IF (StartDate=0D) OR (EndDate=0D) THEN BEGIN
            EXIT(-98765);
          END;
          localDate.RESET;
          localDate.SETRANGE(localDate."Period Type",localDate."Period Type"::Date);
          localDate.SETRANGE(localDate."Period Start",StartDate,EndDate);
          localDate.SETRANGE(localDate."Period No.",1,5);
          EXIT(localDate.COUNT-1);
          //WLO214 END
        END;
    
    Ibrahim COBANI | Dynamics-NAV Developer Team Manager
    I m a Consult

    E-Mail: ibrahim@imaconsult.com
    My BLOG
Sign In or Register to comment.