Прервать бизнес-процесс по условию.
Всем привет!
Такой вопрос:
Выполнение моей обработки по определенному условию должна прервать бизнес процесс. Обработка не внешняя. Как мне это сделать? Я так понимаю, необходимо обратиться к форме этого бп и там уже как-то прервсать его??
В общем, пока не разобралась, но накидала примерный код. Подскажите?
Такой вопрос:
Выполнение моей обработки по определенному условию должна прервать бизнес процесс. Обработка не внешняя. Как мне это сделать? Я так понимаю, необходимо обратиться к форме этого бп и там уже как-то прервсать его??
В общем, пока не разобралась, но накидала примерный код. Подскажите?
Иначе
мЗаявка = Выборка.СсылкаЗаявка;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Согласование.Ссылка КАК БП
|ИЗ
| БизнесПроцесс.Согласование КАК Согласование
|ГДЕ
| Согласование.Предмет = &Предмет";
Запрос.УстановитьПараметр("Предмет", мЗаявка);
Пока нВыборка.Следующий() Цикл
мБизнесПроцесс = нВыборка.БП.получитьОбъект();
ФормаБП = БизнесПроцессы.Согласование.ПолучитьФорму("ФормаБизнесПроцесса",мБизнесПроцесс);
мПрервать = ФормаБП.ЭлементыФормы...??
КонецЦикла;
КонецЕсли;
ПоказатьПо теме из базы знаний
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
Пример такой процедуры бизнес-процесса "СогласованиеЗаказаПокупателя":
// Процедура выполняет принудительное завершение бизнес-процесса.
//
Процедура ВыполнитьЗавершениеБизнесПроцесса(НовоеСостояниеСогласования = Неопределено) Экспорт
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("БизнесПроцесс" , Ссылка);
Запрос.Текст =
"ВЫБРАТЬ
| Задачи.Ссылка КАК ЗадачаПользователя
|ИЗ
| Задача.ЗадачиПользователя КАК Задачи
|ГДЕ
| Задачи.БизнесПроцесс = &БизнесПроцесс
| И Задачи.Выполнена = ЛОЖЬ";
Выборка = Запрос.Выполнить().Выбрать();
РазмерВыборки = Выборка.Количество();
СчетчикВыборки = 0;
НачатьТранзакцию();
Пока Выборка.Следующий() Цикл
#Если Клиент Тогда
Состояние("Обработка:" + СчетчикВыборки + " из " + РазмерВыборки);
#КонецЕсли
СчетчикВыборки = СчетчикВыборки + 1;
Попытка
ЗадачаОбъект = Выборка.ЗадачаПользователя.ПолучитьОбъект();
ЗадачаОбъект.Выполнена = Истина;
ЗадачаОбъект.Записать();
Исключение
ВызватьИсключение "Ошибка при выполнении задачи:" + Строка(Выборка.ЗадачаПользователя)
+ Символы.ПС + "По причине: " + ОписаниеОшибки();
КонецПопытки;
КонецЦикла;
ДатаЗавершения = ТекущаяДата();
Завершен = Истина;
ЗавершенПринудительно = Истина;
Если НовоеСостояниеСогласования <> Неопределено Тогда
СостояниеСогласования = НовоеСостояниеСогласования;
КонецЕсли;
Попытка
Записать();
Исключение
ВызватьИсключение "Ошибка при записи бизнес-процесса:" + Строка(Ссылка)
+ Символы.ПС + "По причине: " + ОписаниеОшибки();
КонецПопытки;
ЗафиксироватьТранзакцию();
КонецПроцедуры // ВыполнитьЗавершениеБизнесПроцесса()
Показать
Ваш код будет выглядеть примерно так:
Иначе
мЗаявка = Выборка.СсылкаЗаявка;
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Согласование.Ссылка КАК БП
|ИЗ
| БизнесПроцесс.Согласование КАК Согласование
|ГДЕ
| Согласование.Предмет = &Предмет");
Запрос.УстановитьПараметр("Предмет", мЗаявка);
нВыборка = Запрос.Выполнить().Выбрать();
Пока нВыборка.Следующий() Цикл
Если нВыборка.БП.Стартован Тогда
нВыборка.БП.ПолучитьОбъект().ВыполнитьЗавершениеБизнесПроцесса();
КонецЕсли;
КонецЦикла;
КонецЕсли;
Показать
Как вариант, о котором наверняка не все программисты знают, - есть возможность создать Комплексный процесс; В настройках которого можно указывать условия (для старта стадий) Часто этого функционала достаточно чтобы не прибегать к программированию.
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)