logo

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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