При работе с однотипными задачами одного характера появилась необходимость закрытия нескольких задач одновременно. Когда в день выполняется порядком 100 задач очень трудоемко открывать каждую карточку задачи и изменять в ней состояние.

Реализовано таким образом: пользователь в разделе [Задачи] выбирает те задачи, которые ему необходимо закрыть, нажимает пр. кнопку мыши и в контекстном меню выбирает «Действия» > «Отметить выполненными»:
Раздел [Задачи]
И выбранные задачи становятся выполненными. [Факт. дата начала] и [Факт. дата завершения] проставляются датами по плану.

1. В wnd_TasksWorkspace был добавлен ActionMenuItem:
Добавление ActionMenuItem

2. На него наложено событие amiChangeStatusOnExecute:
Событие ActionMenuItem

3.

function amiChangeStatusOnExecute(ActionMenuItem) {
        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:

function GetSelectRecordsForChangeStatus(Dataset) {
        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. Остается сохранить изменения и перезапустить систему.

Нравится

Поделиться

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

Интересно! А результаты? Было бы интересно позволять массово завершать только задачи одного типа и выставлять им какой-то результат...

Можно и результат прописать. Главное же как задача поставлена.)
Чтобы завершать задачи только одного типа, нужно добавить условие проверки соответствия типа задачи, остальные отметать.

Спасибо за идею :) Думаю, на досуге воплотим у себя

Пожалуйста) Рада, что пригодилась)

Кстати, в 3.4.0 реализовано массовое редактирование записей. Т.е. вы можете выделить несколько записей, нажать на кнопку "Изменить", сделать редактирование через интерфейс карточки и эти изменения применяться для всех выделенных записей.

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