Дата начала задачи в бизнес-процессе

Иногда нужно установить дату начала задачи в соответствии со значением, которое берется, например, из договора или продажи (эти сущности тоже создаются в ходе бизнес-процесса). На комьюнити есть похожая тема. На ее основе был написан следующий код.

У меня была не одна задача, поэтому использована конструкция 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;  
        }
//----

Нравится

Поделиться

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