Доброго времени суток, коллеги!

В разделе [Задачи] существуют такие действия как "Запустить таймер" и "Остановить таймер", пользуясь которыми можно автоматически заполнять поля "Факт. дата начала" (старт таймера), "Факт. дата завершения" (стоп таймера) и "Факт. продолжительность" (разница между датой начала и датой завершения) в карточке редактирования задачи.
Однако, если запускать таймер несколько раз, в поле "Факт. продолжительность" будет проставлен период последнего запуска таймера, когда часто необходимо суммировать время всех периодов запусков таймера.

Для реализации данного функционала, необходимо внести изменения в функцию function SetTaskActualDuration(TaskID, StartTime) скрипта scr_TaskWorkspace (Tasks \ General \ MainGrid ):
1
Код JScript:

function SetTaskActualDuration(TaskID, StartTime) {
         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();
}

Нравится

Поделиться

0 комментариев
Показать все комментарии