Имя: Пароль:
1C
 
Контроль завершения ведущей задачи для нескольких вложенных бизнес-процессов
,
0 beholder13
 
21.11.16
11:20
Коллеги, здравствуйте.

Суть задачи:
Имеются два бизнес-процесса. Одна из точек маршрута первого процесса имеет вид ВложенныйБизнесПроцесс, при инициализации в ней задачи создаются несколько экземпляров второго процесса (сделано для независимой адресации и чтобы проще было РЛСы накладывать, а также для большей универсальности механизма). Необходимо отследить завершение всех вложенных процессов, и только после этого выполнить ведущую задачу. Проблема в том, что ведущая задача автоматически уходит на выполнение при завершении любого из вложенных процессов. Если проверяю в событиях перед/при выполнении ведущей задачи с установкой флага отказа, то откатывается вся транзакция, в том числе и выполнение задачи вложенного процесса и, как следствие, завершение вложенного процесса.

Вопросы:
1. Правильно ли создавать несколько вложенных процессов для одной задачи? В ДО для каждого экземпляра вложенного процесса создается отдельная задача, но я не знаю, насколько верен такой подход, ведь ФормируемыеБизнесПроцессы - Массив, и я полагал, что платформа должна отследить завершение всех вложенных процессов перед тем, как выполнить ведущую задачу.
2. Действительно ли задача уходит на выполнение при завершении любого процесса и не отслеживается завершение всех процессов? Не исключена возможность того, что у меня она где-то уходит на выполнение принудительно, но однозначного ответа в документации я не нашел.
3. Можно ли где-то впилиться в пределах одной транзакции между завершением вложенного процесса и выполнением ведущей задачи и принудительно, но красиво зафиксировать транзакцию раньше, чем она дойдет до события ПередВыполнением ведущей задачи?

Версия платформы 8.2.19.130.

Заранее спасибо за Ваше участие.
1 Fedor-1971
 
21.11.16
11:26
(0) точки разъединения и слияния посмотри, может будет достаточно.
Самый хитрый способ - вставляем элемент "Ожидание" и делаем петлю "Если все процессы завершены" да - продолжаем, нет - возвращаемся к элементу "Ожидание"
2 beholder13
 
21.11.16
11:30
(1) Интересненько, но как-то костыльно, ведь ведущая задача выполнится к моменту входа в этот новый элемент (если я правильно понял, что речь об еще одной точке маршрута с условием), а у меня помимо исполения задач есть еще и наблюдение, то есть, наблюдатели по ведущему процессу получают сводную информацию по вложенным процессам, если ведущая задача в этой точке не выполнена
3 beholder13
 
21.11.16
11:39
(1) Точки разделения подразумевают предопределенный набор точек маршрута, тогда как у меня речь о динамическом формировании однотипных параметризуемых сущностей с независимым параллельным выполнением (по сути, асинхрон, только в другой плоскости). Сколько будет вложенных процессов - неизвестно и неважно. Как они завершатся, также не важно, нужно только отследить, чтобы они завершились все, так как на следующей точке уже идет сводный анализ результата выполнения предыдущей задаче.
4 Лефмихалыч
 
21.11.16
11:42
надо на карту добавить разделение и слияние, тогда ни чего искать не надо - оно само контролирует.

ну, либо, перед выполнением искать и отказывать
5 Fedor-1971
 
21.11.16
11:43
(2) так на точке разделения создаём кучу БП, на точку слияния они придут сами одновременно (ну или как получится) контроль возложен на основной БП
6 Fedor-1971
 
21.11.16
11:45
5+ Разделение - ничего нет - Слияние, в Разделении создали БП в Слиянии получили результат их работы
7 beholder13
 
21.11.16
11:49
(4) (5) То есть, ПредыдущаяТочка ---> ТочкаРазделения ---> ТочкаВложенныхПроцессов ---> ТочкаСлияния ---> СледующаяТочка?
И тогда платформа начнет контролировать весь массив вложенных процессов? Сейчас попробую, спасибо.
8 beholder13
 
21.11.16
11:52
У точки разделения есть только одна исходящая линия
9 beholder13
 
21.11.16
11:55
(4) >> перед выполнением искать и отказывать
В этом случае откатывается вся транзакция, в том числе и выполнение задачи вложенного процесса, что не должно расцениваться, как ошибка
10 beholder13
 
