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