30.09.2012, 15:25 | #1 |
Участник
|
Вычисление даты
Есть количество рабочих дней: 12 дней .
Каким простым способом X++ можно от определенной даты(возьмем 30.09.2012) рассчитать дату с учетом выходных(исходя из рабочих дней настроенного календаря). Результат: 16.10.2012. Календарь стандартный 5x8. Сб Вс выходные. Аналогично планированию операций в производственном заказе с учетом календаря. |
|
30.09.2012, 19:39 | #2 |
Участник
|
В расчётах с персоналом аналогичная функциональность имеется в приказах о предоставлении отпуска. Можно посмотреть как там сделано.
X++: info(strfmt('Дата окончания: %1', RPayAverageEarnEngine_Vacation::setEndDate('5х8', 30\09\2012, 12))); |
|
01.10.2012, 11:14 | #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; } |
|