![]() |
#3 |
Участник
|
Самый простой способ - тупой перебор рабочих дней календаря, что-то вроде:
X++: // Добавление указанного количества рабочих дней по календарю к дате public static TransDate addWorkDays_OVK(TransDate _transDate, Counter _cntDays, CalendarId _calendarId) { TransDate curDate; Counter remainDays; int sign; ; curDate = _transDate; sign = real2int(sign(_cntDays)); if (!_transDate) { return curDate; } if (!_calendarId) { curDate = curDate + _cntDays; return curDate; } if (!_cntDays) { // Просто берем ближайший рабочий день while (!WorkCalendarDate::isDateOpen(WorkCalendar::defined(_calendarId, curDate), curDate)) { curDate = curDate + 1*sign; } return curDate; } remainDays = _cntDays * sign; while (remainDays) { remainDays--; curDate = curDate + 1*sign; while (!WorkCalendarDate::isDateOpen(WorkCalendar::defined(_calendarId, curDate), curDate)) { curDate = curDate + 1*sign; } } return curDate; } |
|