Реализовать запрет на изменение просроченных задач несложно - достаточно программно отключать кнопку Ok в окне редактирования задачи, если задача просрочена. Однако как можно препятствовать перетягиванию задач в расписании?
Для этого следует отлавливать события
1) OnBeforeDragEvent
2) OnAfterDragEvent
3) OnBeforeSizingEvent
4) OnAfterSizingEvent
Они появились начиная со сборки 227 версии 3.3.2.
Откройте Terrasoft Administrator и найдите wnd_SchedulerArea
Для реализации запрета перетаскивания задач необходимо создать событие ScheduleControlOnAfterDragEvent:
В визуальных компонентах выберите ScheduleControl, перейдите на вкладку События и создайте событие двойным кликом в соответствующем поле:
В результате откроется скрипт. Необходимо вставить следующий программный код вместо //TODO
Dataset.Locate('ID', Event.ID);
if (GetDateDiff(new Date().getVarDate(), Event.Finish, 'Minute')0){
DoAccept.Value = false;
//MessageBox("Нельзя перетаскивать просроченные задачи!");
}
Сохранить скрипт scr_SchedulerArea. Сохранить карточку wnd_SchedulerArea.
В результате перетаскивание визуально будет происходить, однако сроки меняться не будут, а задача после перетаскивания будет возвращаться на прежнее место. Можно добавить дополнительное сообщение-уведомление, раскомментировав строку (уберите двойной слеш //).
Для предотвращения изменения просроченных событий менеджерами необходимо также добавить аналогичный функционал на событие OnAfterSizingEvent
В результате если одна из перетаскиваемых задач не может быть перемещена, то все задачи останутся на прежних местах. Таким же образом если расширять задачу, нужно использовать обработчик OnBeforeSizingEvent или OnAfterSizingEvent