Цитата:
Сообщение от
TDV
Каким простым способом X++ можно ...
Самый простой способ - тупой перебор рабочих дней календаря, что-то вроде:
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;
}