Показать сообщение отдельно
Старый 01.10.2012, 11:14   #3  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от 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;
}