Вывод всей истории в задаче комплексного процесса

Программирование - Практика программирования

1С:Документооборот

9
В статье описывается, какие изменения нужно сделать, чтобы в задаче комплексного процесса выводилась вся история (по всем процессам), а не только история текущего процесса.

К примеру, есть комплексный процесс, состоящий из согласования и подписания. После прохождения согласования пользователь получает задачу подписания и хочет тут же видеть, как прошло согласование. Просматривать визы в карточке документа не хочет, слишком много телодвижений.

В качестве решения предлагается выводить всю историю выполнения комплексного процесса.

Для этого нужно внести изменения в модуль менеджера регистра сведений "История выполнения задач".

1. Заменить код функции ИсторияПоБизнесПроцессу:

// Возвращает описание истории переданного бизнес-процесса
Функция ИсторияПоБизнесПроцессу(БизнесПроцесс) Экспорт
	
	//ИсторияВыполнения = "";
	//
	//УстановитьПривилегированныйРежим(Истина);
	//
	//Запрос = Новый Запрос("ВЫБРАТЬ
	//	|	ИсторияВыполненияЗадач.Описание
	//	|ИЗ
	//	|	РегистрСведений.ИсторияВыполненияЗадач КАК ИсторияВыполненияЗадач
	//	|ГДЕ
	//	|	ИсторияВыполненияЗадач.БизнесПроцесс = &БизнесПроцесс");
	//	
	//Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцесс);
	//Выборка = Запрос.Выполнить().Выбрать();
	//
	//Если Выборка.Следующий() Тогда
	//	ИсторияВыполнения = Выборка.Описание;
	//КонецЕсли;
	//
	//Возврат ИсторияВыполнения;
	
	//{
	
	ИсторияВыполнения = "";
	
	УстановитьПривилегированныйРежим(Истина);

	Если ЗначениеЗаполнено(БизнесПроцесс.ВедущаяЗадача) Тогда
		
		ИсторияВыполнения = Доработка_ИсторияПоБизнесПроцессу(БизнесПроцесс);
		КомплексныйПроцесс = БизнесПроцесс.ВедущаяЗадача.БизнесПроцесс;
		
		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	ДанныеБизнесПроцессов.БизнесПроцесс КАК БизнесПроцесс
		|ИЗ
		|	РегистрСведений.ДанныеБизнесПроцессов КАК ДанныеБизнесПроцессов
		|ГДЕ
		|	ДанныеБизнесПроцессов.ВедущаяЗадача.БизнесПроцесс = &КомплексныйПроцесс
		|	И ДанныеБизнесПроцессов.БизнесПроцесс <> &БизнесПроцесс
		|
		|УПОРЯДОЧИТЬ ПО
		|	ДанныеБизнесПроцессов.ДатаНачала УБЫВ";
		
		Запрос.УстановитьПараметр("КомплексныйПроцесс", КомплексныйПроцесс);
		Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцесс);
		
		Выборка = Запрос.Выполнить().Выбрать();
		Пока Выборка.Следующий() Цикл
			Если ЗначениеЗаполнено(Выборка.БизнесПроцесс) Тогда 				    		
				ИсторияВыполнения = ?(ИсторияВыполнения = "","", ИсторияВыполнения + Символы.ПС + Символы.ПС)
				+ "ПРОЦЕСС " + Строка(Выборка.БизнесПроцесс) + Символы.ПС + Символы.ПС + Доработка_ИсторияПоБизнесПроцессу(Выборка.БизнесПроцесс);
			КонецЕсли;		
		КонецЦикла;
		
		Возврат ИсторияВыполнения;
		
	Иначе
		Возврат Доработка_ИсторияПоБизнесПроцессу(БизнесПроцесс)
	КонецЕсли;
	
	//}

КонецФункции

И добавить функцию:

Функция Доработка_ИсторияПоБизнесПроцессу(БизнесПроцесс) Экспорт
	
	ИсторияВыполнения = "";
	
	УстановитьПривилегированныйРежим(Истина);
	
	Запрос = Новый Запрос("ВЫБРАТЬ
		|	ИсторияВыполненияЗадач.Описание
		|ИЗ
		|	РегистрСведений.ИсторияВыполненияЗадач КАК ИсторияВыполненияЗадач
		|ГДЕ
		|	ИсторияВыполненияЗадач.БизнесПроцесс = &БизнесПроцесс");
		
	Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцесс);
	Выборка = Запрос.Выполнить().Выбрать();
	
	Если Выборка.Следующий() Тогда
		ИсторияВыполнения = Выборка.Описание;
	КонецЕсли;
	
	Возврат ИсторияВыполнения;

КонецФункции

Надеюсь, кому-то будет полезен данный прием.

9

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Rustig 1033 08.08.18 13:56 Сейчас в теме
(0) история согласования красиво смотрится, думаю полезный функционал

про код:
УстановитьПривилегированныйРежим(Истина);
после этого не надо разве прописывать
УстановитьПривилегированныйРежим(Ложь);
?
2. umizumi 9 08.08.18 14:43 Сейчас в теме
(1) нет, не нужно. Из синтаксис-помощника: "Для явного выключения привилегированного режима необходимо внутри процедуры или функции, в которой он был включен, вызвать метод с параметром Ложь столько же раз, сколько раз в этой же процедуре или функции был вызван метод с параметром Истина.
Если этого сделано не было, то при возврате из процедуры/функции, в которой был включен привилегированный режим, он будет выключен автоматически (неявно)."
3. vcv 84 09.08.18 14:02 Сейчас в теме
Несколько сложней, но гораздо функциональней изменить общий модуль ОбзорЗадачВызовСервераПереопределяемый.
Оставьте свое сообщение