Запрещать пользователям "двигать задачи" может быть очень уместно в случае, когда, например, они должны перевести задачу в состояние "Выполненна", но не допускается изменение поставленных сроков. При этом, подразумевается, что пользователь ответственный по задаче И (как обязательное условие) - НЕ автор. Свои задача, по которым он автор (сам себе поставил), путь делает что угодно.
В самой карточке редактирования логику реализовать очень легко - достаточно в сервисе Tasks\General\Main Grid\scr_TaskEdit найти обработчик события function wnd_TaskEditOnPrepare(Window) и перед закрывающей скобкой вставить код:
edtStartDate.IsEnabled = false;
edtDueDate.IsEnabled = false;
} else {
edtStartDate.IsEnabled = true;
edtDueDate.IsEnabled = true;
}
Это сделает поля "Дата начала" и "Дата завершения" в карточке задачи неактивными в случае если выполняется вышеописанное условие.
Но, есть такой замечательный элемент в разделе задач - Расписание. И в нем, задачу можно просто пеертянуть. Как тут быть? Выход есть: открыв сервис Tasks\General\SchedulerArea\wnd_SchedulerArea задаем обработчик события OnAfterDragEvent
В обработчик вставьте код:
if (!Connector.CurrentUser.IsAdmin ||
(dlEvents.Dataset.Values('AuthorID') != Connector.CurrentUser.ContactID)) {
ShowInformationDialog('У Вас нет прав на изменение это изменение!');
return;
}
}
После сохранения и перезапуска клиентского ПО изменения вступят в силу.
Паша, при такой реализации оно сообщение выдавать будет, а задачу все равно можно перемещать.
Чтобы задача возвращалась на место, нужно добавить:
function ScheduleControlOnAfterDragEvent(ScheduleControl, Event, DoAccept) { if (!Connector.CurrentUser.IsAdmin || (dlEvents.Dataset.Values('AuthorID') != Connector.CurrentUser.ContactID)) { ShowInformationDialog('У Вас нет прав на изменение это изменение!'); DoAccept.Value = false; return; } }
Аня, спасибо за замечание! :smile:
С DoAccept будет правильнее!