Add number of working days
I have to subtract a number of 'working days' of a date field in my message mapping.
I wrote a user defined function. I used cal.add(Calendar.DATE, -3); on the instance cal of the class Calendar. It subtracts 3 days, but I have to subtract 3 'working days'.
Has anyone a suggestion how to achieve this?
Kind regards
Frank
Frank,
Since you said that there is FM available in R/3 DATE_CHECK_WORKINGDAY. I would suggest you to do RFC Lookup and get the response if it not working day, then subtract 1 from the current day, and again do lookup to check whether its working day or not. Finally if you get the response as Working day, then subtract 3 from the day(not from the current date, instead the subtracted date , in my previous step).
But it will not solve your issue. The above I said is an approach. Because, consider the below example.
Current day is Saturday, you r doing RFC lookup and getting response as not-working day. Hence on subtracting 1 you will get Friday, now again you are doing RFC look up , this time you will get response as working day , immediately you will subtract 3 from friday, Finally you will get the result as tuesday!!!!
Do you think its correct? Yah sometimes, because while subtracting 3 from friday we have to make sure that thursday & wednesday must not be holiday. I think you got my example, If I'm wrong , please reply me back.
Hope it clears.
The above is an approach, its not the solution. If you look its good we have to apply logic to ahieve the result.
Best Regards,
raj.
Similar Messages
-
Add number of business days to date field
Hello, I noticed that there is not much discussion in the forum surrounding u201Cbusiness daysu201D so I hope this post/discussion/solution contributes to the content of this forum.
I am using the following 3 formulas to try to Add number of business days (based upon a table field) to a specified date:
1. Variable name = SetVar
//Set Variable for Add Business Days:
DateVar Array Holidays;
DateVar Target:= CDate({TMS_MOVEMENT_EVT.EVT_DATE}); // Put your field name in here
NumberVar Add:= {DTCI_DOD_TRANS.TRANS}; // put the number of days here to add (a positive number)
NumberVar Added := (0);
2. Variable name = AddBizDays
//Adding Business Days:
EvaluateAfter({@SetVar});
WHILE Added < Add
Do (target := target +1;
if dayofweek (target) in 2 to 6 and not (target in holidays)
then Added:=Added+1
else Added:=Added);
Target
3. Variable name = HOLIDAYS
//Holiday Array Formula for the report Header:
BeforeReadingRecords;
DateVar Array Holidays := [
Date (2003,12,25), // you can put in as many lines for holidays as you want.
Date (2003,12,31)
0
I am successfully getting my data needed to make the necessary calculations and variable assignmentsu2026 I believe that my ISSUE is that I am not sure where to place these formulas into my report so they assign the variables and execute properly when previewing my report. I am curious if that is my issue, and if so, can someone provide me direction on where to put each of these formulas in my report.
Currently, when I try to preview the report, I get the following Crystal Reports Error: -u201CA number, currency amount, Boolean, date, time, date-time, or string is expected here.u201D
Then Crystal automatically opens the AddBizDays formula and highlights the word added, see below RE: u201CWHILE Addedu201D
For reference, my report has 3 groups, and I am displaying all of my output information (and locating my formulas) in the group footer #3 report section. I have moved them around to other report sections/groups/placements, but to no success.
Thanks so much.
Best, MattI worked this out... FYI - for the benefit of all forum users:
ADDING BUSINESS DAYS TO A CERTAIN DATE (excluding weekends and holidays)
1. Variable name = AddBizDays
//Adding Business Days:
WhileReadingRecords;
DateVar Array Holidays;
DateVar Target:= CDate(); // Put your field name in here
NumberVar Add:= ; // put the number of days here to add (a positive number)
NumberVar Added := (0);
WHILE Added < Add
Do (target := target +1;
if dayofweek (target) in 2 to 6 and not (target in holidays)
then Added:=Added+1
else Added:=Added);
Target
2. Variable name = HOLIDAYS
//Holiday Array Formula for the report Header:
BeforeReadingRecords;
DateVar Array Holidays := [
Date (2003,12,25), // you can put in as many lines for holidays as you want.
Date (2003,12,31)
0
...too bad i don't get forum points for sharing this solution.
Special thanks to KenHamady.com -- for sharing this solution.
Sincerely,
Matt -
How to calculate number of working days
Hi experts,
I need to determine the number of working days from two given dates. Below is my example.
1. Posting Date
2. Clearing Date
3. Processing Time in Days
The formula is:
Processing Time in Days = Posting Date - Clearing Date
However, the above result should exclude non-working days such as Public Holidays, Saturdays and Sundays.
This is to be done in my Transfer Rule.
Can someone help me with this.
Points will be assigned as usual.
Thanks!Hi,
With referece to Florin Wach Reply in the following link:
Re: FM to get number of working days in a date range for a calender
Use the update rule(routine) for <i>Processing Time in Days</i> as below:
DATA: date_begin TYPE sy-datum,
date_end TYPE sy-datum,
current_date TYPE sy-datum,
working_indicator TYPE SCAL-INDICATOR,
workdays TYPE I,
factory_calendar TYPE SCAL-FCALID.
date_begin = DATA_PACKAGE-PSTNG_DATE.
date_end = DATA_PACKAGE-CLEAR_DATE.
factory_calendar = '01'.
current_date = date_begin.
DO.
IF current_date > date_end.
EXIT.
ENDIF.
CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
EXPORTING DATE = current_date
FACTORY_CALENDAR_ID = factory_calendar
IMPORTING
WORKINGDAY_INDICATOR = working_indicator
EXCEPTIONS
CALENDAR_BUFFER_NOT_LOADABLE = 1
CORRECT_OPTION_INVALID = 2
DATE_AFTER_RANGE = 3
DATE_BEFORE_RANGE = 4
DATE_INVALID = 5
FACTORY_CALENDAR_NOT_FOUND = 6
OTHERS = 7.
IF SY-SUBRC <> 0.
workdays = 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
EXIT.
ENDIF.
IF working_indicator IS INITIAL.
ADD 1 TO workdays.
ENDIF.
ADD 1 TO current_date.
ENDDO.
Result = workdays.
With rgds,
Anil Kumar Sharma .P -
ABAP - Function module to get the number of working days between 2 days
Hi gentlemen,
I have been asked to produce a report that gives the number of working days between 2 days, based on a calendar.
I didn't find anything...
Has any of you already written a function module to get this ?
A great thanks in advance.
Jacques LagrifHi ,
you can try this ,
when you require the number of working days between D1 and D2
Total No of Days will be
D2 - D1
No of holidays between D1 and D2 , use the FM HOLIDAY_GET
Pass the From date , to date , and the factory calendar to get the of Holidays
Total no of days - Number of Holidays will your Working days
Regards,
Sathya -
To see the number of working days and leave of an employee for year
HI SAP GURUS,
I want to see the the number of working days and leave of all employees of the organisation for a year. Please tell me is there any report or any transaction code in sap to see the working days and leave for all employees.
Thanks & Regards
SurupaHi,
call transaction PT64.
Best Regards
Bernd -
Number of working days in customer exit?
Hi, this is actually an extension to the following thread.
How to calculate number of working days
I have very similar requirement. Determine the number of working days (excluding weekends and holidays) from 2 given dates. But the <b>difference here</b> is that, one of the date in the calculation is the<b> current date.</b>
1: Creation Date - this is present as infoobject in the ODS.
2: Current Date - this is 'today''s date.
And, No. of Working days(Zworkdays) = Current Date - Creation Date.
So, as mentioned in the thread 305257 speaks about including the logic in the update rules, I can use system variable sy-datum to get the current date in update routine. But if the load is not scheduled for every day (say,once in 2 days), then when i report this infoobject Zworkdays on Day2, then it will hold Day1 calc rite?
PLease correct me if I am wrong.
Could you please help me with other approachs I can follow. One I can think is Customer Exit in Bex for the same.... but I am not sure how to do the same (i am new to Bex and Customer exit). Could any one of you please guide me how to achieve the same. I Have 0CalDate in the ODS also.
Any other ideas/inputs is greatly appreciated.
Thanks in advance
RamyaHi,
search for virtual key figures.
Rgds.
Juergen
P.S. Thanks for assigning points
Message was edited by:
Jürgen Hemelt -
FM to calculate Number of working days adjusted for an employee -ABAP HR
I have one requirement in which i have to Calculate "Number of working days adjusted" for an employee for a disability program.
In this context i wanna know, if just get difference between two dates (i.e the duration for which employee was compensated ) based on Holiday calender...Will this give give me "Number of working days adjusted" for an employee or i have to consider work schedule for an employee? If yes , Then please let me know sm FM to calculate number of working days between two dates speific to an employee.check
HR_PERSONAL_WORK_SCHEDULE
HR_GET_QUOTA_DATA -
How can i get a number of working days in a month PL/SQL
How can i get a number of working days in a month(excluding Saturday and Sunday) in a query in PL/SQL ?
Please do a search before posting
sql>
select count(*)
from(
select trunc(sysdate,'month')+rownum-1 dy
from all_objects
where rownum <= last_day(sysdate) - trunc(sysdate,'month')+1)
where to_char(dy,'fmday') not in ('sunday','saturday');
COUNT(*)
23
Message was edited by:
jeneesh
Please try yourself to change the query to one that doesn't use a subquery.. -
Finding number of working days during query execution
Hi ,
We have a requirement to calculate number of working days during query execution. In the cube we got "received date", this will be used as a variable in the query. Based on the received date value entered, query needs to display number of products received from past 1, 2,3,4 days (working days should include weekends or public holidays).
1day 2 days 3 days 4 days 5 days
10 12 20 15 20
to me it appears as I need to create virtual key figures.
Regards,
RamzHi ramesh,
First try to create formula variables for start data and end date to calculate the no of working days.
Create a Variable ZSTDT --of type replacement path.
Type of Variable = Formula
Variable Name = ZSTDT
Characteristic = <info object>
For Intervals Use = Select From Value
Offset Start = 0000 Offset Length = 0000
Replacement var with : key
use the same steps to create one more formula variable to get end date.
Now create a formula to get the No of days.
once after getting no of days you can create buckets as per your need.
for more info check the below links
http://www.sd-solutions.com/SAP-HCM-BW-Replacement-Path-Variables.html
http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/30f15839-0cf1-2b10-c6a7-ebe68cc87cdc?quicklink=index&overridelayout=true -
Calculate number of working days in a month
Hi All,
I am trying to build a report to calculate the performance of a sales rep for the current month. This report has to exclude the holidays (saturday, sunday and one extra day in each month) in order get the exact performance. Could anyone suggest me on how to go about writing a Case statement which would get me the number of working days in a month excluding holidays.
ThanksHi,
There are no direct oracle function that could be used to get the desired results.
However you could try using something like
SELECT COUNT( *)
FROM
(SELECT ROWNUM RNUM
FROM ALL_OBJECTS
WHERE ROWNUM <= TO_DATE('&1') - TO_DATE('&2') + 1
WHERE TO_CHAR(TO_DATE('&2') + RNUM - 1, 'DY') NOT IN('SAT', 'SUN');
Give the two date ranges that you want to look for with the highiest one first. i.e say for example - 01-FEB-2011 to 31-DEC-2010 would give the working days in JAN. However note that you might have to check for holidays related to that country/region (which could be added as a seperate table).
If you need to get an extra day in addition to the weekends, please give the dates accordingly
SQL> SELECT COUNT( *)
2 FROM
3 (SELECT ROWNUM RNUM
4 FROM ALL_OBJECTS
5 WHERE ROWNUM <= TO_DATE('01-FEB-2011') - TO_DATE('01-JAN-2011') + 1
6 )
7 WHERE TO_CHAR(TO_DATE('01-JAN-2011') + RNUM - 1, 'DY') NOT IN('SAT', 'SUN');
COUNT(*)
22 -
FM to get number of working days in a date range for a calender
Hi all,
Can you tell me the Function Module which takes start date ,, end date and factory calender as input and gives back working days or number of working days as return.
Win full points for the resolution...
Thanks in Advance...
Chandan DubeyHi chandan,
1. DATE_CHECK_WORKINGDAY
This is one useful FM
2. Try this code (just copy paste)
IT DOES EXACTLY WHAT U REQUIRE.
REPORT abc.
data : num type i.
parameters : frdate type sy-datum default '20051216'.
parameters : todate type sy-datum default '20051221'.
perform getinfo using frdate todate changing num.
break-point.
*& Form getinfo
text
FORM getinfo USING fromdate todate CHANGING numofdays type i.
DATA : d TYPE sy-datum.
d = fromdate - 1.
DO.
d = d + 1.
IF d > todate.
EXIT.
endif.
CALL FUNCTION 'DATE_CHECK_WORKINGDAY'
EXPORTING
date = d
factory_calendar_id = '01'
message_type = 'I'
EXCEPTIONS
date_after_range = 1
date_before_range = 2
date_invalid = 3
date_no_workingday = 4
factory_calendar_not_found = 5
message_type_invalid = 6
OTHERS = 7.
IF sy-subrc = 0.
numofdays = numofdays + 1.
write :/ d.
ENDIF.
ENDDO.
ENDFORM. "getinfo
I hope it helps.
Regards,
Amit M. -
Get the number of working days based on factory calendr for a range of mont
Dear all,
We are using BI7.00 . In one of our reports we have the following requirement.
The range of months will be given in the selection screen for example 01.2008 to 11.2008, when the query is executed, i want system to calculate the number of working days for each month of the year (for what values provided in the selection field ) and display the same. i.e., as mentioned below.
Month days.
01.2008 22
02.2008 18
03.2008 25 etc., Kinldy provide steps for adopting the same. If it can be adopted only through customer exit also provide the code and parameters that has to be used.
Regards,
M.Mhi,
Try the following logic to find out the no.of working days in a month based on your calendar.
parameters : mny(6). " input format should be yyyymm
data : d1 like sy-datum,
d2 like sy-datum,
d3 like sy-datum,
v_nds type i.
concatenate mny '01' into d1.
CALL FUNCTION 'SLS_MISC_GET_LAST_DAY_OF_MONTH'
EXPORTING
DAY_IN = d1
IMPORTING
LAST_DAY_OF_MONTH = d2
EXCEPTIONS
DAY_IN_NOT_VALID = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
do 30 times.
CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
EXPORTING
CORRECT_OPTION = '+'
DATE = d1
FACTORY_CALENDAR_ID = ' A' " your factory calendar ID
IMPORTING
DATE = d3.
if d1 = d3.
d1 = d1 + 1.
v_nds = v_nds + 1.
else.
d1 = d3.
endif.
if d3 ge d2.
exit.
endif.
enddo.
write : 'No of working days ', v_nds.
hope it helps...
regards,
raju -
Calculating Number of Working Days
Hi All,
I'm creating a crystal report where I have to calculate the Number of Working Days between a date range, this should exclude the Weekends(done) but also exclude the public holidays which have defined in Holidays Calender.
I'm not using procedure , Operating directly with tables.
Any help would be appreciated.
RegardsHello Pari,
Check Exclude Holidays and weekends from Last7Day function link for function to exclude weekends.
and How to query the number of working days between two dates to get holidays defined in holiday calander.
Thanks,
Neetu -
How to query the number of working days between two dates
I'm looking for a solution to calculate the number of <i>working</i> days between two dates that I can use in a formated search.
Calculating the total number of days is pretty straight forward but does anyone know how to take into account the settings in the HLD1 (Holiday Dates) table?Hi Eric,
If you are purely looking to exclude holidays defined in the HLD1 table, then you should be able to do it with the following query
NOTE: The following query is an example using OINV table and the fields DOCDATE and DOCDUEDATE for a Particular DOCNUM 'xxx'
If you planning to use within the SAP module then replace DOCDATE and DOCDUEDATE with dynamic field references $[$x.x.x]
SELECT DATEDIFF(DAY,T0.DOCDATE,T0.DOCDUEDATE)-
(SELECT COUNT(STRDATE) FROM HLD1 WHERE STRDATE >= T0.DOCDATE AND STRDATE <= T0.DOCDUEDATE)
FROM OINV T0
WHERE T0.DOCNUM = xxx
Best Wishes
Suda -
Need to calculate number of work days.
Hi Experts,
I have scenario here to calculate the number days between the service request creation date and current date. Since i have the creation date in my cube ( cube is loaded using delta update) , i use formula variable to calculate the difference. But i want to exclude Sunday, Saturday and public holidays.
How can I achive this?
Putting a code in the update rule will help only if we do full update everyday. A delta update will do the calc only once and whenever the base records changes..
So is there any other way i can do this?
Please reply.
DV
nullHi Anuradha,
Hope you haven't understood my issue right.. I will give an eg here.
Lets say we have three new records in base ODS1
[Rec No] [CreatedOnDate(in dd/mm/yyyy)]
(1) ( 06/06/2007)
(2) (11/06/2007)
(3) (15/06/2007)
Assume these are new records that came into ODS1.
Now when we load this into Cube1 from ODS1 with assumption that update between cube1 and ODS1 has a code to calculate the workdays excluding weekends and public holidays. And update method os delta ran yesterday 26/06/2007
So now in the cube1 after yesterdays delta data will look like
[Rec No] [CreatedOnDate] [No of days] [Days w/o weekends/public holidays]
(1) (06/06/2007) (20) (14)
(2) (11/06/2007) (15) (11)
(3) (15/06/2007) (11) (07)
So in the cube if the base records 1, 2 and 3 in ODS1 doesnot chnage the cube after todays delta will have the same value instead of a increment of 1 day in third and fourth column.
Hope I have made my issue clear to all..
DV
null
Maybe you are looking for
-
I am trying to enter a split point for a file going on a dual layer disc. There are chapter markers in the file but auto function does not see them. Went back and put a small split in the timeline in fcp and exported to mpeg 2 again and auto function
-
Crystal Report Chart Problem: No trendlines with regression
Hi, I have a severe problem with chart trendlines in Crystal Reports 2008 (12.3.0.601). Trendlines with regression do not work, whereas average and moving average work on charts with data axis but not with numerical axis. Does anyone has an idea, ho
-
Windows Server 2012 R2 - Essentials Experience In trying to put pieces together, I jacked my CA and certificates all to @#&$%!! Some of the factors involved are: Server0 - Hyper-V Host Server1 - DC, 2012 R2 Essentials Experience role Server2 - E
-
Boot up iMac Intel. Kernal Panic can't boot up computer??
I'm fixing my friend iMac Intel first generation Dual Core 32 bit. Not the lastest one. Since I know more of him with macs. My friend trip off the power cord of his imac by accident one morning and when he put the cord back in to the imac to power up
-
Blinking question mark when Mac Book turns on
When my daughter turns on her Mac Book the screen shows a blinking picture of a folder with a question mark. What does this mean and how can I fix it? My local Genius Bar doesn't have an opening until next week. Thank you.