Доброго времени суток, коллеги!
В разделе [Задачи] существуют такие действия как "Запустить таймер" и "Остановить таймер", пользуясь которыми можно автоматически заполнять поля "Факт. дата начала" (старт таймера), "Факт. дата завершения" (стоп таймера) и "Факт. продолжительность" (разница между датой начала и датой завершения) в карточке редактирования задачи.
Однако, если запускать таймер несколько раз, в поле "Факт. продолжительность" будет проставлен период последнего запуска таймера, когда часто необходимо суммировать время всех периодов запусков таймера.
Для реализации данного функционала, необходимо внести изменения в функцию function SetTaskActualDuration(TaskID, StartTime) скрипта scr_TaskWorkspace (Tasks \ General \ MainGrid ):
Код JScript:
if (!Assigned(TasksWorkspace.TaskStopTimerUpdateQuery)) {
InitializeTaskStopTimerUpdateQuery();
}
if (TasksWorkspace.ClosedTastStatusCalc != true) {
TasksWorkspace.ClosedTastStatusID = GetTaskStatusIDByCode('Closed');
if (IsEmptyGUID(TasksWorkspace.ClosedTastStatusID)) {
TasksWorkspace.ClosedTastStatusID = null;
}
TasksWorkspace.ClosedTastStatusCalc = true;
}
var UpdateQuery = TasksWorkspace.TaskStopTimerUpdateQuery;
var CurrentTime = new Date(System.Now());
var Milliseconds = CurrentTime.getTime() - StartTime;
var ActualDurationData =
GetDurationDataFromMilliseconds(Milliseconds);
var ActualDurationHours = ActualDurationData.Hours;
var ActualDurationMinutes = ActualDurationData.Minutes;
var Parameters = UpdateQuery.Parameters;
var Dataset = Services.GetNewItemByUSI('ds_Task');
ApplyDatasetFilter(Dataset, 'ID', TaskID, true);
Dataset.Open();
var OldActualDuration = Dataset.Values('ActualDuration');
Dataset.Close();
SetParameterValue(Parameters, 'ID', TaskID);
SetParameterValue(Parameters, 'ActualDurationHours', ActualDurationHours);
SetParameterValue(Parameters, 'ActualDurationMinutes', ActualDurationMinutes);
SetParameterValue(Parameters, 'ActualDuration',
(Math.round(Milliseconds / 1000 / 60) + OldActualDuration));
SetParameterValue(Parameters, 'StatusID', TasksWorkspace.ClosedTastStatusID);
UpdateQuery.Execute();
}