Автозаполнение рабочей группы на основании связей

1. Svet_Serg 03.04.19 13:59 Сейчас в теме
Есть шаблон внутреннего документа "Решение". В связях необходимо указывать ссылку на входящий документ "Заявка".

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

Вот как сделать, чтобы документы в связях "обменивались" рабочими группами?

Есть решение этой проблемы?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
15. Zircool 192 03.09.21 15:16 Сейчас в теме
(1)
 Задача = Событие.Источник;
	Для Каждого СтрокаТЧ из Задача.Предметы Цикл 
		Если  ТипЗнч(СтрокаТЧ.Предмет)   =  Тип("СправочникСсылка.ВнутренниеДокументы") Тогда 
			ТекущаяРабочаяГруппа = РаботаСРабочимиГруппами.ПолучитьРабочуюГруппуДокумента(СтрокаТЧ.Предмет);
			
			
			тСвязи = СвязиДокументов.ПолучитьВсеСвязиДокумента(СтрокаТЧ.Предмет); 
			Для Каждого СтрокаСвязей из тСвязи Цикл
				РабочаяГруппаСвязанногоДокумента = РаботаСРабочимиГруппами.ПолучитьРабочуюГруппуДокумента(СтрокаСвязей.СвязанныйДокумент);
				
				РабочаяГруппаИзменена = Ложь;

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

				
			КонецЦикла;
		КонецЕсли; 		
	КонецЦикла;
Показать



Добавьте скрипт в обработчики бизнес события и привяжитесь к событию создания задачи.
aezdakov; +1 Ответить
2. Idst 05.04.19 12:19 Сейчас в теме
Созданные документы же существуют не сами по себе, а как то исполняются процессами?
Добавьте в комплексный процесс обработку записывающую в рабочую группу:

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


Хорошо бы протестировать, ибо в рабочей группе одновременно запись с правом изменения документа и без неё.
5. Svet_Serg 06.05.19 10:47 Сейчас в теме
И как я пропустила ваш ответ, уведомления не пришли((

(2)
Добавьте в комплексный процесс обработку записывающую в рабочую группу:


Имеется в виду в дополнительные обработчики при старте процесса?
7. Idst 06.05.19 11:58 Сейчас в теме
(5)
обработчики при старте процесса?

Вы используете комплексные процессы конструируемые через диаграмму? Там есть специальный блок - обработка.
9. Svet_Serg 06.05.19 13:21 Сейчас в теме
(7)
конструируемые через диаграмму?

Комплексные процессы использую, но через таблицу. Если я правильно поняла вопрос
Прикрепленные файлы:
10. Idst 06.05.19 14:29 Сейчас в теме
(9) да, правильно. В таблицах такой возможности нет.
11. Svet_Serg 06.05.19 14:32 Сейчас в теме
(10) вот же печаль какая( Попробую переделать процесс с помощью схемы, чтобы проверить. Может это то, что нам нужно ;)
3. Idst 05.04.19 12:56 Сейчас в теме
*обработка обращается к первому предмету в процессе и дополняет рабочие группы связанных с ним документов
4. Idst 05.04.19 14:26 Сейчас в теме
(3)
Интересно бы сделать, что бы в процессы и предметы связанные документы добавлялись, но скрипт отдельно запущенный в эмуляторе отрабатывает, а вот в обработки неправильно срабатывают подпроцессы.

ИзменяемыйПроцесс=Процесс.Ссылка.ПолучитьОбъект();

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

		Строка = ИзменяемыйПроцесс.Предметы.Добавить();
		Строка.РольПредмета = Перечисления.РолиПредметов.Вспомогательный;
		Строка.ИмяПредмета = СсылкаНаИмяПредмета;
		Строка.Предмет = значение[0];

		ДействияПроцесса = Мультипредметность.ПолучитьВложенныеПроцессы(ИзменяемыйПроцесс);
		Для Каждого Действие Из ДействияПроцесса Цикл
			СтрокаЗадачи = ИзменяемыйПроцесс.ПредметыЗадач.Добавить();
			СтрокаЗадачи.ТочкаМаршрута = Действие;
			СтрокаЗадачи.ИмяПредмета = Строка.ИмяПредмета;
		КонецЦикла;
	КонецЦикла;

ИзменяемыйПроцесс.Записать();
Показать
6. Svet_Serg 06.05.19 11:24 Сейчас в теме
(4)
Интересно бы сделать, что бы в процессы и предметы связанные документы добавлялись

Это было бы идеально, конечно )
8. sergathome 4 06.05.19 12:22 Сейчас в теме
Завязываться на процесс при записи документа - очень плохой феншуй. Процесс, в общем случае, не имеет отношения к документу и наооборот. Вешайте обработчик(и) на событие(я) записи документа, где анализируйте его данные и дополняйте или не дополняйте группу. Это будет надёжно и универсально.
soulner; Svet_Serg; +2 Ответить
13. Svet_Serg 20.06.19 13:47 Сейчас в теме
(8)
Вешайте обработчик(и) на событие(я) записи документа, где анализируйте его данные и дополняйте или не дополняйте группу


Буду благодарна, если поможете ;)
12. Svet_Serg 11.06.19 14:56 Сейчас в теме +1.2 $m
Вопрос всё ещё остр и актуален. Добавила вознаграждение.

Помогите, пожалуйста.
14. sergathome 4 21.06.19 11:45 Сейчас в теме
(12) Пример обработчика подписки соответствующего события, метящего процессы по документу при пометке его на удаление. Вам нужно в этот же обработчик вписать сканирование связей и установку рабочих групп. Я за такую работу обычно беру не менее 5тыр. Если действительно нужно, но самим - слабО - заплатите уже кому-нибудь рядом.
Процедура ПриЗаписиВнутреннегоДокументаПриЗаписи(Источник, Отказ) Экспорт
	Если Источник.ОбменДанными.Загрузка Тогда Возврат; КонецЕсли;
	Если Источник.ПометкаУдаления Тогда // Для документов будем автоматически удалять процессы по ним ибо мусор
		лПроцессы = ПолучитьПроцессыПоПредмету(Источник.Ссылка, Ложь);
		УстановитьПривилегированныйРежим(Истина);
		Для Каждого лПроцесс Из лПроцессы Цикл
			лПО = лПроцесс.ПолучитьОбъект();             // Если у пользователя есть доступ к документу, то он может и процессы удалять
			лПО.УстановитьПометкуУдаления(Истина);
		КонецЦикла;
		УстановитьПривилегированныйРежим(Ложь);
		Возврат; 
	КонецЕсли; // При пометке удаления обработка не выполняется
КонецПроцедуры
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот