Образец, требует лишь минимальной доработки в плане даты:
\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;
}