Документооборот: Сложный порядок выполнения в Комплексных процессах, включающий сложные комбинации групп И и ИЛИ
Комплексные процессы состоят из под-процессов «этапы». Эти «этапы» могут запускаться после «старта процесса» или выполнения других «этапов».
Что мы имеем:
Если этап должен выполниться, когда выполнился весь «набор этапов», то выбираем вариант «Стартовать действие после выполнения всех отмеченных ниже действий».
Если этап должен выполниться, когда достаточно выполнения одного этапа из «набора этапов», то выбираем «Стартовать действие после выполнения любого из отмеченных ниже действий».
По сути первое – это логическое И, а второе – это логическое ИЛИ.
Проблема: Комбинация наборов этапов из блоков И и блоков ИЛИ на уровне расстановки галочек (в форме "НастройкаПредшественниковЭтапаКомплексногоПроцесса") не доступна.
В статье предлагается способ настройки таких процессов, подразумевающий незначительную доработку 1С:Документооборот КОРП (1 фоновое задание и 1 константа).
- Описание
- Подробнее
Описание
Способы решения:
1) Условие маршрутизации. К каждому из этапов можно (в том числе с широкими возможностями языка 1С) приписать условие. Чтобы сгруппировать таким образом блоки И и блоки ИЛИ надо будет написать приличный код на языке 1С. Этот код надо будет поддерживать от версии к версии и он будет не простым ИМХО.
2) Создать роль (скажем Робот) и автоматически «Выполнять» все задачи (фоновым заданием), которые с этой ролью. Код фонового задания элементарнейший. Это даёт нам возможность в качестве этапов группировать наборы в блоки И и блоки ИЛИ. А уже результат их выполнения использовать для решения задачи «Сложного порядка выполнения». На мой взгляд это так же выглядит нагляднее и проще в настройке, чем вариант 1), но, возможно, более затратно по ресурсам (не тестировали, т.к. в конкретном внедрении более низкая стоимость решения и последующей поддержки важнее). Даже продвинутый пользователь сможет это освоить при необходимости. Всё что нужно указать роль исполнителя Робот в таком этапе.
3) возможно, я что то упустил — предлагайте свои варианты решения задачи, решительно)
4) дождаться дружеского интерфейса от 1С, если фирма 1С посчитает полезным таковой разработать. В Условиях маршрутизации аналогичные группировки (+ группировка НЕ) реализованы и это очень удобно. В 1С пожелание такое зафиксировано и на фейсбуке утверждают, что приоритет его после моей публикации повысился (что это значит и есть ли у нас шансы сами понимаете — без гарантий, но надежда есть), пруф.
Принтскрин части одного из шаблонов процесса (старая версия из тестовой базы) прилагается.
Собственно сам код фонового задания:
Процедура ПроталкиваниеЗадачРобота()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Задачи.Ссылка
|ИЗ
| Задача.ЗадачаИсполнителя КАК Задачи
|ГДЕ
| НЕ Задачи.Отменена
| И НЕ Задачи.Выполнена
| И Задачи.РольИсполнителя = &РольИсполнителя
| И Задачи.БизнесПроцесс.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Прерван)";
Запрос.УстановитьПараметр("РольИсполнителя", Константы.grdРольРобот.Получить());
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
НачатьТранзакцию();
Пока Выборка.Следующий() Цикл
тЗадача = Выборка.Ссылка.ПолучитьОбъект();
тЗадача.ВыполнитьЗадачу();
КонецЦикла;
ЗафиксироватьТранзакцию();
КонецЕсли;
КонецПроцедуры
