Вопрос

Доработать таймер в задачах - действия "пауза" и "продолжить"

В нашей работе имеет место работа с длительными задачами, которые могут переходить даже на следующий рабочий день, а также просто откладываться для решения другой задачи более срочной задачи. Потому для правильного подсчета времени уделяемого задаче, нужно чтобы время фиксировалось только то, которое попадает в рабочие часы дня, например с 9 до 18 минус перерыв на обед с 13 до 14. При этом, когда работник перестает заниматься текущей задачей и переключается на другою, он должен иметь возможность зафиксировать этот факт.

Реализовать это очень просто, по моему мнению.
Сейчас как работает? Если я не ошибаюсь время работы над задачей вычисляется как разница между временами фиксации статуса задачи "В работе" и "Выполнена" и т.п.

А для реализации того, что я хочу, нужно просто добавить еще один статус "ПРИОСТАВНОВЛЕНА" а поле "длительность" постоянно хранить в таблице и накапливать при смене статуса "Приостановлена" на статус "В работе". А после статуса "Выполнена" поставить окончательное время выполнения. Также необходимо добавить вопрос пользователю "Хотите сбросить таймер? (да/нет)", на случай если он случайно поставит статус "Не начата".

Нравится

5 комментариев

Здравствуйте Евгений,
На практике для того что бы учесть затраченное время, в привязке к какой либо сущности (например Инцидент), при этом учитывая фактическую остановку работы над проблемой, можно создавать несколько задач в привязке к этой сущности .

Предлагаю реализовывать предложенную вами идею поэтапно.

На сколько я понимаю мы хотим доработать логику поля [Факт. продолжительность], и в зависимости от добавленного статуса "Приостановлена" вычислять затраченное время, с учетов рабочего времени.

Логика по поведению полей в карточке Задач, при выборе статуса реализована в UpdateControlsAndDataByStatusID (scr_TaskEdit). В вашем варианте я бы добавил не доступность контрола видимости завершения задачи, и запись в датасет фактического перехода в этот статус.

Логика вычисления поля ActualDuration (Факт. длительность внутренняя) которая далее преобразуется в строку ActualDurationStr (Факт. продолжительность) проходит в функции
UpdateDuration(scr_TaskUtils) по следующей логике:
DueDate (Дата завершения) - StartDate (Дата начала).
В данной функции разумно записывать фактическое время с учетом логики рабочего времени.

Вы предлагаете выводить модальное окно, с выбором да/нет с вопросом "Хотите сбросить таймер? (да/нет)" при каждой смене статуса, что возможно не самая лучшая идея с точки зрения пользователей, так как статусы задачи, при работе по регламентам, меняются часто.

Здравствуйте Алексей,
1) В моем случае длительность нужна только по задачам в отдельности. По длительности разрешения инцидента в совокупности факт. продолжительности всех задач мне информация не нужна. Но если нужно, я думаю sql запросом это можно получить. Именно по этому длительность нужно хранить не в строке, а в целом числовом виде, измерение в минутах.

2) Я предлагаю выводить модальное окно насчет сброса таймера, только при условии, когда пользователь пытается установить исключительно статус "Не начата". Плюс нужно сделать так, чтобы при установке этого статуса факт.дата начало очищалось. И тогда этот статус будут ставить только тогда, когда хотят очистить время старта по задаче и показать что к задаче еще даже не приступали. Тут как раз и нужно сбросить накопленное время работы по текущей задаче, если пользователь очень захочет.

Евгений,
По поводу второго вопроса, предлагаю добавить в В UpdateControlsAndDataByStatusID (scr_TaskEdit)

		if (StatusCode == 'Open') {
				SetActualDates(BaseDBEdit.Dataset, 'ActualStartDate', false);  
				SetActualFinishDate(false);
				var MessageResult;				
				var Message = 'Хотите сбросить таймер?';
				if (System.MessageDialog(Message, mdtWarning, (mdbYes + mdbNo), 0) != wmrYes) 
					{
					MessageBox('Логика на нажатие Нет ')
					}
					else 
MessageBox('Логика на нажатие Да ');
//сбросить накопленное время работы по текущей задаче
				}

"Лапин Евгений Александрович" написал:Именно по этому длительность нужно хранить не в строке, а в целом числовом виде, измерение в минутах.

"Яворский Алексей" написал:Логика вычисления поля ActualDuration (Факт. длительность внутренняя) которая далее преобразуется в строку ActualDurationStr (Факт. продолжительность)

Имелось в виду что ActualDuration преобразуется в ActualDurationStr для отображения в поле edtActualDurationStr в формате ДД дней ЧЧ часов ММ миннут, хранится ActualDuration в целочисленном формате

ааа, ну тем проще, значит все просто. Просто несколько месяцев мне ответили насчет такого функционала, что это сделать сложно и будет рассматриваться в новой версии программистами. Я тогда совсем ничего не понимал в этой системе. Вот и ждал.

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