Автозаполнение рабочей группы на основании связей
Есть шаблон внутреннего документа "Решение". В связях необходимо указывать ссылку на входящий документ "Заявка".
В обоих шаблонах установлено "Автоматически вести состав рабочей группы", но это правило не распространяется на документы, которые указываются в связях.
В итоге участники документа "Решение" не видят в связях документ "Заявка". Автору входящего документа (секретарю) приходится вручную добавлять необходимых участников в рабочую группу". Прописать участников рабочей группы в шаблон их нет возможности, т.к. они могут меняться по мере движения документа.
Вот как сделать, чтобы документы в связях "обменивались" рабочими группами?
Есть решение этой проблемы?
В обоих шаблонах установлено "Автоматически вести состав рабочей группы", но это правило не распространяется на документы, которые указываются в связях.
В итоге участники документа "Решение" не видят в связях документ "Заявка". Автору входящего документа (секретарю) приходится вручную добавлять необходимых участников в рабочую группу". Прописать участников рабочей группы в шаблон их нет возможности, т.к. они могут меняться по мере движения документа.
Вот как сделать, чтобы документы в связях "обменивались" рабочими группами?
Есть решение этой проблемы?
По теме из базы знаний
- 1С:ERP Управление предприятием 2 - купить по низкой цене в Москве и СПБ
- Особенности подготовки отчетной формы статистики №11 (краткая) за 2017 год для государственных и муниципальных учреждений
- Разработка и сценарное тестирование с Vanessa-ADD. Концепция, теория и сквозной пример создания сценария
- Модуль "Ответственное хранение" в 1С:УТ 11.5, КА 2.5, ERP 2.5 для фулфилмента FBS / FBO
- Интеграция Честный Знак и 1C: обмен и синхронизация для УТ11, УНФ, КА2, ERP, Розница: Расширение для работы с СУЗ, ГИС МТ, ЦРПТ
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Добавьте скрипт в обработчики бизнес события и привяжитесь к событию создания задачи.
Задача = Событие.Источник;
Для Каждого СтрокаТЧ из Задача.Предметы Цикл
Если ТипЗнч(СтрокаТЧ.Предмет) = Тип("СправочникСсылка.ВнутренниеДокументы") Тогда
ТекущаяРабочаяГруппа = РаботаСРабочимиГруппами.ПолучитьРабочуюГруппуДокумента(СтрокаТЧ.Предмет);
тСвязи = СвязиДокументов.ПолучитьВсеСвязиДокумента(СтрокаТЧ.Предмет);
Для Каждого СтрокаСвязей из тСвязи Цикл
РабочаяГруппаСвязанногоДокумента = РаботаСРабочимиГруппами.ПолучитьРабочуюГруппуДокумента(СтрокаСвязей.СвязанныйДокумент);
РабочаяГруппаИзменена = Ложь;
Для Каждого Участник из ТекущаяРабочаяГруппа Цикл
Отбор = Новый Структура;
Отбор.Вставить("Участник", Участник.Участник);
НайденныеСтроки = РабочаяГруппаСвязанногоДокумента.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() = 0 Тогда
РабочаяГруппаИзменена = Истина;
Строка = РабочаяГруппаСвязанногоДокумента.Добавить();
ЗаполнитьЗначенияСвойств(Строка,Участник);
КонецЕсли;
КонецЦикла;
Если РабочаяГруппаИзменена Тогда
РаботаСРабочимиГруппами.ПерезаписатьРабочуюГруппуОбъекта(
СтрокаСвязей.СвязанныйДокумент,
РабочаяГруппаСвязанногоДокумента,
Истина); // ОбновитьПраваДоступа
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
ПоказатьДобавьте скрипт в обработчики бизнес события и привяжитесь к событию создания задачи.
Созданные документы же существуют не сами по себе, а как то исполняются процессами?
Добавьте в комплексный процесс обработку записывающую в рабочую группу:
Хорошо бы протестировать, ибо в рабочей группе одновременно запись с правом изменения документа и без неё.
Добавьте в комплексный процесс обработку записывающую в рабочую группу:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СвязиДокументов.СвязанныйДокумент
|ИЗ
| РегистрСведений.СвязиДокументов КАК СвязиДокументов
|ГДЕ
| СвязиДокументов.Документ = &НулевойПредмет";
Запрос.УстановитьПараметр("НулевойПредмет", Процесс.Предметы.Получить(0).Предмет.Ссылка);
СписокСоСвязаннымиДокументами = Запрос.Выполнить().Выгрузить();
Для каждого ЭлементСписка из СписокСоСвязаннымиДокументами Цикл
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РабочиеГруппы.Участник
|ИЗ
| РегистрСведений.РабочиеГруппы КАК РабочиеГруппы
|ГДЕ
| РабочиеГруппы.Объект = &ПервоначальныйДокумент";
Запрос.УстановитьПараметр("ПервоначальныйДокумент", Процесс.Предметы.Получить(0).Предмет.Ссылка);
СписокРабочейГруппыДокумента = Запрос.Выполнить().Выгрузить();
Для каждого ЭлементРабочейГруппы из СписокРабочейГруппыДокумента Цикл;
НоваяЗаписьРабочейГруппы = РегистрыСведений.РабочиеГруппы.СоздатьМенеджерЗаписи();
НоваяЗаписьРабочейГруппы.Объект = ЭлементСписка[0];
НоваяЗаписьРабочейГруппы.Участник = ЭлементРабочейГруппы[0];
НоваяЗаписьРабочейГруппы.Записать(Истина);
КонецЦикла;
КонецЦикла;
ПоказатьХорошо бы протестировать, ибо в рабочей группе одновременно запись с правом изменения документа и без неё.
(3)
Интересно бы сделать, что бы в процессы и предметы связанные документы добавлялись, но скрипт отдельно запущенный в эмуляторе отрабатывает, а вот в обработки неправильно срабатывают подпроцессы.
Интересно бы сделать, что бы в процессы и предметы связанные документы добавлялись, но скрипт отдельно запущенный в эмуляторе отрабатывает, а вот в обработки неправильно срабатывают подпроцессы.
ИзменяемыйПроцесс=Процесс.Ссылка.ПолучитьОбъект();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СвязиДокументов.СвязанныйДокумент
|ИЗ
| РегистрСведений.СвязиДокументов КАК СвязиДокументов
|ГДЕ
| СвязиДокументов.Документ = &НулевойПредмет";
Запрос.УстановитьПараметр("НулевойПредмет", Процесс.Предметы.Получить(0).Предмет.Ссылка);
СписокСПредметами = Запрос.Выполнить().Выгрузить();
Для каждого значение из СписокСПредметами Цикл
СсылкаНаИмяПредмета = Справочники.ИменаПредметов.НайтиПоНаименованию("Предмет",Истина);
Строка = ИзменяемыйПроцесс.Предметы.Добавить();
Строка.РольПредмета = Перечисления.РолиПредметов.Вспомогательный;
Строка.ИмяПредмета = СсылкаНаИмяПредмета;
Строка.Предмет = значение[0];
ДействияПроцесса = Мультипредметность.ПолучитьВложенныеПроцессы(ИзменяемыйПроцесс);
Для Каждого Действие Из ДействияПроцесса Цикл
СтрокаЗадачи = ИзменяемыйПроцесс.ПредметыЗадач.Добавить();
СтрокаЗадачи.ТочкаМаршрута = Действие;
СтрокаЗадачи.ИмяПредмета = Строка.ИмяПредмета;
КонецЦикла;
КонецЦикла;
ИзменяемыйПроцесс.Записать();
Показать
Завязываться на процесс при записи документа - очень плохой феншуй. Процесс, в общем случае, не имеет отношения к документу и наооборот. Вешайте обработчик(и) на событие(я) записи документа, где анализируйте его данные и дополняйте или не дополняйте группу. Это будет надёжно и универсально.
(12) Пример обработчика подписки соответствующего события, метящего процессы по документу при пометке его на удаление. Вам нужно в этот же обработчик вписать сканирование связей и установку рабочих групп. Я за такую работу обычно беру не менее 5тыр. Если действительно нужно, но самим - слабО - заплатите уже кому-нибудь рядом.
Процедура ПриЗаписиВнутреннегоДокументаПриЗаписи(Источник, Отказ) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда Возврат; КонецЕсли;
Если Источник.ПометкаУдаления Тогда // Для документов будем автоматически удалять процессы по ним ибо мусор
лПроцессы = ПолучитьПроцессыПоПредмету(Источник.Ссылка, Ложь);
УстановитьПривилегированныйРежим(Истина);
Для Каждого лПроцесс Из лПроцессы Цикл
лПО = лПроцесс.ПолучитьОбъект(); // Если у пользователя есть доступ к документу, то он может и процессы удалять
лПО.УстановитьПометкуУдаления(Истина);
КонецЦикла;
УстановитьПривилегированныйРежим(Ложь);
Возврат;
КонецЕсли; // При пометке удаления обработка не выполняется
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот