# Скрипт для модуля "Выбор" при согласовании в параллельных ветках "Ветвление" (пример скрипта для дизайнера) **Category:** [Дизайнер процессов](https://community.tezis-doc.ru/c/workflow-guides/44) **Created:** 2024-07-02 08:09 UTC **Views:** 131 **Replies:** 0 **URL:** https://community.tezis-doc.ru/t/skript-dlya-modulya-vybor-pri-soglasovanii-v-parallelnyh-vetkah-vetvlenie-primer-skripta-dlya-dizajnera/271 --- ## Post #1 by @d.slepnev Скрипт для параллельного согласования карточки с именными ролями и состояниями. Пример, такой схемы на скриншоте. ![image|666x500](upload://st10PhXg7hF7uSw0AEwTc5P2pH3.png) Из-за специфики работы модуля "Ветвление" и "Объединение" с наскока такую схему реализовать не получится. Требуется скриптом вычислять, было ли отклонение и если да, то выводить карточку на доработку. В противном случае вести процесс дальше. Ниже скриншот правильной схемы. Суть - добавляются состояния по каждому выходу, выходы группируются в пустой модуль и таким образом достигаем правила "сколько веток в ветвлении столько входов в объединение". ![image|514x500](upload://oAbd8vc7ejwzOmM9e5qGazoqNi6.png) Так же добавляется модуль "Выбор", в котором вычисляется направление движения по процессу. Ниже скрипт. **ToImprovement** ``` import com.haulmont.cuba.core.EntityManager import com.haulmont.cuba.core.Persistence import com.haulmont.cuba.core.Query import com.haulmont.cuba.core.global.AppBeans EntityManager em = AppBeans.get(Persistence.class).getEntityManager(); Query query = em.createNativeQuery("select a.id from wf_Assignment a where a.card_id = '" + card.id + "' and a.outcome in('Otkloneno_IT','Otkloneno_VB','Otkloneno_RI') and a.name in ('Na_soglasovanii_u_IT_direktora', 'Na_soglasovanii_u_vladelca_budzheta', 'Na_soglasovanii_u_ruk__iniciatora') and a.iteration = (select MAX(ass.iteration) from wf_Assignment ass where ass.card_id = '" + card.id + "' and ass.name = a.NAME)"); Object result = query.getFirstResult(); return result != null || card.state.contains("Otkloneno_IT") || card.state.contains("Otkloneno_VB") || card.state.contains("Otkloneno_RI") ; ``` В ***a.outcome*** указываются имена неуспешных выходов, ***a.name*** - имена этапов из ветвления, ***card.state.contains*** - перечислить состояния при неуспешных переходах. Если есть хотя бы одно неуспешное состояние, то идем по ветке "Да" в доработку. Если иначе, то движемся дальше по процессу. --- **Canonical:** https://community.tezis-doc.ru/t/skript-dlya-modulya-vybor-pri-soglasovanii-v-parallelnyh-vetkah-vetvlenie-primer-skripta-dlya-dizajnera/271 **Original content:** https://community.tezis-doc.ru/t/skript-dlya-modulya-vybor-pri-soglasovanii-v-parallelnyh-vetkah-vetvlenie-primer-skripta-dlya-dizajnera/271