При работе с однотипными задачами одного характера появилась необходимость закрытия нескольких задач одновременно. Когда в день выполняется порядком 100 задач очень трудоемко открывать каждую карточку задачи и изменять в ней состояние.
Реализовано таким образом: пользователь в разделе [Задачи] выбирает те задачи, которые ему необходимо закрыть, нажимает пр. кнопку мыши и в контекстном меню выбирает «Действия» > «Отметить выполненными»:
И выбранные задачи становятся выполненными. [Факт. дата начала] и [Факт. дата завершения] проставляются датами по плану.
1. В wnd_TasksWorkspace был добавлен ActionMenuItem:
2. На него наложено событие amiChangeStatusOnExecute:
3.
var Dataset = Services.GetNewItemByUSI('ds_TaskStatus');
Dataset.Close();
ApplyDatasetFilter(Dataset, 'ID', TaskStatusClosed, true);
Dataset.Open();
GetSelectRecordsForChangeStatus(Dataset);
}
где TaskStatusClosed – это ID выполненной задачи, добавлен в scr_Consts:
var TaskStatusClosed = '{F598ECDB-4EEF-4FA8-9E69-A36B053501E5}'; //Выполнена
Данное состояние будет проставляться выбранным задачам.
4. Сам скрипт scr_Consts необходимо добавить в Используемые скрипты scr_TasksWorkspace.
5. Функция GetSelectRecordsForChangeStatus выглядит следующим образом, находится также в scr_TasksWorkspace:
var GridDataset = dlTasks.Dataset;
var CanUpdateTask = GetCanUpdateTableGroup(GridDataset);
if (!CanUpdateTask) {
var Message = FormatStr(HavntPermissionUpdateWarning, "задача");
ShowWarningDialog(Message);
return;
}
var StatusID = Dataset.Values('ID');
var SelectedItemIDs = TasksWorkspace.Grid.SelectedIDs.CreateCopy();
var UpdateQuery = GetSingleItemByCode('uq_TaskStatus', 'TaskWorkspace');
var Parameters = UpdateQuery.Parameters;
for (var i = 0; i SelectedItemIDs.Count; i++) {
var TaskID = SelectedItemIDs.Items(i);
var TaskDataset = Services.GetNewItemByUSI('ds_Task');
TaskDataset.Close();
ApplyDatasetFilter(TaskDataset,'ID',TaskID,true);
TaskDataset.Open();
Parameters('ID').Value = TaskID;
Parameters('StatusID').Value = StatusID;
Parameters('ActualStartDate').Value = TaskDataset('StartDate');
Parameters('ActualFinishDate').Value = TaskDataset('DueDate');
UpdateQuery.Execute();
TaskDataset.Edit();
TaskDataset('ActualDuration') = TaskDataset('Duration');
TaskDataset('ActualDurationHours') = TaskDataset('ActualDuration')/60;
TaskDataset('ActualDurationMinutes') = TaskDataset('ActualDuration')/60-TaskDataset('ActualDurationHours');
TaskDataset('RemindingToAuthorID') = null;
TaskDataset('RemindingToOwnerID') = null;
TaskDataset.Post();
}
RefreshDataset(GridDataset);
}
6. Остается сохранить изменения и перезапустить систему.
Интересно! А результаты? Было бы интересно позволять массово завершать только задачи одного типа и выставлять им какой-то результат...
Спасибо за идею :) Думаю, на досуге воплотим у себя