Имя: Пароль:
1C
 
Завершение бизнес-процесса
,
0 KODin1C
 
16.06.16
11:21
Надо сделать обработку по завершению бизнес процесса.

Но чтобы при этом завершались связаныне с ним задачи.

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

Однако в Б-П не разбираюсь, есть ведь еще точки,  вложенные б-п.

Кто чего может по этому подсказать?
1 Лефмихалыч
 
16.06.16
11:25
Надо выполнить все задачи и процесс выполнится сам.
2 GROOVY
 
16.06.16
11:25
Рекурсивно обходишь все активные точки (задачи) и завершаешь их.
3 lxs
 
16.06.16
11:25
Там всё очень просто. На схеме БП есть точка завершения этого БП, у этой точки есть обработчик.

В нем пиши, всё, что хочешь. Ищи задачи по ссылке на этот БП и т.п.
4 Лефмихалыч
 
16.06.16
11:26
В типовом ДО есть механизм прерывания процесса - просто реквизит Состояние у бизнес процесса устанавливаешь в Прерван и все остальное подписки сами сделают.
5 lxs
 
16.06.16
11:27
(4) как это (0) поможет, если у него не ДО
6 Лефмихалыч
 
16.06.16
11:30
(3) пока есть не выполненные задачи, до точки завершения ни чего не дойдет

(5) из чего ты сделал вывод, что у него не ДО?
7 lxs
 
16.06.16
11:31
(6) а с чего ты сделал вывод об обратном?
8 KODin1C
 
16.06.16
11:31
(6) У меня УПП объединенная с CRM.
9 Лефмихалыч
 
16.06.16
11:32
(7) да ни из чего. Я это написал к тому, что там можно посмотреть, как это надо делать.
10 lxs
 
16.06.16
11:33
(6) Вчитайся в (0) там нет ни слова про нормальное завершение БП по задачам. У человека есть задача завершить досрочно БП. А не ждать последовательное выполнение всех задач пользователями. По крайней мере я так услышал автора.
11 lxs
 
16.06.16
11:34
(9) Как правило в типовых такая каша из "правильных" алгоритмов, что проще самому написать..
12 KODin1C
 
16.06.16
11:42
Вот накидал код     
    БПОбъект = БП.ПолучитьОбъект();
    БПОбъект.Завершен = Истина;
    БПОбъект.ЗавершенДосрочно = Истина;
    БПОбъект.ВариантЗавершения = Перечисления.CRM_ВариантыЗавершения.Успешно;
    БПОбъект.Записать();
    
    Запрос = новый Запрос;
    
    Запрос.Текст = "ВЫБРАТЬ
                   |    CRM_Задача.Ссылка КАК Задача
                   |ИЗ
                   |    Задача.CRM_Задача КАК CRM_Задача
                   |ГДЕ
                   |    НЕ CRM_Задача.ПометкаУдаления
                   |    И CRM_Задача.БизнесПроцесс = &БизнесПроцесс
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    Задача";
    
    
    Запрос.УстановитьПараметр("БизнесПроцесс", БП);
    тзЗадачи = Запрос.Выполнить().Выгрузить();
    
    Для Каждого стрЗадач ИЗ тзЗадачи Цикл
         объЗадача =  стрЗадач.Ссылка.ПолучитьОбъект();
        
        объЗадача.ДатаФактическогоВыполнения = РабочаяДата;
        ОбъектЗадача.Выполнена = Истина;
        ОбъектЗадача.БизнесПроцессЗавершенДосрочноНаТекущемЭтапе = Истина;        
        
        объЗадача.Записать();
    КонецЦикла;
13 KODin1C
 
16.06.16
11:43
Поправил немного

Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    
    БПОбъект = БП.ПолучитьОбъект();
    БПОбъект.Завершен = Истина;
    БПОбъект.ЗавершенДосрочно = Истина;
    БПОбъект.ВариантЗавершения = Перечисления.CRM_ВариантыЗавершения.Успешно;
    БПОбъект.Записать();
    
    Запрос = новый Запрос;
    
    Запрос.Текст = "ВЫБРАТЬ
                   |    CRM_Задача.Ссылка КАК Задача
                   |ИЗ
                   |    Задача.CRM_Задача КАК CRM_Задача
                   |ГДЕ
                   |    НЕ CRM_Задача.ПометкаУдаления
                   |    И CRM_Задача.БизнесПроцесс = &БизнесПроцесс
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    Задача";
    
    
    Запрос.УстановитьПараметр("БизнесПроцесс", БП);
    тзЗадачи = Запрос.Выполнить().Выгрузить();
    
    Для Каждого стрЗадач ИЗ тзЗадачи Цикл
        Если не объЗадача.Выполнена Тогда
            объЗадача =  стрЗадач.Ссылка.ПолучитьОбъект();
            
            объЗадача.ДатаФактическогоВыполнения = РабочаяДата;
            объЗадача.Выполнена = Истина;
            объЗадача.БизнесПроцессЗавершенДосрочноНаТекущемЭтапе = Истина;        
            
            объЗадача.Записать();
        КонецЕСли;
    КонецЦикла;
    
    
    
КонецПроцедуры
14 lxs
 
16.06.16
11:46
(13) тебе не надо выполнять связанные с задачами алгоритмы (если таковые имеются)? То есть, например, при выполнении какой-то задачи у тебя должна была выполняться отправка уведомления..
15 KODin1C
 
16.06.16
11:48
(14) Хз.
16 vde69
 
16.06.16
11:51
(1) (2) от Вас такого не ожидал...

правильно будет сначала завершить БП а потом выполнить все открытые задачи, по тому как в противном случае при выполнение задачи будет создаваться новая и возможно зацикливание...
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший