Показать сообщение отдельно
Старый 22.07.2009, 18:56   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,340 / 3558 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Есть очень классный календарь в los-слое с зарплатой. Находится он в \Расчеты с персоналом\Учет рабочего времени\Календарь\Календари. В нем задаются календарь, шаблон (5 дней для обычной рабочей недели) и самое главное - в нем можно задавать вручную все выходные дни, не попадающие на субботу/воскресенье или рабочие дни, наоборот попадающие на субботу/воскресенье. Т.е. задать фактически только исключения из общего правила, что сб, вс выходные, а остальные дни рабочие.
Также там можно по кнопке Расписания создать времена и указать любой диапазон времени.

В коде сей механизм вызывается через статические методы, расположенные на таблице RPayCalendarTable, в частности для Вас интересен метод periodWorkDays

А вот такой код - Вам поможет получить дату, ближайшую в будущем после заданной Вами, которая является рабочим днем:
X++:
#Define.MyDate(systemdateget())
rPayCalendarId = RPayCalendarTable::findCalendarType(RpayCalendarType::FiveDay).CalendarId;
    select firstonly rPaycalendarDate
        where rPaycalendarDate.TransDate > #MyDate &&
              rPaycalendarDate.CalendarId == rPayCalendarId   &&
              rPaycalendarDate.PayDayType == RPayDayType::WorkDay;
Конечно сей календарь надо вести. Но зато и расчет будет точным
__________________
Возможно сделать все. Вопрос времени