AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.09.2012, 15:25   #1  
TDV is offline
TDV
Участник
 
128 / 30 (2) +++
Регистрация: 04.11.2005
Вычисление даты
Есть количество рабочих дней: 12 дней .
Каким простым способом X++ можно от определенной даты(возьмем 30.09.2012) рассчитать дату с учетом выходных(исходя из рабочих дней настроенного календаря).
Результат: 16.10.2012. Календарь стандартный 5x8. Сб Вс выходные.
Аналогично планированию операций в производственном заказе с учетом календаря.
Старый 30.09.2012, 19:39   #2  
McArrow is offline
McArrow
Участник
 
45 / 38 (2) +++
Регистрация: 18.05.2009
В расчётах с персоналом аналогичная функциональность имеется в приказах о предоставлении отпуска. Можно посмотреть как там сделано.

X++:
info(strfmt('Дата окончания: %1', RPayAverageEarnEngine_Vacation::setEndDate('5х8', 30\09\2012, 12)));
Старый 01.10.2012, 11:14   #3  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (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;
}
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Контроль даты поставки + Авторезервирование kart DAX: Функционал 0 21.07.2011 11:44
Вычисление номера недели года от даты BVN DAX: Программирование 2 08.04.2005 15:07
Lookup даты для выбора месяца Antidot DAX: Программирование 0 21.01.2005 21:24
Очень не хочеться вручную устанавливать даты для всех строк журнала .... ATimTim DAX: Функционал 1 14.09.2004 19:33
Проверка даты Wamr DAX: Программирование 9 15.12.2002 17:28

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:43.