Доработать таймер в задачах - действия "пауза" и "продолжить"
В нашей работе имеет место работа с длительными задачами, которые могут переходить даже на следующий рабочий день, а также просто откладываться для решения другой задачи более срочной задачи. Потому для правильного подсчета времени уделяемого задаче, нужно чтобы время фиксировалось только то, которое попадает в рабочие часы дня, например с 9 до 18 минус перерыв на обед с 13 до 14. При этом, когда работник перестает заниматься текущей задачей и переключается на другою, он должен иметь возможность зафиксировать этот факт.
Реализовать это очень просто, по моему мнению.
Сейчас как работает? Если я не ошибаюсь время работы над задачей вычисляется как разница между временами фиксации статуса задачи "В работе" и "Выполнена" и т.п.
А для реализации того, что я хочу, нужно просто добавить еще один статус "ПРИОСТАВНОВЛЕНА" а поле "длительность" постоянно хранить в таблице и накапливать при смене статуса "Приостановлена" на статус "В работе". А после статуса "Выполнена" поставить окончательное время выполнения. Также необходимо добавить вопрос пользователю "Хотите сбросить таймер? (да/нет)", на случай если он случайно поставит статус "Не начата".
Нравится
Здравствуйте Евгений,
На практике для того что бы учесть затраченное время, в привязке к какой либо сущности (например Инцидент), при этом учитывая фактическую остановку работы над проблемой, можно создавать несколько задач в привязке к этой сущности .
Предлагаю реализовывать предложенную вами идею поэтапно.
На сколько я понимаю мы хотим доработать логику поля [Факт. продолжительность], и в зависимости от добавленного статуса "Приостановлена" вычислять затраченное время, с учетов рабочего времени.
Логика по поведению полей в карточке Задач, при выборе статуса реализована в 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 в целочисленном формате
ааа, ну тем проще, значит все просто. Просто несколько месяцев мне ответили насчет такого функционала, что это сделать сложно и будет рассматриваться в новой версии программистами. Я тогда совсем ничего не понимал в этой системе. Вот и ждал.