Доброго времени суток, коллеги!
Сегодня решал одну интересную, с практичной точки зрения, задачу: клиенту требовалось чтобы при добавлении задачи, если в выбранный период для ответственного в расписании уже существует задача, время начала и время конца автоматически сдвигались на свободный участок в расписании. Спешу поделиться с Вами одним из вариантов решения!
В моем примере за основу взят следующий алгоритм: сдвигаем время задачи на час вперед до того времени, пока не удастся избежать наложения.
Для этого требуется внести следующие изменения в обработчик события btnOkOnClick в сервисе scr_TaskEdit:
var StartDate = Dataset.ValAsDateTime('StartDate');
var DueDate = Dataset.ValAsDateTime('DueDate');
var OwnerIDDataField = Dataset.DataFields.ItemsByName('OwnerID');
while(GetIsTaskCoverExists(Dataset, OwnerIDDataField.Value, StartDate,
DueDate))
{
var StartDate = new Date(Dataset.ValAsDateTime('StartDate'));
var DueDate = new Date(Dataset.ValAsDateTime('DueDate'));
StartDate.setHours(StartDate.getHours() + 1);
DueDate.setHours(DueDate.getHours() + 1);
StartDate = StartDate.getVarDate();
DueDate = DueDate.getVarDate();
Dataset.Values('StartDate') = StartDate;
Dataset.Values('DueDate') = DueDate;
}
В итоге получим примерно следующее содержимое функции обработчика события: