Прервать бизнес-процесс по условию.

1. Johney20 25.04.18 15:31 Сейчас в теме
Всем привет!
Такой вопрос:

Выполнение моей обработки по определенному условию должна прервать бизнес процесс. Обработка не внешняя. Как мне это сделать? Я так понимаю, необходимо обратиться к форме этого бп и там уже как-то прервсать его??
В общем, пока не разобралась, но накидала примерный код. Подскажите?

					
					Иначе
						мЗаявка = Выборка.СсылкаЗаявка;
						
						Запрос = Новый Запрос;
						Запрос.Текст = "ВЫБРАТЬ
						               |	Согласование.Ссылка КАК БП
						               |ИЗ
						               |	БизнесПроцесс.Согласование КАК Согласование
						               |ГДЕ
						               |	Согласование.Предмет = &Предмет";
						Запрос.УстановитьПараметр("Предмет", мЗаявка);
						Пока нВыборка.Следующий() Цикл
							мБизнесПроцесс = нВыборка.БП.получитьОбъект();
							ФормаБП = БизнесПроцессы.Согласование.ПолучитьФорму("ФормаБизнесПроцесса",мБизнесПроцесс);
							мПрервать = ФормаБП.ЭлементыФормы...??				
						КонецЦикла;
						
						
					КонецЕсли;
Показать
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Healer 1 25.04.18 15:44 Сейчас в теме
Не следует переменную называть зарезервированным словом "БизнесПроцесс".
3. sergathome 4 25.04.18 15:44 Сейчас в теме
1. Форму в принципе нельзя получить на сервере.
2. Как правильно прервать процесс посмотрите отладчиком стандартный механизм.
4. Healer 1 25.04.18 15:44 Сейчас в теме
Форму БП получать не надо: просто прерывайте процесс, примерно так:

Если БизПроцесс.Стартован Тогда
     БизПроцесс.ПолучитьОбъект().ВыполнитьЗавершениеБизнесПроцесса();
КонецЕсли;
5. Healer 1 25.04.18 15:53 Сейчас в теме
Соответственно, процедура "ВыполнитьЗавершениеБизнесПроцесса" находится в модуле объекта каждого вида бизнес-процесса, как видите.
6. Healer 1 25.04.18 15:55 Сейчас в теме
Пример такой процедуры бизнес-процесса "СогласованиеЗаказаПокупателя":

// Процедура выполняет принудительное завершение бизнес-процесса.
//
Процедура ВыполнитьЗавершениеБизнесПроцесса(НовоеСостояниеСогласования = Неопределено) Экспорт

	Запрос       = Новый Запрос;
	Запрос.УстановитьПараметр("БизнесПроцесс" , Ссылка);
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Задачи.Ссылка КАК ЗадачаПользователя
	|ИЗ
	|	Задача.ЗадачиПользователя КАК Задачи
	|ГДЕ
	|	Задачи.БизнесПроцесс = &БизнесПроцесс
	|	И Задачи.Выполнена = ЛОЖЬ";

	Выборка        = Запрос.Выполнить().Выбрать();
	РазмерВыборки  = Выборка.Количество();
	СчетчикВыборки = 0;

	НачатьТранзакцию();

	Пока Выборка.Следующий() Цикл

		#Если Клиент Тогда
		Состояние("Обработка:" + СчетчикВыборки + " из " + РазмерВыборки);
		#КонецЕсли

		СчетчикВыборки = СчетчикВыборки + 1;
		Попытка

			ЗадачаОбъект = Выборка.ЗадачаПользователя.ПолучитьОбъект();
			ЗадачаОбъект.Выполнена = Истина;
			ЗадачаОбъект.Записать();

		Исключение

			ВызватьИсключение "Ошибка при выполнении задачи:" + Строка(Выборка.ЗадачаПользователя)
								+ Символы.ПС + "По причине: " + ОписаниеОшибки();
		КонецПопытки;
	КонецЦикла;

	ДатаЗавершения        = ТекущаяДата();
	Завершен              = Истина;
	ЗавершенПринудительно = Истина;

	Если НовоеСостояниеСогласования <> Неопределено Тогда
		СостояниеСогласования = НовоеСостояниеСогласования;
	КонецЕсли;

	Попытка

		Записать();

	Исключение

		ВызватьИсключение "Ошибка при записи бизнес-процесса:" + Строка(Ссылка)
							+ Символы.ПС + "По причине: " + ОписаниеОшибки();
	КонецПопытки;

	ЗафиксироватьТранзакцию();

КонецПроцедуры // ВыполнитьЗавершениеБизнесПроцесса()
Показать
7. Healer 1 25.04.18 16:01 Сейчас в теме
Ваш код будет выглядеть примерно так:

 Иначе
                        мЗаявка = Выборка.СсылкаЗаявка;
                        
                        Запрос = Новый Запрос("
                                       |ВЫБРАТЬ
                                       |    Согласование.Ссылка КАК БП
                                       |ИЗ
                                       |    БизнесПроцесс.Согласование КАК Согласование
                                       |ГДЕ
                                       |    Согласование.Предмет = &Предмет");
                        Запрос.УстановитьПараметр("Предмет", мЗаявка);
                        нВыборка = Запрос.Выполнить().Выбрать();
                        Пока нВыборка.Следующий() Цикл
                             Если нВыборка.БП.Стартован Тогда 
                                   нВыборка.БП.ПолучитьОбъект().ВыполнитьЗавершениеБизнесПроцесса(); 
                             КонецЕсли;
                        КонецЦикла;
КонецЕсли;
Показать
Aquashop; +1 Ответить
8. Vitaly1C8 25.04.18 17:12 Сейчас в теме
Как вариант, о котором наверняка не все программисты знают, - есть возможность создать Комплексный процесс; В настройках которого можно указывать условия (для старта стадий) Часто этого функционала достаточно чтобы не прибегать к программированию.
9. Healer 1 26.04.18 15:45 Сейчас в теме
(8) Я такое только в "1С Документообороте" видел. Там комплексные процессы самые ходовые, но тут явно конфигурация не ДО.
10. user1765896 15.08.22 12:24 Сейчас в теме
(7) пожалуйста, подскажите код, если мне нужно завершать процесс при не согласование одного пользователя.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)