вторник, 19 сентября 2023 г.

Отключение промежуточных задач ознакомления для комплексных процессов в 1С Документооборот 2.1

Задача:

В 1С Документооборот 2.1 отключить создание задачи ознакомления после каждого этапа комплексного процесса (вложенный процесс согласования).

Создавать задачу нужно 1 раз, когда процесс завершён, или если какой-то этап отклонили, и надо уведомить об этом создателя.

 
Идеи:
https://its.1c.ru/db/metod8dev#content:5874:hdoc - процессы и задачи
https://infostart.ru/1c/tools/1161532/ - Отключение создания задачи ознакомления для бизнес-процесса "Согласование" в 1С: Документооборот

Решение:
Процессу согласования добавить  дополнительный реквизит "Не создавать задачу ознакомления", булево. Для процесса согласования в шаблоне комплексного процесса установить этот реквизит в Истина.
 
Изменить модуль объекта бизнес-процесса Согласование:
 
1. новая процедура ПолучитьЗначениеДопРеквизита
 
Функция ПолучитьЗначениеДопРеквизита(ИмяДопРеквизита)    //
    ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ИмяДопРеквизита);
    СтруктураПоиска = Новый Структура("Свойство", ДопСвойство);
    МассивСтрок = ЭтотОбъект.ДополнительныеРеквизиты.НайтиСтроки(СтруктураПоиска);
    Если МассивСтрок.Количество()=0 Тогда
        Возврат 0;
    КонецЕсли;
    ОписаниеДопСвойства = МассивСтрок[0];
    Возврат ОписаниеДопСвойства.Значение;
КонецФункции
 
 
2. добавляем пару строк в процедуру ЗавершениеПриЗавершении
 
Процедура ЗавершениеПриЗавершении(ТочкаМаршрутаБизнесПроцесса, Отказ)
    
    УстановитьПривилегированныйРежим(Истина);
    ДатаЗавершения = ТекущаяДатаСеанса();
    
    СрокИсполненияДатой = ДатаЗавершения;
    
    РаботаСПроектами.ОтметитьОкончаниеВыполненияПроектнойЗадачи(ЭтотОбъект);
    
    // {{ начало изменений
    НеСоздаватьЗадачуОзнакомления = ПолучитьЗначениеДопРеквизита("Не создавать задачу ознакомления");
    Если НеСоздаватьЗадачуОзнакомления И (РезультатСогласования = Перечисления.РезультатыСогласования.Согласовано) Тогда
        Возврат;
    КонецЕсли;
    // конец изменений }}
 
    // Если процесс завершился положительно и нет задачи ознакомления (задача ознакомления могла быть
    // создана до перехода на редакцию 2.1), то создаем задачу ознакомления с результатом.
    Если РезультатСогласования = Перечисления.РезультатыСогласования.Согласовано
 
...