Вычисления с учетом рабочего календаря

В статье рассмотрены примеры работы в сценариях с датами с учетом производственного календаря.

Примеры сценариев с использованием PublicAPI

Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарии, указанные ниже, актуальны для версий системы ELMA с 3.8 включительно до 3.12.1 включительно.

1. Вычисление временного интервала между датами с учетом производственного календаря (данный метод возвратит количество рабочего времени между двумя датами или датами с временем в формате TimeSpan):

//зададим начало периода
DateTime startTime = DateTime.Now;
//зададим конец периода
DateTime endTime = (DateTime)context.DataOkonchaniya;
//подсчитаем интервал методом EvalWorkTimeDifference()
context.VremennoyInterval = PublicAPI.Services.ProductionCalendar.EvalWorkTimeDifference(startTime, endTime);

2. Вычисление временного интервала между датами с учетом производственного календаря (данный метод возвратит количество полных рабочих дней в интервале и суммарное время от неполных между двумя датами или датами с временем в формате TimeSpan):

//зададим начало периода
DateTime startTime = DateTime.Now;
//зададим конец периода
DateTime endTime = (DateTime)context.DataOkonchaniya;
//подсчитаем интервал методом EvalWorkTimeSpanDifference()
context.VremennoyInterval = PublicAPI.Services.ProductionCalendar.EvalWorkTimeSpanDifference(startTime, endTime);

3. Прибавление времени с учетом производственного календаря (учитываются только рабочие часы):

//к контекстной переменной NachaloPerioda прибавим 4 рабочих часа
//результат запишем в контекстную переменную KonecPerioda
//переменные NachaloPerioda и KonecPerioda имеют тип "Дата/время"
context.KonecPerioda = PublicAPI.Services.ProductionCalendar.EvalTargetTime(context.NachaloPerioda.Value, TimeSpan.FromHours(4));

Примеры сценариев без использования PublicAPI

Для работы сценариев нужно подключить пространства имен:

using EleWise.ELMA.Scheduling; 
using EleWise.ELMA.Services;
1. Вычисление временного интервала между датами с учетом производственного календаря (данный метод возвратит количество рабочего времени между двумя датами или датами с временем в формате TimeSpan):
//зададим начало периода 
DateTime startTime = DateTime.Now; 
//зададим конец периода 
DateTime endTime = (DateTime)context.DataOkonchaniya;
//получим службу производственного календаря 
var calendar = Locator.GetServiceNotNull<IProductionCalendarService>();
//подсчитаем интервал методом EvalWorkTimeDifference() 
context.VremennoyInterval = calendar.EvalWorkTimeDifference(startTime, endTime);

2. Вычисление временного интервала между датами с учетом производственного календаря (данный метод возвратит количество полных рабочих дней в интервале и суммарное время от неполных между двумя датами или датами с временем в формате TimeSpan):

//зададим начало периода 
DateTime startTime = DateTime.Now; 
//зададим конец периода 
DateTime endTime = (DateTime)context.DataOkonchaniya;
//получим службу производственного календаря 
var calendar = Locator.GetServiceNotNull<IProductionCalendarService>();
//подсчитаем интервал методом EvalWorkTimeSpanDifference() 
context.VremennoyInterval = calendar.EvalWorkTimeSpanDifference(startTime, endTime);

3. Прибавление времени с учетом производственного календаря (учитываются только рабочие часы):

//получим службу производственного календаря 
var calendar = Locator.GetServiceNotNull<IProductionCalendarService>();
//к контекстной переменной NachaloPerioda прибавим 4 рабочих часа 
//результат запишем в контекстную переменную KonecPerioda
//переменные NachaloPerioda и KonecPerioda имеют тип "Дата/время" 
context.KonecPerioda = calendar.EvalTargetTime(context.NachaloPerioda.Value, TimeSpan.FromHours(4));