21.11.16
11:57
(4) (5) Получается так, что на карте маршрута нужно задать несколько выходов из точки разделения, тогда как у меня только одна. Вы предлагаете наплодить гвоздями несколько болваночных точек? В таком случае, я мысленно аплодирую такому решению.
11 Fedor-1971
 
21.11.16
12:00
(10) Пробуй без ТочкаВложенныхПроцессов
Прямо в разветвлении генерируй столько БП скольку нужно и стартуй их, в слияние основной БП приедет, когда завершатся все созданные БП
12 Fedor-1971
 
21.11.16
12:03
11+ только признак укажи что это подчинённый БП, сейчас не помню, поле что-то типа "ведущий БП" у подчинённого
13 beholder13
 
21.11.16
12:11
(11) (12) Ненене, что-то далеко Вас занесло, коллега) Это явный костыль)
14 Fedor-1971
 
21.11.16
12:14
(13) Это штатный механизм, костыль был в (1) - ручное ожидание всех БП
15 beholder13
 
21.11.16
12:14
+13 Причем не будет работать, потому что точка разделения тупо стартует все следующие точки маршрута (по крайней мере, в этой версии платформы), никак на них не влияя, и уж тем более абсурдным выглядит утверждение "создай процессы в точке разделения". Тут или я не лыжник, или лыжи не смазаны.

И подчинение указывается в точке маршрута, от вида которой Вы здесь же и предлагаете отказаться, что тоже выглядит сомнительно.
16 beholder13
 
21.11.16
12:15
(14) Динамика, понимаете? Я не могу заранее в карте маршрута указать, сколько именно у меня будет вложенных процессов, их может быть один, два, десять, триста в зависимости от аналитики ведущего процесса.
17 beholder13
 
21.11.16
12:23
+16 И платформа штатно подразумевает создание нескольких вложенных процессов для одной точки маршрута, так где же здесь костыль, если речь идет о поиске возможности отследить этот самый штатный момент завершения вложенных БП, если уж платформа сама не соизволит свою штатную фичу штатно отработать? Или же лучше нагородить левых бессмысленных ветвлений с точками создания вложенных процессов, которые, на самом деле, не вложенные процессы. и дать платформе думать, что это простой набор параллельных задач? В таком случае есть решение куда проще - на той же точке маршрута генерируем несколько ведущих задач, и они автоматом сгенерируют под себя по одному процессу, и не толкнется ведущий процесс дальше, пока не завершатся все ведущие задачи, при неодходимости просто условие поставить, которое будет отслеживать завершение всех ведущих задач.
Но не к этому стремимся же, речь идет о прямом наследовании один-ко-многим, если платформа подразумевает возможность генерирования нескольких вложенных процессов для одной задачи, то должна быть возможность и отследить выполнение так же в рамках одной задачи.
18 Fedor-1971
 
21.11.16
12:28
(17) тут надо пробовать, логика примерно такая: создаём подчинённые БП на точке разветвления и ожидаем их на точке слияния. Основной задачи, вроде, может и не быть - её роль выполняет вложенный БП.
19 beholder13
 
21.11.16
12:32
(18) Что Вы вкладываете в понятие "создаём подчинённые БП на точке разветвления"? Можете меня просветить, я немного не понимаю этого утверждения, потому что уверен, что на точках разделения нет событий, и они не имеют отношения к вложенным процессам.

>> Основной задачи, вроде, может и не быть - её роль выполняет вложенный БП
Что, простите?
20 Fedor-1971
 
21.11.16
12:46
(19) Давно с БП не возился, подзабыл.
21 beholder13
 
21.11.16
12:49
(20) В любом случае, спасибо за предложенные варианты =)
22 beholder13
 
21.11.16
14:42
Ап
23 beholder13
 
21.11.16
17:15
Ответы на два основных вопроса:

1. Для одной задачи должен быть строго один вложенный процесс.
2. В методе ПриСозданииВложенныхБизнесПроцессов используется массив для оптимизации создания - событие вызывается один раз для всего пула задач, созданных на данной точке, и массив ФормируемыеБизнесПроцессы генерируется в соответствии с массивом ФормируемыеЗадачи.

Таким образом, необходимо создать несколько ведущих задач, каждая из которых будет отслеживать выполнение своего вложенного процесса. Платформа штатно ожидает выполнения всех задач перед тем, как толкнуть основной процесс.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой