Иногда нужно установить дату начала задачи в соответствии со значением, которое берется, например, из договора или продажи (эти сущности тоже создаются в ходе бизнес-процесса). На комьюнити есть похожая тема. На ее основе был написан следующий код.
У меня была не одна задача, поэтому использована конструкция switch. Некоторые задачи "зависели" от ключевой даты не "прямо", а, например, нужно было их поставить за 1 или 2 дня до нужной даты. Это тоже описано в примере.
Примечания. Имя ActionItem.Name-- элемент задачи в диаграмме, для которой дату “отсчета” начала задачи (ExecuteDate) нужно поменять. Дата берется из параметров диаграммы (TaskStartDate). По умолчанию дата вычисляется "стандартно”.
Что интересно -- все механизмы вычисления окончания задачи остаются такими же, то есть из карточки задачи (в бп) можно настроить продолжительность задачи.
switch (ActionItem.Name) {
case ('Task1'): //задача, для которой началом есть дата1 -- дата из параметра
var Diagram = GetDiagramByItem(ActionItem);
var ExecuteDate = WFGetParamValue(Diagram, 'TaskStartDate');
break;
case ('Task2'): //дата2 -- за 2 дня до предыдущей даты
var Diagram = GetDiagramByItem(ActionItem);
var ExecuteDate = WFGetParamValue(Diagram, 'TaskStartDate');
ExecuteDate = AddDateDays(new Date(ExecuteDate), -2, true).getVarDate();
break;
default:
var ExecuteDate = ItemDataset.ValAsDateTime('ExecuteDate');
break;
}
этот "кусок" кода нужно вставить вместо строчки
var ExecuteDate = ItemDataset.ValAsDateTime('ExecuteDate');
в скрипте wa_TaskAction.
еще один момент -- может, кому-то и это пригодится. В бп есть элемент "настраиваемое окно редактирования", в котором можно выбрать определенные поля для изменения. В моем примере это была дата начала задачи, которая в самой карточке имела тип "дата/время", но при отображении в "урезаном" виде (через вышеупомянутое настраиваемое окно редактирования) время нельзя было изменить. Покопавшись в скрипте построения этого окна, приходим к такой модификации скрипта wnd_CustomEditWindowScript:
в функции BuildDataControl(Window, ParentComponent, DatasetLink, DataField)
добавить (где-то в конце, после создания компонента)
//----для даты -- тип контрола дата/время
if (ComponentType == 'DateTimeDataControl') {
Component.Kind = dtkDateTime;
}
//----