Добрый день,

 

Хочу создать бизнес-процесс "Отпуск". Суть в том, что сотрудник, уходя в отпуск запускает данный процесс, и на время его отсутствия активности передаются его заместителю.

 

Имеется "Автогенерируемая страница", в которой 4 поля (Отправитель, Получатель, Дата начала, Дата завершения). 

  1. Отправитель - сотрудник, уходящий в отпуск
  2. Получатель - заместитель
  3. Дата начала - с какого дня начинают передачу активностей на заместителя
  4. Дата завершения - когда закончить передачу и завершить бизнес-процесс.

 

Хотел реализовать через Сигнал, но в него не получается передавать значения. А если делать Сигнал на просто Добавление активности, без каких-либо условий, то получается бизнес-процесс постоянно работает, и в итоге выдает ошибку, что максимальное количество повторения превышено.

Нравится

16 комментариев
Лучший ответ

_KSL_,

 

В таком случае Вам нужно следующее.

1. В срм хранить информацию об отпусках сотрудников, например, реализовать деталь в разделе 'Сотрудники'. Структура её может быть следующей - сотрудник, дата начала отпуска, дата завершения отпуска, кому делегировать задачи. Для избежания путаницы я бы не давала сотрудникам самостоятельно вносить эту инфрмацию. Логично, что это должен делать либо ответственный за отпуска, либо HR-менеджер, либо бухгалтер.

2. Реализовать процесс, который будет автоматически запускаться по расписанию раз в сутки, когда нагрузка на систему минимальна, например, ночью или ранним утром. Данный процесс будет проверять, есть ли в отпусках сотрудники и актуализировать ответственных по их задачам.

Может быть проще использовать уже готовый бизнес-процесс по делегированию прав или модифицировать его? https://marketplace.terrasoft.ru/template/delegirovanie-prav-dostupa-na…

Сигнал не нужен, ведь данный БП запускается вручную.

После автогенерируемой страницы читаем первую запись Activity с нужными параметрами (от-до, где Ответственный = Сотрудник, ну и задача еще не завершена).

Если такая запись найдена (Id!=Guid.Empty), то модифицируем Activity, устанавливая Ответственный = Заместитель.

И снова возвращаемся к чтению записи Activity.



Конечно, нужно спрогнозировать ориентировочное количество возможных задач.



И, возможно, подумать, а как возвращать ещё не выполненные задачи после отпуска

Владимир Соколов,

 

Спасибо за ваши ответы.

 

Но проблема заключается в том, что активности могут быть еще не созданы. Если активности имеются, то да, без проблем можно процесс заменить ответственного.

Даже если будем возвращаться опять к чтению, то получается происходит постоянно чтении Activity, и возвращаемся в итоге к ошибке максимальное количество повторений.

_KSL_,

 

В таком случае Вам нужно следующее.

1. В срм хранить информацию об отпусках сотрудников, например, реализовать деталь в разделе 'Сотрудники'. Структура её может быть следующей - сотрудник, дата начала отпуска, дата завершения отпуска, кому делегировать задачи. Для избежания путаницы я бы не давала сотрудникам самостоятельно вносить эту инфрмацию. Логично, что это должен делать либо ответственный за отпуска, либо HR-менеджер, либо бухгалтер.

2. Реализовать процесс, который будет автоматически запускаться по расписанию раз в сутки, когда нагрузка на систему минимальна, например, ночью или ранним утром. Данный процесс будет проверять, есть ли в отпусках сотрудники и актуализировать ответственных по их задачам.

Алла Савельева,

Спасибо за ответ 

 

Возможности хранить данные об отпусках невозможно, т.к. отпуск конечно заранее регулируется, но получается что даты могут меняться.

_KSL_,

А что мешает в том случае, если даты отпуска изменятся, откорректировать их в срм?

В любом случае, чтобы система могла выполнять какие-то действия, для неё нужно вносить вводные данные.

Давайте начнем с начала - опишите подробно, что нужно реализовать в срм и на каком этапе у Вас возникли сложности.

Алла Савельева,

 

Начнем с начала, передо мной поставлена задача по переназначению активностей, направленных на сотрудника во время его отпуска.

 

