Показать сообщение отдельно
Старый 23.07.2009, 02:00   #5  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Образец, требует лишь минимальной доработки в плане даты:

\Data Dictionary\Tables\WorkCalendarDate\Methods\calcDefinedSeconds
X++:
server static Seconds calcDefinedSeconds(
    CalendarId    _calendar,
    TransDate     _transDate,
    Seconds       _fromTime         = maxint(),
    Seconds       _toTime           = 0,
    boolean       _useEffectivity   = true,
//sp1
    boolean       _throwIfError     = true
    )
{
    WorkCalendarDateLine    workCalendarDateLine;
    Seconds                 seconds;
    ;

    while select workCalendarDateLine
        index hint CalendarDateFromIdx
//sp1
        where workCalendarDateLine.CalendarId   == WorkCalendar::defined(_calendar,_transDate,_throwIfError)  &&
              workCalendarDateLine.TransDate    == _transDate
    {
        workCalendarDateLine.FromTime  = workCalendarDateLine.FromTime < _fromTime
            ? _fromTime
            : workCalendarDateLine.FromTime;
        workCalendarDateLine.ToTime    = workCalendarDateLine.ToTime   > _toTime
            ? _toTime
            : workCalendarDateLine.ToTime;

        if (workCalendarDateLine.FromTime < workCalendarDateLine.ToTime)
             seconds += workCalendarDateLine.capacity(100,_useEffectivity);
    }

    return seconds;
}
За это сообщение автора поблагодарили: sukhanchik (2).