Каталог решений - Доступность процессов и задач по предмету всем участникам рабочей группы документа

Доступность процессов и задач по предмету всем участникам рабочей группы документа

Доступность процессов и задач по предмету всем участникам рабочей группы документа

В наличии

Простой способ сделать задачи и процессы доступными всем участникам рабочей группы документа. Для этого нужно добавить дополнительный обработчик бизнес-события, который будет срабатывать по виду события «Старт процесса». Актуально, если используете комплексные процессы, и не все участники видят задачи друг друга.

Категория:

Описание

 В обработчике события указываем следующий код:

Источник = Событие.Источник;
ТребуетсяЗапись = Ложь;

Запрос = Новый Запрос;

ТекстЗапроса =
"ВЫБРАТЬ
| ПредметыПроцесса.Предмет КАК Предмет
|ИЗ
| &ИмяПроцесса КАК ПредметыПроцесса
|ГДЕ
| ПредметыПроцесса.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Источник);

ИсточникМетаданные = Источник.Метаданные();

ПроцессИмя = ИсточникМетаданные.ПолноеИмя();

ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"&ИмяПроцесса",ПроцессИмя + ".Предметы");

Запрос.Текст = ТекстЗапроса;

ВыборкаПредмет = Запрос.Выполнить().Выбрать();

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

Если ТребуетсяЗапись Тогда
	РегистрыСведений.УчастникиПроцессов.ЗаписатьНаборПоПроцессу(Источник, УчастникиПроцесса, Истина);
КонецЕсли;

Принцип работы такой: по процессу, который стартует ("Источник") мы ищем все предметы. Затем каждый предмет обходим в выборке и смотрим, есть ли участники рабочей группы этого предмета в регистре, в котором хранятся участники процессов (в конфигурации он так и называется "УчастникиПроцессов").

Еще нужно учесть, что в рабочую группу документа может входить в качестве участника "Рабочая группа" (отдельный справочник), в отличие от регистра, в котором могут быть заданы только или пользователи, или полные роли. Поэтому если в составе участников по документу есть рабочая группа, тогда просматриваем участников рабочей группы и, если они еще не добавлены в регистр, то добавляем.

has been added to your cart:
Оформление заказа