Сотрудник, который уходит в отпуск, должен запустить данный процесс. При запуске открывается "Автогенерируемая страница", в который имеется 4 поля (Отправитель - сотрудник, уходящий в отпуск, Получатель - кому будем переназначать активность, Дата начала и Дата завершения - с какого и до какого чисел будем переназначать).

 

Далее происходит чтение данных с объекта "Активность" и изменение данных "Активность" на основании условий, т.е. Ответственный = Отправитель, Дата завершения>Дата создания >= Дата начала. 

 

Но тут возникает проблема происходит постоянное чтение данных и в результате выдает ошибку, что Превышено максимальное количество повторений. 

 

Пытался избежать превышения повторений с помощью Обработки таймера, но почему чтение данных из Активность происходит долго и затем изменение данных не происходит. Якобы чтение не прошло и новый активностей не было.

 

Через делегирование прав не могу реализовать, т.к. Ответственный не меняется. А получателю придется самому искать задачи.

 

Давайте разделим непонятность выбора алгоритма и сложности в конкретной программной реализации.

 

Если Вы хотите обработать один раз существующие задачи сотрудника, то данные об отпуске хранить не надо. А если же хотите передавать и новые задачи, которых ещё нет, то без хранения не обойтись.

 

Если у Вас при чтении активностей получается максимальное количество повторений, то, скорее всего, что-то не учли в условии и не исключаете из выборки уже обработанные записи, из-за чего перебор записей продолжается всё время.

Зверев Александр,

 

Да, существующие задачи сотрудника переназначать в процессе могу, но новые не получается либо происходит длительное чтение, либо не изменяет Ответственного.

 

Правильно ли я понял, что я должен хранить к примеру в справочнике данные по отпускам(Сотрудник, Заместитель, Дата начала отпуска, Дата завершения).

И затем запускать процесс, который будет в определенное время менять Ответственного.

 

Но тогда не совсем понимаю как нужно будет организовать процесс.

Как Вы можете переназначит новые, их же ещё нет?

Если делаете логику на моменте создания или регулярно по планировщику, то нужно где-то брать информацию, у кого, на кого и с какого по какое отпуск.

Зверев Александр,

 

Я пытался делать через Автогенерируемую страницу, в ней было 4 поля у кого, кому, начало, завершение. 

 

Из полей Автогенерируемой страницу данные переходили в чтение данных, как условия (Ответственный=у кого, Завершения>Дата создания>=Начало). Далее шло изменение данных с такими же условиями, но меняли Ответственный=кому. Далее шел условный поток, в  котором сравнивалась текущая дата с завершением. Если текущая дата < Завершения, то возвращается к чтению.

 

Но у меня получалось так, что на процессе чтения данных процесс зависал либо длительное время обработка происходила, и в итоге новые активности не читал, и соответственно, т.к. он из не читал, Ответственный не менялся.

 

Если мы получаем данные из "Автогенерируемой страницы", есть ли необходимость хранить данные об отпусках отдельно в срм.

Сначала попытайтесь понять, что вы вообще хотите сделать. Если задач ещё не существует, то Вы их не вычитаете и не измените.

 Если текущая дата < Завершения, то возвращается к чтению

Вы сами написали бесконечный цикл. Естественно, процесс зависнет, а потом свалится из-за ограничений по количеству повторений. Теоретически, можно добавить таймер для задержки на несколько часов или сутки, чтобы повторения и обработка новых задач происходили реже.

_KSL_,

Если у Вас версия on-site Вы можете запустить SQL profiler и отследить запрос, который идет в базу, и понять, почему происходит зацикливание.

 

Покажите код, каким образом Вы реализовали, установку ответственных в задачах в Вашем бизнес-процессе.

Алла, он просто нарисовал в БП цикл, надеясь, что он будет постоянно до даты конца отпуска крутиться и обрабатывать появляющиеся задачи. Но так нельзя, количество повторений ограничено, а до того всё зависнет.

Зверев Александр,

Ясно. Ну, ты же, знаешь, есть старая привычка докопаться до сути вопроса)))

Тут профайлер не поможет, это будет видно на диаграмме выполнения процесса. В принципе, если с таймером и всё сделать правильно, то даже будет работать, хотя подход необычный.

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