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

05.08.21

Задачи пользователя - Адаптация типовых решений

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4607    9    4    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    3038    4    0    

19

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1646    dimanich70    8    

14

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Доработка типового отчета "Связанные документы" позволяет просто и быстро расширять состав объектов для построения структуры подчиненности документов, используя объекты основной конфигурации и любых расширений.

1 стартмани

27.10.2023    2089    18    avmartynov    12    

44

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2196    24    progmaster    7    

3
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Rokky78 40 04.08.21 14:47 Сейчас в теме
Идея отличная.
Подобные статьи попадались и раньше, но не думал, что это так востребовано на нашем предприятии. Оказалось - да.
Еще некоторые подробности - в личном сообщении.
Capitullo; +1 Ответить
2. Capitullo 28 05.08.21 11:19 Сейчас в теме
(1) Код в публикации поправил, спасибо за замечания!
3. Rokky78 40 05.08.21 11:52 Сейчас в теме
Посмотрев как работает обработчик, решил немного ограничить запись. Дело в том что в таком виде для каждого процесса (и основного комплексного и вложенных в него) создаются достаточно много записей в регистре. Поскольку потребность видеть все процессы была у отдела кадров, решил сделать фильтр именно по ним.
В самом начале определил массив в котором собрал роли, группы и пользователей ОК,

	ПользовательИванова = Справочники.Пользователи.ПолучитьСсылку(Новый УникальныйИдентификатор("3a219092-f819-11ea-b67d-0cc47a283a95"));
	ПользовательПетрова = Справочники.Пользователи.ПолучитьСсылку(Новый УникальныйИдентификатор("0420e2c1-7522-11e8-994d-0cc47a283a95"));
	ПользовательСидорова = Справочники.Пользователи.ПолучитьСсылку(Новый УникальныйИдентификатор("f54cf259-7517-11e8-994d-0cc47a283a95"));
	РабочаяГруппаРГ_Кадры = Справочники.РабочиеГруппы.ПолучитьСсылку(Новый УникальныйИдентификатор("f7aa1aca-0455-11e9-81cd-0cc47a283a95"));
	РольКадровик = Справочники.ПолныеРоли.ПолучитьСсылку(Новый УникальныйИдентификатор("fc485390-56d0-11e9-9fa3-0cc47a283a95"));
	
	МассивКадры = Новый Массив;
	МассивКадры.Добавить(ПользовательИванова);
	МассивКадры.Добавить(ПользовательПетрова);
	МассивКадры.Добавить(ПользовательСидорова);
	МассивКадры.Добавить(РабочаяГруппаРГ_Кадры);
	МассивКадры.Добавить(РольКадровик);
Показать


Затем проверяю входит ли участник рабочей группы основного предмета в этот массив.

		Для Каждого УчастникПоПредмету Из УчастникиПоПредмету Цикл
			
			Если МассивКадры.Найти(УчастникПоПредмету.Участник) = Неопределено Тогда	//Если не кадровик - не добавляем участника
				Продолжить;
			КонецЕсли;
4. Capitullo 28 05.08.21 12:03 Сейчас в теме
(3) Дополню для читающих, в данном примере если заменить МассивКадры на одну роль (можно создать служебную полную роль чтобы использовать ее только для предоставления доступа) и добавить туда всех пользователей, перечисленных в массиве, тогда в случае добавления новых сотрудников не придется обработкой перезаполнять регистр Участники Процессов, чтобы предоставить доступ к старым процессам и задачам для новых сотрудников, достаточно будет их добавить в полную роль и они сразу увидят все процессы и задачи как прочие участники этой роли.
5. Moto45 3 01.12.22 09:46 Сейчас в теме
Ну, дополним ещё и подразделением из рабочей группы предмета процесса:

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