Бизнес-процесс 1С — объект конфигурации, который ведёт работу по маршруту: руководитель согласовал заявку — она уходит в бухгалтерию, отклонил — возвращается автору. Каждый шаг с участием человека платформа превращает в задачу и после её выполнения сама двигает процесс дальше. Разберём карту маршрута и её точки, адресацию задач, обработчики модуля, старт и выполнение из кода на примере согласования заявки, а в конце — когда хватает БСП и когда нужен 1С:Документооборот.
В 1С:Предприятии бизнес-процесс и задача — объекты платформы, механика одинакова в любой конфигурации; имена типовых объектов сверены по УТ 11.4 и КА 2.5.
Типичные сценарии — согласование заявок на оплату, заказов, цен и скидок, поручения сотрудникам с контролем срока. В УТ 11.4 шесть бизнес-процессов: Задание из БСП, СогласованиеПродажи, СогласованиеЗакупки, СогласованиеЦенНоменклатуры, СогласованиеЗаявкиНаВозвратТоваровОтКлиента, ТиповаяПродажа — и одна задача ЗадачаИсполнителя. В КА 2.5 процессов 18, включая заявки сотрудников вроде ЗаявкаСотрудникаОтпуск. В УТ 11.4 механизм включают в разделе «НСИ и администрирование» → «Органайзер», флажок «Бизнес-процессы и задачи».
Программисту обычно достаётся свой маршрут согласования, запуск процесса из документа или по расписанию и выполнение задач без формы — из обработки или HTTP-сервиса.
Задача — поручение: номер, наименование, отметка Выполнена, ссылки БизнесПроцесс и ТочкаМаршрута, свои реквизиты и реквизиты адресации. Бизнес-процесс в свойстве «Задача» ссылается на одну задачу, хранит реквизиты процесса и карту маршрута. Флаг Стартован ставит метод Старт(), Завершен — платформа, когда процесс дошёл до точки завершения без невыполненных задач.
Кому достанется задача, задают свойства задачи:
| Свойство | Что задаёт | УТ 11.4, ЗадачаИсполнителя |
|---|---|---|
| Адресация | регистр сведений, где исполнители сопоставлены ролям и объектам адресации | ИсполнителиЗадач |
| Реквизиты адресации | кому адресована задача; у каждого — измерение адресации в этом регистре | Исполнитель, РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации |
| Основной реквизит адресации | конкретный исполнитель | Исполнитель |
| Текущий исполнитель | параметр сеанса для отбора «моих» задач | АвторизованныйПользователь |
Задачу адресуют человеку (заполнен основной реквизит) или роли — тогда её видит каждый, кому роль назначена в регистре адресации, обычном независимом регистре сведений. В УТ 11.4 его заполняют через «Роли и исполнители задач» в «Органайзере».
Карта маршрута бизнес-процесса в 1С — это и есть его схема: точки, соединённые линиями. Рисуют её в конфигураторе в окне редактирования бизнес-процесса, обработчики событий точек лежат в модуле объекта процесса. Обработчик создаётся из палитры свойств точки, имя — имя точки плюс событие: в УТ 11.4 это СтартПередСтартом, НужнаПроверкаПроверкаУсловия. Точки бизнес-процесса и их события:
| Точка | Назначение | События |
|---|---|---|
| Старт | начало маршрута; если точек старта несколько, нужную передают в Старт() | ПередСтартом(Точка, Отказ) |
| Действие | создаёт задачи и ждёт их выполнения | ПередСозданиемЗадач, ПриСозданииЗадач, ПередВыполнением, ПриВыполнении, ОбработкаПроверкиВыполнения |
| Условие | развилка на две ветки | ПроверкаУсловия(Точка, Результат) |
| Выбор варианта | развилка на любое число веток | ОбработкаВыбораВарианта(Точка, Результат) |
| Разделение, Слияние | запуск параллельных веток и ожидание всех веток | событий нет |
| Обработка | автоматическое действие без задачи | Обработка(Точка) |
| Вложенный бизнес-процесс | запускает дочерние процессы и ждёт их завершения | ПередСозданиемВложенныхБизнесПроцессов, ПриСозданииВложенныхБизнесПроцессов |
| Завершение | конец маршрута | ПриЗавершении(Точка, Отказ) |
Обработчики создания задач, условий и завершения неинтерактивные: окна в них не открывают, сообщить пользователю можно. Постоянного исполнителя, например роль «Бухгалтерия», задают в реквизитах адресации точки, исполнителя из реквизитов процесса — кодом в ПриСозданииЗадач.
Пример собран в своей конфигурации, имена — свои, не типовые. Маршрут: Старт → «Согласовать» (задача согласующему) → Условие «Согласовано» → да: Обработка «ОтметитьСогласование» → «Исполнить» (задача роли «Бухгалтерия») → Завершение; нет: «Доработать» (задача инициатору) → снова «Согласовать».
| Объект | Что настроить |
|---|---|
Документ ЗаявкаНаОплату | реквизиты Сумма, Согласована (Булево) |
Справочник РолиСогласования | предопределённый элемент Бухгалтерия |
Регистр сведений АдресацияСогласования | измерения Роль и Исполнитель |
Задача ЗадачаСогласования | адресация через АдресацияСогласования, реквизиты адресации Исполнитель (основной) и Роль, текущий исполнитель — параметр сеанса ТекущийПользователь; реквизиты Решение (Булево), Комментарий (Строка) |
Бизнес-процесс СогласованиеЗаявки | задача ЗадачаСогласования; реквизиты Заявка, Инициатор, Согласующий, Согласовано, КомментарийСогласующего, Круг (Число), ДатаЗавершения |
Параметр сеанса ТекущийПользователь заполняют при входе в модуле сеанса (в конфигурациях на БСП он уже есть). Модуль объекта процесса:
// Модуль объекта бизнес-процесса СогласованиеЗаявки.
// Обработчик создаётся из палитры свойств точки, имя: <Точка><Событие>.
// Реквизиты процесса пишу через ЭтотОбъект, чтобы не путать их с переменными.
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Процедура СтартПередСтартом(ТочкаМаршрутаБизнесПроцесса, Отказ)
// Без заявки и согласующего процесс не запускаем.
Если Не ЗначениеЗаполнено(ЭтотОбъект.Заявка) Или Не ЗначениеЗаполнено(ЭтотОбъект.Согласующий) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = НСтр("ru = 'Не указаны заявка или согласующий.'");
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Процедура СогласоватьПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ)
// Круг растёт при каждом возврате заявки с доработки.
ЭтотОбъект.Круг = ЭтотОбъект.Круг + 1;
ЭтотОбъект.Записать();
Для Каждого Задача Из ФормируемыеЗадачи Цикл
// Адресация конкретному пользователю: основной реквизит адресации.
Задача.Исполнитель = ЭтотОбъект.Согласующий;
Задача.Наименование = СтрШаблон(НСтр("ru = 'Согласовать %1 (круг %2)'"),
ЭтотОбъект.Заявка, ЭтотОбъект.Круг);
КонецЦикла;
КонецПроцедуры
Процедура СогласоватьПриВыполнении(ТочкаМаршрутаБизнесПроцесса, Задача, Отказ)
// Задача приходит ссылкой и к этому моменту уже записана выполненной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Задачи.Решение КАК Решение,
| Задачи.Комментарий КАК Комментарий
|ИЗ
| Задача.ЗадачаСогласования КАК Задачи
|ГДЕ
| Задачи.Ссылка = &Задача";
Запрос.УстановитьПараметр("Задача", Задача);
Выборка = Запрос.Выполнить().Выбрать();
// Сбрасываем решение прошлого круга.
ЭтотОбъект.Согласовано = Ложь;
ЭтотОбъект.КомментарийСогласующего = "";
Если Выборка.Следующий() Тогда
ЭтотОбъект.Согласовано = Выборка.Решение;
ЭтотОбъект.КомментарийСогласующего = Выборка.Комментарий;
КонецЕсли;
ЭтотОбъект.Записать();
КонецПроцедуры
Процедура СогласованоПроверкаУсловия(ТочкаМаршрутаБизнесПроцесса, Результат)
// Истина - ветка к исполнению, Ложь - возврат инициатору на доработку.
Результат = ЭтотОбъект.Согласовано;
КонецПроцедуры
Процедура ОтметитьСогласованиеОбработка(ТочкаМаршрутаБизнесПроцесса)
// Автоматический шаг без задачи: отмечаем саму заявку.
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Документ.ЗаявкаНаОплату");
ЭлементБлокировки.УстановитьЗначение("Ссылка", ЭтотОбъект.Заявка);
Блокировка.Заблокировать();
ЗаявкаОбъект = ЭтотОбъект.Заявка.ПолучитьОбъект();
ЗаявкаОбъект.Согласована = Истина;
ЗаявкаОбъект.Записать();
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ИсполнитьПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ)
// Адресация роли: исполнителя не заполняем, задачу увидит каждый,
// у кого в регистре адресации есть роль Бухгалтерия.
// Постоянную роль можно указать и в реквизитах адресации точки на карте.
Для Каждого Задача Из ФормируемыеЗадачи Цикл
Задача.Роль = Справочники.РолиСогласования.Бухгалтерия;
Задача.Наименование = СтрШаблон(НСтр("ru = 'Оплатить %1'"), ЭтотОбъект.Заявка);
КонецЦикла;
КонецПроцедуры
Процедура ДоработатьПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ)
// Возврат инициатору вместе с комментарием согласующего.
Для Каждого Задача Из ФормируемыеЗадачи Цикл
Задача.Исполнитель = ЭтотОбъект.Инициатор;
Задача.Наименование = СтрШаблон(НСтр("ru = 'Доработать %1'"), ЭтотОбъект.Заявка);
Задача.Комментарий = ЭтотОбъект.КомментарийСогласующего;
КонецЦикла;
КонецПроцедуры
Процедура ЗавершениеПриЗавершении(ТочкаМаршрутаБизнесПроцесса, Отказ)
ЭтотОбъект.ДатаЗавершения = ТекущаяДатаСеанса();
ЭтотОбъект.Записать();
КонецПроцедуры
#КонецЕсли
ФормируемыеЗадачи — массив ещё не записанных задач: заполняем адресацию и наименование, записывает их платформа после обработчика.ПриВыполнении параметр Задача — ссылка. Решение читаем запросом: задача уже записана с отметкой выполнения, так же читает результат Задание в БСП. Если задач в точке несколько, обработчик сработает на последней.Задание в БСП.ПроверкаУсловия ведёт по ветке, отмеченной на карте как истинная (по умолчанию правая).НачатьТранзакцию() допустим, даже если транзакция уже открыта.Проверку «отклонил — укажи причину» держим в модуле задачи: её событие ПередВыполнением вызывается раньше одноимённого события точки, и в нём доступен сам объект с незаписанными значениями:
// Модуль объекта задачи ЗадачаСогласования.
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Процедура ПередВыполнением(Отказ)
// Проверяем только точку Согласовать: отклонить без причины нельзя.
Если ЭтотОбъект.ТочкаМаршрута <> БизнесПроцессы.СогласованиеЗаявки.ТочкиМаршрута.Согласовать Тогда
Возврат;
КонецЕсли;
Если Не ЭтотОбъект.Решение И ПустаяСтрока(ЭтотОбъект.Комментарий) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = НСтр("ru = 'Укажите в комментарии, что исправить в заявке.'");
Сообщение.Поле = "Комментарий";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
#КонецЕсли
Чтобы работать с бизнес-процессами 1С программно, хватает трёх методов. СоздатьБизнесПроцесс() менеджера создаёт объект. Старт() ведёт процесс по карте до первой точки «Действие» или вложенного процесса, создаёт задачи и возвращает управление; без таких точек процесс пройдёт маршрут целиком и сразу завершится. ВыполнитьЗадачу() отмечает задачу выполненной, записывает её и продвигает процесс. Общий модуль с флажком «Сервер»:
// Общий модуль СогласованиеЗаявок (флажок «Сервер»).
// Создаёт и запускает согласование заявки, возвращает ссылку на процесс.
Функция ЗапуститьСогласование(Заявка, Согласующий, Инициатор) Экспорт
НачатьТранзакцию();
Попытка
// Блокируем заявку: два одновременных запуска не создадут два процесса.
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Документ.ЗаявкаНаОплату");
ЭлементБлокировки.УстановитьЗначение("Ссылка", Заявка);
Блокировка.Заблокировать();
Если ЕстьАктивноеСогласование(Заявка) Тогда
ВызватьИсключение СтрШаблон(НСтр("ru = 'По заявке %1 согласование уже идёт.'"), Заявка);
КонецЕсли;
Процесс = БизнесПроцессы.СогласованиеЗаявки.СоздатьБизнесПроцесс();
Процесс.Дата = ТекущаяДатаСеанса();
Процесс.Заявка = Заявка;
Процесс.Согласующий = Согласующий;
Процесс.Инициатор = Инициатор;
Процесс.Записать();
// Старт ведёт процесс по карте до первой точки Действие: там появится задача.
Процесс.Старт();
Если Не Процесс.Стартован Тогда
ВызватьИсключение НСтр("ru = 'Процесс не стартовал, см. сообщения.'");
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Возврат Процесс.Ссылка;
КонецФункции
// Есть ли по заявке запущенный и ещё не завершённый процесс.
Функция ЕстьАктивноеСогласование(Заявка) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Процессы.Ссылка КАК Ссылка
|ИЗ
| БизнесПроцесс.СогласованиеЗаявки КАК Процессы
|ГДЕ
| Процессы.Заявка = &Заявка
| И Процессы.Стартован
| И НЕ Процессы.Завершен
| И НЕ Процессы.ПометкаУдаления";
Запрос.УстановитьПараметр("Заявка", Заявка);
Возврат Не Запрос.Выполнить().Пустой();
КонецФункции
// Выполняет задачу без формы: из обработки, HTTP-сервиса, мобильного приложения.
Процедура ВыполнитьЗадачуСогласования(ЗадачаСсылка, Согласовано, Комментарий = "") Экспорт
ЗадачаОбъект = ЗадачаСсылка.ПолучитьОбъект();
Если ЗадачаОбъект.Выполнена Тогда
ВызватьИсключение СтрШаблон(НСтр("ru = 'Задача %1 уже выполнена.'"), ЗадачаСсылка);
КонецЕсли;
// Если задачу сейчас редактируют в форме, здесь будет исключение.
ЗадачаОбъект.Заблокировать();
ЗадачаОбъект.Решение = Согласовано;
ЗадачаОбъект.Комментарий = Комментарий;
// Ставит Выполнена, записывает задачу и двигает процесс дальше по карте.
ЗадачаОбъект.ВыполнитьЗадачу();
КонецПроцедуры
Проверка Стартован страхует от отказа в ПередСтартом: запись и старт в одной транзакции, незапущенный процесс не останется. Заблокировать() — объектная блокировка: если задачу правят в форме, будет исключение, а не конфликт записи.
Метод Записать() формы задачи принимает предопределённый параметр записи ВыполнитьЗадачу: с ним задача выполняется при записи. Его же передают стандартные команды «Выполнить» и «Выполнить и закрыть» — в точке согласования их лучше скрыть, чтобы решение принимали кнопками.
// Модуль формы задачи ЗадачаСогласования.
// Согласовать и Отклонить - команды формы, их кнопки: ФормаСогласовать, ФормаОтклонить.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Кнопки решения - только в точке Согласовать и только у невыполненной задачи.
ПоказатьКнопки = Не Объект.Выполнена
И (Объект.ТочкаМаршрута = БизнесПроцессы.СогласованиеЗаявки.ТочкиМаршрута.Согласовать);
Элементы.ФормаСогласовать.Видимость = ПоказатьКнопки;
Элементы.ФормаОтклонить.Видимость = ПоказатьКнопки;
КонецПроцедуры
&НаКлиенте
Процедура Согласовать(Команда)
ВыполнитьСРешением(Истина);
КонецПроцедуры
&НаКлиенте
Процедура Отклонить(Команда)
ВыполнитьСРешением(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьСРешением(Решение)
Объект.Решение = Решение;
// Предопределённый параметр записи формы задачи: задача выполнится при записи.
// Форму закрываем, только если запись и выполнение прошли.
Если ЭтотОбъект.Записать(Новый Структура("ВыполнитьЗадачу", Истина)) Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры
У задачи есть виртуальная таблица ЗадачиПоИсполнителю(Исполнитель, Условие): она отдаёт задачи, адресованные пользователю напрямую и через роли из регистра адресации. Без параметра берётся значение параметра сеанса из свойства «Текущий исполнитель» — на этом построен список «Мои задачи» в БСП.
// Невыполненные задачи исполнителя по заявкам: для своего списка, отчёта или бота.
Функция ЗадачиИсполнителя(Исполнитель) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Задачи.Ссылка КАК Задача,
| Задачи.Дата КАК Дата,
| Задачи.Наименование КАК Наименование,
| Задачи.ТочкаМаршрута КАК Шаг,
| Процессы.Заявка КАК Заявка,
| Процессы.Круг КАК Круг
|ИЗ
| Задача.ЗадачаСогласования.ЗадачиПоИсполнителю(&Исполнитель) КАК Задачи
| ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.СогласованиеЗаявки КАК Процессы
| ПО Задачи.БизнесПроцесс = Процессы.Ссылка
|ГДЕ
| НЕ Задачи.Выполнена
| И НЕ Задачи.ПометкаУдаления
|УПОРЯДОЧИТЬ ПО
| Дата";
Запрос.УстановитьПараметр("Исполнитель", Исполнитель);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
// Где сейчас заявка: процессы по ней и их невыполненные задачи.
Функция ХодСогласования(Заявка) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Процессы.Ссылка КАК Процесс,
| Процессы.Круг КАК Круг,
| Процессы.Завершен КАК Завершен,
| Задачи.ТочкаМаршрута КАК Шаг,
| Задачи.Исполнитель КАК Исполнитель,
| Задачи.Роль КАК Роль
|ИЗ
| БизнесПроцесс.СогласованиеЗаявки КАК Процессы
| ЛЕВОЕ СОЕДИНЕНИЕ Задача.ЗадачаСогласования КАК Задачи
| ПО (Задачи.БизнесПроцесс = Процессы.Ссылка)
| И (НЕ Задачи.Выполнена)
| И (НЕ Задачи.ПометкаУдаления)
|ГДЕ
| Процессы.Заявка = &Заявка
| И НЕ Процессы.ПометкаУдаления
|УПОРЯДОЧИТЬ ПО
| Процессы.Дата УБЫВ";
Запрос.УстановитьПараметр("Заявка", Заявка);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Запросы удобно отлаживать в бесплатной консоли запросов; в типовой подставьте Задача.ЗадачаИсполнителя и реквизит РольИсполнителя.
В типовых на БСП — УТ 11, КА 2, ERP — свой процесс с нуля нужен редко. Подсистема «Бизнес-процессы и задачи» (см. статью про БСП) уже содержит процесс Задание — поручение с необязательной проверкой, задачу ЗадачаИсполнителя с адресацией на пользователя или роль (справочник РолиИсполнителей, регистр ИсполнителиЗадач), «Мои задачи», перенаправление, отложенный старт и уведомления о новых и просроченных задачах. Поручение из кода в УТ 11.4 или КА 2.5:
// УТ 11, КА 2 и другие конфигурации на БСП: поручение через типовой процесс Задание.
// Исполнитель - пользователь или роль (РолиИсполнителей).
// Предмет - ссылка из определяемого типа ПредметЗадачи: документ, контрагент и т. п.
Функция ПоручитьЗадание(Исполнитель, Тема, Текст, Срок, Предмет = Неопределено) Экспорт
Задание = БизнесПроцессы.Задание.СоздатьБизнесПроцесс();
Задание.Заполнить(Неопределено); // автор и проверяющий - текущий пользователь
Задание.Дата = ТекущаяДатаСеанса();
Задание.Исполнитель = Исполнитель;
Задание.Наименование = Тема;
Задание.Содержание = Текст;
Задание.СрокИсполнения = Срок;
Задание.Важность = Перечисления.ВариантыВажностиЗадачи.Обычная;
Задание.НаПроверке = Ложь; // Истина - после выполнения задача уйдёт проверяющему
Если Предмет <> Неопределено Тогда
Задание.Предмет = Предмет;
КонецЕсли;
Задание.Записать();
Задание.Старт();
Возврат Задание.Ссылка;
КонецФункции
// Невыполненные задачи пользователя по всем процессам на БСП.
Функция НевыполненныеЗадачи(Пользователь) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Задачи.Ссылка КАК Задача,
| Задачи.Наименование КАК Наименование,
| Задачи.СрокИсполнения КАК Срок,
| Задачи.Предмет КАК Предмет,
| Задачи.БизнесПроцесс КАК БизнесПроцесс
|ИЗ
| Задача.ЗадачаИсполнителя.ЗадачиПоИсполнителю(&Исполнитель) КАК Задачи
|ГДЕ
| НЕ Задачи.Выполнена
| И НЕ Задачи.ПометкаУдаления
| И Задачи.СостояниеБизнесПроцесса = ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Активен)
|УПОРЯДОЧИТЬ ПО
| Срок";
Запрос.УстановитьПараметр("Исполнитель", Пользователь);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Свой маршрут в такой конфигурации стройте на типовой задаче, как все процессы УТ 11.4: укажите ЗадачаИсполнителя в свойстве «Задача», а при создании задач заполняйте Исполнитель или РольИсполнителя. Процесс добавьте и в определяемые типы БизнесПроцесс и БизнесПроцессОбъект, где в УТ 11.4 перечислены все шесть.
1С:Документооборот берут, когда маршрутов десятки, их меняют сами пользователи без конфигуратора, а к согласованию прикладывают файлы с версиями; с УТ 11.4 и КА 2.5 он связывается через подсистему «Интеграция с 1С:Документооборотом». Напоминания о просроченных задачах в своей конфигурации — это регламентное задание с запросом по задачам и отправкой почты.
ЗадачиПоИсполнителю() без параметра.Выполнена = Истина и вызвали Записать(). Отметка есть, но по маршруту двигает только ВыполнитьЗадачу() или запись формы с параметром ВыполнитьЗадачу.ПривилегированныйРежимПриСозданииЗадач (в Задание включено), остальное — роли или УстановитьПривилегированныйРежим(Истина); подробнее — в статье о правах доступа.ПроверкаУсловия ведёт по ветке, отмеченной на карте, а не по «верхней» — после перерисовки карты проверьте, какая ветка истинная.Старт() вызван без параметра — платформа выдаст ошибку; передайте точку: Процесс.Старт(БизнесПроцессы.СогласованиеЗаявки.ТочкиМаршрута.Старт). На «Выборе варианта» обязателен обработчик ОбработкаВыбораВарианта.Вызовите ЗапуститьСогласование из ПриЗаписи модуля документа или из подписки на событие, пропустив ОбменДанными.Загрузка и заявки, по которым процесс уже идёт. Старт попадёт в транзакцию записи документа: не стартовал процесс — не запишется и документ. Если такая связка не нужна, запускайте командой формы после записи.
У условия две ветки и булев результат. У выбора варианта веток сколько угодно, а обработчик возвращает вариант по имени: Результат = ТочкаВыбораВарианта.Варианты.Директор;. Так удобно разводить заявки по сумме.
Либо «Разделение» → по «Действию» на каждого согласующего → «Слияние»: процесс пойдёт дальше, когда закончатся все ветки. Либо одна точка «Действие»: в ПередСозданиемЗадач ставите СтандартнаяОбработка = Ложь и сами добавляете в ФормируемыеЗадачи задачи из Задачи.ЗадачаСогласования.СоздатьЗадачу(), заполнив БизнесПроцесс, ТочкаМаршрута и Исполнитель, — так делает СогласованиеЗакупки в УТ 11.4. Решения соберите запросом по задачам этой точки.
Да, начиная с платформы 8.3.25: в расширении создают собственные бизнес-процессы и задачи и заимствуют типовые. У заимствованного процесса можно изменить карту маршрута — при загрузке расширения она полностью заменит исходную. Раньше — только в самой конфигурации.
ПолучитьКартуМаршрута() объекта процесса возвращает копию карты: пройденные точки заштрихованы, активные обведены пунктиром. Выведите её в реквизит формы типа ГрафическаяСхема с полем графической схемы. В БСП для этого есть команда «Карта маршрута», текстом шаг покажет запрос ХодСогласования.
Если маршрут нужно встроить в типовую УТ или КА, связать с проведением документов и правами пользователей или перенести самописные процессы на подсистему БСП, быстрее поручить это программисту: доработка 1С под ваши процессы. Опишите маршрут на странице «Разместить задание» — оценка бесплатная, ответ в течение рабочего дня.
Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.