Как в 1С:Документообороте поставить на паузу процесс до выполнения условия?
Как в 1С:Документообороте поставить на паузу процесс до выполнения условия?
В статье используются следующие механизмы 1С:Документооборот КОРП версии 2.1.18.11: комплексный процесс в виде схемы, эскалации, этапы обработки документов.
Очень часто комплексный процесс (или ветку процесса) нужно поставить на паузу, пока не выполнится определенное условие. В данной статье показан один из способов реализации данного функционала.
Видео-урок "Как поставить на паузу процесс до выполнения условия" доступен в теме Бизнес-процессы видеокурса Самоучитель 1С:Документооборот для специалистов и администраторов.
Открываем демо версию 1С:Документооборот 8 КОРП под пользователем Администратор.
Открываем Виды документов в разделе НСИ.
Находим вид внутреннего документа Договор аренды оборудования. В нем установлена нужная нам настройка Использовать этапы обработки документа.
И обращаем внимание на этапы обработки документа, заданные у вида документа.
В шаблоне комплексного процесса (КП) сделаем два параллельных вложенных КП. В одной ветке у нас будут этапы 2-5, 8. В другой ветке 6 и 7, причем этап 7 должен начаться только после того, как в параллельной ветке завершится этап 5.
Переходим в раздел Управление процессами и открываем Шаблоны процессов.
Создаем новый комплексный процесс в виде схемы 1с документооборота.
На схему добавим две параллельные ветки (два вложенных комплексных процесса):
- Согласование и подписание договора.
- Получение и оплата счета.
Первая ветка содержит этапы 2, 3, 4, 5, 8.
Вторая ветка содержит этапы 6 и 7.
Однако этап 7 "Оплатить счет" надо запускать только после этапа 5 "Подписания договора" в параллельной ветке.
Для решения этой задачи создадим новую роль Робот. И сделаем промежуточный шаг на эту роль "Ожидание подписания договора".
Позже настроим правила эскалации по выполнению этой задачи, если договор подписан. Но пока вернемся в первую ветку и после шага подписания договора будем проставлять признак выволнения этапа 5 "Подписание у директора".
Чтобы из кода скрипта не искать этап по наименованию (а наименование этапа может со временем измениться), лучше использовать механизм локальных констант. Как их сделать рассказано в видеокурсе для специалистов и администраторов в теме Бизнес-события.
Также локальные константы уже реализованы одной из функций в продукте "Академическое гиперрасширение для 1С:Документооборота".
Мы воспользуемся расширением (его можно бесплатно тестировать 3 дня). Загрузим его на нашу базу и получим демо-лицензию.
После этого открываем локальные константы.
Создадим новую локальную константу ЭтапПодписатьУДиректора.
Далее нам нужно написать скрипт, который проставляет у документа, что этот этап пройден. В том же расширении имеется встроенный эмулятор скриптов. Воспользуемся им для написания скрипта.
Сам скрипт можно взять из библиотеки скриптов для 1С:Документооборота.
Вставляем скрипт в эмулятор скриптов и меняем название константы на ЭтапПодписатьУДиректора. Выбираем любой запущенный комплексный процесс и проверяем, проставилось ли прохождение нашего этапа.
Пройденность этапа заполнилась скриптом. Полный текст скрипта можно взять в библиотеке скриптов. Этот скрипт входит в список тех скриптов, которые находятся в свободном доступе.
Док = Процесс.Предметы[0].Предмет;
Этап = lvv_ВызовСервера.lvv_ПолучитьЗначениеДопПараметра("ЭтапПодписатьУДиректора");
Сообщить(Этап);
НаборЗаписей = РегистрыСведений.ЭтапыОбработкиДокументов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Документ.Установить(Док);
НаборЗаписей.Отбор.Этап.Установить(Этап);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() = 0 Тогда
Сообщить(0);
НЗ = НаборЗаписей.Добавить();
НЗ.Документ = Док;
НЗ.Этап = Этап;
НЗ.ДатаПрохождения = ТекущаяДата();
НЗ.Пройден = Истина;
ИначеЕсли НаборЗаписей.Количество() = 1 Тогда
Сообщить(1);
НЗ = НаборЗаписей[0];
НЗ.Документ = Док;
НЗ.Этап = Этап;
НЗ.ДатаПрохождения = ТекущаяДата();
НЗ.Пройден = Истина;
КонецЕсли;
НаборЗаписей.Записать();
Вставляем теперь наш оттестированный скрипт в первую ветку комплексного процесса после подписания договора.
Возвращаемся в параллельную ветку, где нам осталось задать условие для эскалации задачи на Робота.
Задаем, что будем выполнять правило эскалации автоматически для задач, которые не выполнены за 1 час.
Указываем точку маршрута "Ожидание подписания договора", в которой и будем делать эту эскалацию.
Задаем дополнительное условие маршрутизации, при котором будем закрывать задачу.
Делаем новое условие маршрутизации этап "Договор аренды оборудования подписан" - пройден. Вставляем скрипт из библиотеки скриптов. Проверяем правильность работы скрипта.
Также можно проверить работу скрипта в эмуляторе скриптов.
Полный текст скрипта выглядит следующим образом:
Результат = Ложь;
Док = Предмет;
Этап = lvv_ВызовСервера.lvv_ПолучитьЗначениеДопПараметра("ЭтапПодписатьУДиректора");
Сообщить(Этап);
НаборЗаписей = РегистрыСведений.ЭтапыОбработкиДокументов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Документ.Установить(Док);
НаборЗаписей.Отбор.Этап.Установить(Этап);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() = 0 Тогда
Сообщить(0);
Результат = Ложь;
ИначеЕсли НаборЗаписей.Количество() = 1 Тогда
Сообщить(1);
НЗ = НаборЗаписей[0];
Если НЗ.Пройден Тогда
Результат = Истина;
КонецЕсли;
КонецЕсли;
Выбираем условие маршрутизации для данного правила эскалации.
В общем-то мы все настроили. Осталось протестировать наш процесс на копии базы 1С Документооборота.
Создадим новый внутренний документ по шаблону "Договор аренды оборудования".
Заполняем реквизиты карточки внутреннего документа.
На закладке Этапы проверяем, что этапы пока еще не пройдены и нажимаем кнопку "Записать и закрыть".
Пробуем отправить документ по нашему маршруту "Обработка договора аренды оборудования".
Видим, что в типовом варианте 1С:Документооборот предлагает слишком много лишних вариантов и пользователь может запутаться.
Если остальные варианты отправки не нужны для этого вида документа, то можно их отключить, используя Академические Гиперрасширение.
Включаем соответствующую функцию.
Исключаем типы процессов для отправки.
Пробуем еще раз запустить процесс. Остались только те шаблоны процессов, которые назначены на этот вид документа.
Стартуем процесс и переходим в процессы и задачи по документу.
Видим, что запустились две параллельные ветки процесса.
Выполним 6 этап Получить счет на оплату. Вторая ветка встала на паузу - висит задача на Робота "Ожидание подписания договора".
Теперь согласуем и подпишем договор.
В схеме комплексного процесса после 5 этапа у нас стоит обработка, которая должна была выполниться.
Проверяем в карточке внутреннего документа, что проставилось прохождение этапа "Подписать у директора".
Ждем примерно 1 час, чтобы сработала эскалация.
Регламентное задание "Эскалация задач" работает 1 раз в час.
После этого задача, адресованная на роль Робот, закралась. И наш процесс пошел дальше на этап 7 оплатить счет.
Одним из плюсов расширения для 1С:Документооборота является функция Диаграмма Ганта для комплексного процесса, которая сразу становится доступной при добавлении расширения.
В шаблоне процесса можно посмотреть настроенную схему в виде диаграммы Ганта.
В диаграмме Ганта все вложенные шаги автоматически раскроются.
Или можно переключится в табличный режим.
А если сформировать диаграмму Ганта из самого комплексного процесса, то можно провести план-фактный анализ.
Видео-урок "Как поставить на паузу процесс до выполнения условия" доступен в теме Бизнес-процессы видеокурса Самоучитель 1С:Документооборот для специалистов и администраторов.
авторизуйтесь