1. Необходимо сделать новый элемент Перечисления "ВариантыВыполненияПроцессовИЗадач" со значением "Перепоручить"
2. В модуле менеджера Бизнес-процесса "Исполнение" добавить в
Функцию ВариантыОтветовДляВыполненияЗадачиПоПочте
в этом месте
Если ТочкаМаршрута = ТочкиМаршрута.Исполнить
ИЛИ ТочкаМаршрута = ТочкиМаршрута.ОтветственноеИсполнение Тогда
Результат.СписокВариантовОтветов.Добавить(
Перечисления.ВариантыВыполненияПроцессовИЗадач.Положительно,
НСтр("ru = 'Исполнено'"));
Результат.ИспользоватьКомментарий = Истина;
ИначеЕсли ТочкаМаршрута = ТочкиМаршрута.Контролировать Тогда
добавить пару строчек таким образом
Если ТочкаМаршрута = ТочкиМаршрута.Исполнить
ИЛИ ТочкаМаршрута = ТочкиМаршрута.ОтветственноеИсполнение Тогда
Результат.СписокВариантовОтветов.Добавить(
Перечисления.ВариантыВыполненияПроцессовИЗадач.Положительно,
НСтр("ru = 'Исполнено'"));
//-код для вставки-
Результат.СписокВариантовОтветов.Добавить(
Перечисления.ВариантыВыполненияПроцессовИЗадач.Перепоручить,
НСтр("ru = 'Перепоручить'"));
//-конец кода для вставки-
Результат.ИспользоватьКомментарий = Истина;
ИначеЕсли ТочкаМаршрута = ТочкиМаршрута.Контролировать Тогда
3. В модуле менеджера Бизнес-процесса "Ознакомление" добавить в
Функцию ВариантыОтветовДляВыполненияЗадачиПоПочте
в этом месте
Если ТочкаМаршрута = ТочкиМаршрута.Ознакомиться Тогда
Результат.СписокВариантовОтветов.Добавить(
Перечисления.ВариантыВыполненияПроцессовИЗадач.Положительно,
НСтр("ru = 'Ознакомился'"));
Результат.ИспользоватьКомментарий = Истина;
КонецЕсли;
добавить так:
Если ТочкаМаршрута = ТочкиМаршрута.Ознакомиться Тогда
Результат.СписокВариантовОтветов.Добавить(
Перечисления.ВариантыВыполненияПроцессовИЗадач.Положительно,
НСтр("ru = 'Ознакомился'"));
//-код для вставки-
Результат.СписокВариантовОтветов.Добавить(
Перечисления.ВариантыВыполненияПроцессовИЗадач.Перепоручить,
НСтр("ru = 'Перепоручить'"));
//-конец кода-
Результат.ИспользоватьКомментарий = Истина;
КонецЕсли;
4. Делаем Общий модуль, там мы будем хранить функции, которые будут для нас делать дополнительную обработку, допустим назовем его ТТТ_Задачи
5. Записываем в него следующий код
Функция РазбитьСтроку(ИсходнаяСтрока,Разделитель) Экспорт
Рез = Новый Массив;
Строки = СтрЗаменить(ИсходнаяСтрока,Разделитель,Символы.ПС);
Для Ном = 1 По СтрЧислоСтрок(Строки) Цикл
Рез.Добавить(СтрПолучитьСтроку(Строки,Ном));
КонецЦикла;
Возврат Рез;
КонецФункции
Функция ПолучитьАдресаЭлектроннойПочты(Знач АдресЭлектроннойПочтыСтр) Экспорт
Результат = Новый Массив;
Адреса = Новый Массив;
Адреса = РазбитьСтроку(АдресЭлектроннойПочтыСтр,";");
Для НомЭлПочты = 0 По Адреса.Количество()-1 Цикл
СтрокаАдреса = РаботаСоСтроками.РазложитьПредставлениеАдресаЭлектроннойПочты(Адреса[НомЭлПочты]);
Если Не РаботаСоСтроками.ЭтоАдресЭлектроннойПочты(СтрокаАдреса.Адрес) Тогда
Возврат ложь;
Иначе
Результат.Добавить (СтрокаАдреса.Адрес);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Процедура СоздатьПереподчинениеИзПочты(ТекЗадача, Автор, Исполнитель,Комментарий="") Экспорт
Попытка
БП = БизнесПроцессы["Исполнение"].СоздатьБизнесПроцесс();
БП.Автор = Автор;
БП.Контролер = Автор;
БП.Важность = ТекЗадача.Важность;
БП.ГлавнаяЗадача = ТекЗадача.Ссылка;
БП.Наименование = СокрЛП(БП.Метаданные().Имя) + ": " + ТекЗадача.Наименование;
если сокрлп(Комментарий)<>"" тогда
БП.Описание = СокрЛП(ТекЗадача.Описание + Символы.ПС + Символы.ВК + БП.Автор.Наименование + ": " + Комментарий);
иначе
БП.Описание = СокрЛП(ТекЗадача.Описание);
конецесли;
БП.СрокИсполненияПроцесса = ТекЗадача.СрокИсполнения;
если БП.СрокИсполненияПроцесса = Дата(1, 1, 1) тогда
НоваяДата = КонецДня(ТекущаяДата()) + 604800;
если деньнедели(НоваяДата)=6 тогда
НоваяДата = КонецДня(ТекущаяДата()) + 86400*2;
иначеесли деньнедели(НоваяДата)=7 тогда
НоваяДата = КонецДня(ТекущаяДата()) + 86400;
конецесли;
БП.СрокИсполненияПроцесса = НоваяДата;
конецесли;
НовИспонитель = БП.Исполнители.Добавить();
НовИспонитель.Исполнитель = Исполнитель;
БП.Дата = ТекущаяДата();
Если Не ТипЗнч(ТекЗадача.БизнесПроцесс) = Тип("БизнесПроцессСсылка.Согласование") и Не ТипЗнч(ТекЗадача.БизнесПроцесс) = Тип("БизнесПроцессСсылка.Утверждение") Тогда
БП.ФБ_ПерепоручитьИЗакрыть = Истина;
Иначе
БП.ФБ_ПерепоручитьИЗакрыть = Ложь;
КонецЕсли;
Если БП.Метаданные().Реквизиты.Найти("УзелОбмена") <> Неопределено Тогда
БП.УзелОбмена = ТекЗадача.БизнесПроцесс.УзелОбмена;
КонецЕсли;
Если БП.Метаданные().Реквизиты.Найти("ВариантИсполнения") <> Неопределено Тогда
БП.ВариантИсполнения = Перечисления.ВариантыМаршрутизацииЗадач.Параллельно;
КонецЕсли;
ЗадачаОбъект = ТекЗадача.ПолучитьОбъект();
ЗадачаОбъект.ПринятаКИсполнению = Истина;
УстановитьПривилегированныйРежим(Истина);
Если БП.Метаданные().ТабличныеЧасти.Найти("Предметы") <> Неопределено и ТекЗадача.БизнесПроцесс.Метаданные().ТабличныеЧасти.Найти("Предметы") <> Неопределено Тогда
Для Каждого Стр Из ТекЗадача.БизнесПроцесс.Предметы Цикл
Мультипредметность.ДобавитьПредмет(БП,Стр.Предмет);
Конеццикла;
КонецЕсли;
БП.Записать();
БП.Старт();
ЗадачаОбъект.Записать();
УстановитьПривилегированныйРежим(Ложь);
Исключение
ОтменитьТранзакцию();
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
"нет",
Перечисления.РезультатВыполненияЗадачиПоПочте.Ошибка,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),
ТекЗадача);
КонецПопытки;
КонецПроцедуры
6. В общем модуле "ВыполнениеЗадачПоПочтеСервер" нужно сделать такие изменения
в функции ПолучитьОтветыВВидеСсылокMailto
этот код
ТекстОтвета = НСтр("ru = '%1
|
|________________________________________________
|Это служебная информация, необходимая для выполнения задачи.
|Не удаляйте и не изменяйте ее!
|
|*Задача:%2
|*Ответ:%3
|
|'", КодЯзыкаПолучателя);
поменять на этот
если ВариантОтвета.Значение = Перечисления.ВариантыВыполненияПроцессовИЗадач.Перепоручить тогда
ТекстОтвета = НСтр("ru = '%1
|
|________________________________________________
|Это служебная информация, необходимая для выполнения задачи.
|Не удаляйте и не изменяйте ее!
|
|Для данного варианта ответа обязательно заполнение поля КОПИЯ в e-mail
|В данном поле указываются пользователи СЭД для перепоручения
|
|*Задача:%2
|*Ответ:%3
|
|'", КодЯзыкаПолучателя);
иначе
ТекстОтвета = НСтр("ru = '%1
|
|________________________________________________
|Это служебная информация, необходимая для выполнения задачи.
|Не удаляйте и не изменяйте ее!
|
|*Задача:%2
|*Ответ:%3
|
|'", КодЯзыкаПолучателя);
конецесли;
в функции ПолучитьЧисловойИдентификаторВариантаОтвета добавить в конец условия это
ИначеЕсли ВариантОтвета =
Перечисления.ВариантыВыполненияПроцессовИЗадач.Перепоручить Тогда
РезультатОтвета = "4";
КонецЕсли;
в функции ПолучитьВариантВыполнениеЗадачиПоПоЧисловомуИдентификатору в конец условия добавить это
ИначеЕсли НомерРезультата = "4" Тогда
ВариантВыполненияЗадачи =
Перечисления.ВариантыВыполненияПроцессовИЗадач.Перепоручить;
Иначе
ВариантВыполненияЗадачи = Неопределено;
КонецЕсли;
функцию ОбработатьСообщениеОВыполненииЗадачи привожу с комментариями целиком, в ней основной код
Функция ОбработатьСообщениеОВыполненииЗадачи(Сообщение)
НачатьТранзакцию();
ЗадачаСсылка = ПредопределенноеЗначение("Задача.ЗадачаИсполнителя.ПустаяСсылка");
Попытка
//-код для вставки-
ПараметрыКопии = ТТТ_Задачи.ПолучитьАдресаЭлектроннойПочты(Сообщение.Копия);
//-конец кода для вставки-
ПараметрыОтправителя = РаботаСоСтроками.РазложитьПредставлениеАдресаЭлектроннойПочты(Сообщение.Отправитель);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПользователиКонтактнаяИнформация.Ссылка КАК Пользователь
|ПОМЕСТИТЬ НайденныеПользователиПоАдресу
|ИЗ
| Справочник.Пользователи.КонтактнаяИнформация КАК ПользователиКонтактнаяИнформация
|ГДЕ
| ПользователиКонтактнаяИнформация.АдресЭП ПОДОБНО """" + &АдресЭП + """"
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| СпособыУведомленияПользователей.Пользователь
|ИЗ
| РегистрСведений.СпособыУведомленияПользователей КАК СпособыУведомленияПользователей
|ГДЕ
| СпособыУведомленияПользователей.ДанныеСпособа ПОДОБНО """" + &АдресЭП + """"
| И СпособыУведомленияПользователей.СпособУведомления = ЗНАЧЕНИЕ(Перечисление.СпособыУведомления.ПоПочте)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| НайденныеПользователиПоАдресу.Пользователь
|ИЗ
| НайденныеПользователиПоАдресу КАК НайденныеПользователиПоАдресу
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
| ПО НайденныеПользователиПоАдресу.Пользователь = Пользователи.Ссылка
|ГДЕ
| Пользователи.ПометкаУдаления = ЛОЖЬ
| И Пользователи.Служебный = ЛОЖЬ
| И Пользователи.Недействителен = ЛОЖЬ";
Запрос.УстановитьПараметр("АдресЭП", ПараметрыОтправителя.Адрес);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ИсполнительЗадачиПоЭлАдресу = Выборка.Пользователь;
КодЯзыкаИсполнителя = ЛокализацияКонфигурацииПовтИсп.КодЯзыкаПользователя(ИсполнительЗадачиПоЭлАдресу);
Иначе
ИсполнительЗадачиПоЭлАдресу = Неопределено;
КодЯзыкаИсполнителя = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка();
КонецЕсли;
ИдентификаторыЗадачи = ПолучитьСтрокиСообщенияПоЗаголовкуПоля(
Сообщение,
НСтр( "ru = '*Задача:'", КодЯзыкаИсполнителя),
36);
ИдентификаторыОтвета = ПолучитьСтрокиСообщенияПоЗаголовкуПоля(
Сообщение,
НСтр( "ru = '*Ответ:'", КодЯзыкаИсполнителя),
1);
Если ИдентификаторыЗадачи.Количество() = 0 Тогда
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ВСообщенииНеУказанИдентификаторЗадачи,,
ЗадачаСсылка);
ОтправитьУведомлениеОбОшибке(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ВСообщенииНеУказанИдентификаторЗадачи,
ЗадачаСсылка,
КодЯзыкаИсполнителя);
ЗафиксироватьТранзакцию();
Возврат Истина;
КонецЕсли;
Если ИдентификаторыЗадачи.Количество() > 1 Тогда
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ВСообщенииУказаноНесколькоИдентификаторовЗадачи,,
ЗадачаСсылка);
ОтправитьУведомлениеОбОшибке(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ВСообщенииУказаноНесколькоИдентификаторовЗадачи,
ЗадачаСсылка,
КодЯзыкаИсполнителя);
ЗафиксироватьТранзакцию();
Возврат Истина;
КонецЕсли;
ЗадачаПоИдентификатору = Задачи.ЗадачаИсполнителя.ПолучитьСсылку(
Новый УникальныйИдентификатор(ИдентификаторыЗадачи[0]));
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗадачаИсполнителя.Ссылка
|ИЗ
| Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
|ГДЕ
| ЗадачаИсполнителя.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ЗадачаПоИдентификатору);
Если Запрос.Выполнить().Пустой() Тогда
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение, Перечисления.РезультатВыполненияЗадачиПоПочте.ЗадачаНеНайдена,,
ЗадачаСсылка);
ОтправитьУведомлениеОбОшибке(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ЗадачаНеНайдена,
ЗадачаСсылка,
КодЯзыкаИсполнителя);
ЗафиксироватьТранзакцию();
Возврат Истина;
КонецЕсли;
ЗадачаСсылка = ЗадачаПоИдентификатору;
Если ИдентификаторыОтвета.Количество() = 0 Тогда
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ВСообщенииНеУказанИдентификаторОтвета,,
ЗадачаСсылка);
ОтправитьУведомлениеОбОшибке(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ВСообщенииНеУказанИдентификаторОтвета,
ЗадачаСсылка,
КодЯзыкаИсполнителя);
ЗафиксироватьТранзакцию();
Возврат Истина;
КонецЕсли;
Если ИдентификаторыОтвета.Количество() > 1 Тогда
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ВСообщенииУказаноНесколькоИдентификаторовОтвета,,
ЗадачаСсылка);
ОтправитьУведомлениеОбОшибке(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ВСообщенииУказаноНесколькоИдентификаторовОтвета,
ЗадачаСсылка,
КодЯзыкаИсполнителя);
ЗафиксироватьТранзакцию();
Возврат Истина;
КонецЕсли;
ВариантВыполненияЗадачи =
ПолучитьВариантВыполнениеЗадачиПоПоЧисловомуИдентификатору(ИдентификаторыОтвета[0]);
Если ВариантВыполненияЗадачи = Неопределено Тогда
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение, Перечисления.РезультатВыполненияЗадачиПоПочте.ОтветНеНайден,,
ЗадачаСсылка);
ОтправитьУведомлениеОбОшибке(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ОтветНеНайден,
ЗадачаСсылка,
КодЯзыкаИсполнителя);
ЗафиксироватьТранзакцию();
Возврат Истина;
КонецЕсли;
Если НЕ ПроверитьСоответсвиеРезультатВыполненияИЗадачи(
ЗадачаСсылка,
ВариантВыполненияЗадачи) Тогда
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ЗадачеНеСоответствуетЗначениеОтвета,,
ЗадачаСсылка);
ОтправитьУведомлениеОбОшибке(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ЗадачеНеСоответствуетЗначениеОтвета,
ЗадачаСсылка,
КодЯзыкаИсполнителя);
ЗафиксироватьТранзакцию();
Возврат Истина;
КонецЕсли;
Если Выборка.Количество() > 1 Тогда
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ПоАдресуОтправителяНайденоНесколькоИсполнителей,,
ЗадачаСсылка);
ОтправитьУведомлениеОбОшибке(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ПоАдресуОтправителяНайденоНесколькоИсполнителей,
ЗадачаСсылка,
КодЯзыкаИсполнителя);
ЗафиксироватьТранзакцию();
Возврат Истина;
ИначеЕсли Выборка.Количество() = 0 Тогда
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ПоАдресуОтправителяНеНайденИсполнительЗадачи,,
ЗадачаСсылка);
ОтправитьУведомлениеОбОшибке(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ПоАдресуОтправителяНеНайденИсполнительЗадачи,
ЗадачаСсылка,
КодЯзыкаИсполнителя);
ЗафиксироватьТранзакцию();
Возврат Истина;
КонецЕсли;
//-код для вставки-
если ВариантВыполненияЗадачи=Перечисления.ВариантыВыполненияПроцессовИЗадач.Перепоручить тогда
АвторЗадачиПоЭлАдресу = ИсполнительЗадачиПоЭлАдресу;
если не ТипЗнч(ПараметрыКопии)=Тип("Массив") тогда
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.Ошибка,"в поле КОПИЯ отсутствует email пользователя СЭД, задача не создана",
ЗадачаСсылка);
ОтправитьУведомлениеОбОшибке(
"в поле КОПИЯ отсутствует email пользователя СЭД, задача не создана",
Перечисления.РезультатВыполненияЗадачиПоПочте.Ошибка,
ЗадачаСсылка,
КодЯзыкаИсполнителя);
ЗафиксироватьТранзакцию();
Возврат Истина;
конецесли;
Для Ном = 0 По ПараметрыКопии.Количество()-1 Цикл
копия = ПараметрыКопии[Ном];
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПользователиКонтактнаяИнформация.Ссылка КАК Пользователь
|ПОМЕСТИТЬ НайденныеПользователиПоАдресу
|ИЗ
| Справочник.Пользователи.КонтактнаяИнформация КАК ПользователиКонтактнаяИнформация
|ГДЕ
| ПользователиКонтактнаяИнформация.АдресЭП ПОДОБНО """" + &АдресЭП + """"
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| СпособыУведомленияПользователей.Пользователь
|ИЗ
| РегистрСведений.СпособыУведомленияПользователей КАК СпособыУведомленияПользователей
|ГДЕ
| СпособыУведомленияПользователей.ДанныеСпособа ПОДОБНО """" + &АдресЭП + """"
| И СпособыУведомленияПользователей.СпособУведомления = ЗНАЧЕНИЕ(Перечисление.СпособыУведомления.ПоПочте)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| НайденныеПользователиПоАдресу.Пользователь
|ИЗ
| НайденныеПользователиПоАдресу КАК НайденныеПользователиПоАдресу
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
| ПО НайденныеПользователиПоАдресу.Пользователь = Пользователи.Ссылка
|ГДЕ
| Пользователи.ПометкаУдаления = ЛОЖЬ
| И Пользователи.Служебный = ЛОЖЬ
| И Пользователи.Недействителен = ЛОЖЬ";
Запрос.УстановитьПараметр("АдресЭП", копия);
ВыборкаКопия = Запрос.Выполнить().Выбрать();
Если ВыборкаКопия.Количество() > 1 Тогда
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.Ошибка,"в поле КОПИЯ адрес электронной почты которому соответствуют более одного исполнителя",
ЗадачаСсылка);
ОтправитьУведомлениеОбОшибке(
"в поле КОПИЯ адрес электронной почты которому соответствуют более одного исполнителя",
Перечисления.РезультатВыполненияЗадачиПоПочте.Ошибка,
ЗадачаСсылка,
КодЯзыкаИсполнителя);
ЗафиксироватьТранзакцию();
Возврат Истина;
ИначеЕсли ВыборкаКопия.Количество() = 0 Тогда
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.Ошибка,"в поле КОПИЯ адрес электронной почты которому не соответствует ни один исполнитель",
ЗадачаСсылка);
ОтправитьУведомлениеОбОшибке(
"в поле КОПИЯ адрес электронной почты которому не соответствует ни один исполнитель",
Перечисления.РезультатВыполненияЗадачиПоПочте.Ошибка,
ЗадачаСсылка,
КодЯзыкаИсполнителя);
ЗафиксироватьТранзакцию();
Возврат Истина;
КонецЕсли;
РеквизитыЗадачи = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗадачаСсылка,
"ТекущийИсполнитель,
|Выполнена,
|СостояниеБизнесПроцесса,
|ПометкаУдаления");
ИсполнительЗадачи = РеквизитыЗадачи.ТекущийИсполнитель;
ФактическийИсполнительЗадачи = Справочники.Пользователи.ПустаяСсылка();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ИсполнителиРолейИДелегаты.ИсполнительДелегат
|ИЗ
| РегистрСведений.ИсполнителиРолейИДелегаты КАК ИсполнителиРолейИДелегаты
|ГДЕ
| ИсполнителиРолейИДелегаты.РольПользователь = &РольПользователь
| И ИсполнителиРолейИДелегаты.ИсполнительДелегат = &ИсполнительЗадачи
| И ИсполнителиРолейИДелегаты.ИмяОбластиДелегирования В ("""", ""ПроцессыИЗадачи"")";
Запрос.УстановитьПараметр("РольПользователь", РеквизитыЗадачи.ТекущийИсполнитель);
Запрос.УстановитьПараметр("ИсполнительЗадачи", АвторЗадачиПоЭлАдресу);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.Ошибк,"Отправитель этого письма не является исполнителем по данной задаче",
ЗадачаСсылка);
ОтправитьУведомлениеОбОшибке(
"Отправитель этого письма не является исполнителем по данной задаче",
Перечисления.РезультатВыполненияЗадачиПоПочте.ДляЗадачиОпределенДругойИсполнитель,
ЗадачаСсылка,
КодЯзыкаИсполнителя);
ЗафиксироватьТранзакцию();
Возврат Истина;
конецесли;
ТекстОкончанияКомментария = НСтр("ru = '________________________________________________'",
КодЯзыкаИсполнителя);
НачальнаяПозицияКомментария = 1;
КонечнаяПозицияКомментария = Найти(Сообщение.Текст, ТекстОкончанияКомментария);
КоличествоСимволов = КонечнаяПозицияКомментария - НачальнаяПозицияКомментария;
КомментарийВСообщении = Сред(Сообщение.Текст, НачальнаяПозицияКомментария, КоличествоСимволов);
КомментарийВСообщении = СокрЛП(КомментарийВСообщении);
КомментарийВСообщении = КомментарийВСообщении + ?(ЗначениеЗаполнено(КомментарийВСообщении), "
|", "") + НСтр("ru = ''",
КодЯзыкаИсполнителя);
Если ТипЗнч(АвторЗадачиПоЭлАдресу) = Тип("СправочникСсылка.Пользователи") Тогда
Если РеквизитыЗадачи.СостояниеБизнесПроцесса <> Перечисления.СостоянияБизнесПроцессов.Активен
Или РеквизитыЗадачи.ПометкаУдаления Тогда
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ЗадачаНеАктивна,,
ЗадачаСсылка);
Иначе
Если ВыборкаКопия.Следующий() Тогда
ИсполнительЗадачиПоЭлАдресу = ВыборкаКопия.Пользователь;
КодЯзыкаИсполнителя = ЛокализацияКонфигурацииПовтИсп.КодЯзыкаПользователя(ИсполнительЗадачиПоЭлАдресу);
Если ТипЗнч(ИсполнительЗадачиПоЭлАдресу) = Тип("СправочникСсылка.Пользователи") Тогда
ТТТ_Задачи.СоздатьПереподчинениеИзПочты(ЗадачаСсылка, АвторЗадачиПоЭлАдресу, ИсполнительЗадачиПоЭлАдресу, КомментарийВСообщении);
конецесли;
КонецЕсли;
конецесли;
КонецЕсли;
конеццикла;
иначе
//-конец кода для вставки-
//-дальше идет блок из оригинальной функции -
РеквизитыЗадачи = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗадачаСсылка,
"ТекущийИсполнитель,
|Выполнена,
|СостояниеБизнесПроцесса,
|ПометкаУдаления");
ИсполнительЗадачи = РеквизитыЗадачи.ТекущийИсполнитель;
ФактическийИсполнительЗадачи = Справочники.Пользователи.ПустаяСсылка();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ИсполнителиРолейИДелегаты.ИсполнительДелегат
|ИЗ
| РегистрСведений.ИсполнителиРолейИДелегаты КАК ИсполнителиРолейИДелегаты
|ГДЕ
| ИсполнителиРолейИДелегаты.РольПользователь = &РольПользователь
| И ИсполнителиРолейИДелегаты.ИсполнительДелегат = &ИсполнительЗадачи
| И ИсполнителиРолейИДелегаты.ИмяОбластиДелегирования В ("""", ""ПроцессыИЗадачи"")";
Запрос.УстановитьПараметр("РольПользователь", РеквизитыЗадачи.ТекущийИсполнитель);
Запрос.УстановитьПараметр("ИсполнительЗадачи", ИсполнительЗадачиПоЭлАдресу);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ДляЗадачиОпределенДругойИсполнитель,,
ЗадачаСсылка);
ОтправитьУведомлениеОбОшибке(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ДляЗадачиОпределенДругойИсполнитель,
ЗадачаСсылка,
КодЯзыкаИсполнителя);
ЗафиксироватьТранзакцию();
Возврат Истина;
КонецЕсли;
Если ТипЗнч(РеквизитыЗадачи.ТекущийИсполнитель) = Тип("СправочникСсылка.Пользователи") Тогда
ФактическийИсполнительЗадач = Константы.ФактическийИсполнительЗадач.Получить();
Если ФактическийИсполнительЗадач = Перечисления.ФактическийИсполнительЗадач.ТекущийПользователь
Или ФактическийИсполнительЗадач = Перечисления.ФактическийИсполнительЗадач.ВыборПриИсполненииЗадачи Тогда
ФактическийИсполнительЗадачи = ИсполнительЗадачиПоЭлАдресу;
КонецЕсли;
Иначе
ИсполнительЗадачи = ИсполнительЗадачиПоЭлАдресу;
КонецЕсли;
Если РеквизитыЗадачи.Выполнена = Истина
Или РеквизитыЗадачи.СостояниеБизнесПроцесса <> Перечисления.СостоянияБизнесПроцессов.Активен
Или РеквизитыЗадачи.ПометкаУдаления Тогда
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ЗадачаНеАктивна,,
ЗадачаСсылка);
Иначе
ТекстОкончанияКомментария = НСтр("ru = '________________________________________________'",
КодЯзыкаИсполнителя);
НачальнаяПозицияКомментария = 1;
КонечнаяПозицияКомментария = Найти(Сообщение.Текст, ТекстОкончанияКомментария);
КоличествоСимволов = КонечнаяПозицияКомментария - НачальнаяПозицияКомментария;
КомментарийВСообщении = Сред(Сообщение.Текст, НачальнаяПозицияКомментария, КоличествоСимволов);
КомментарийВСообщении = СокрЛП(КомментарийВСообщении);
КомментарийВСообщении = КомментарийВСообщении + ?(ЗначениеЗаполнено(КомментарийВСообщении), "
|", "") + НСтр("ru = ''",
КодЯзыкаИсполнителя);
Параметры = Новый Структура;
Параметры.Вставить("ВариантВыполнения", ВариантВыполненияЗадачи);
Параметры.Вставить("Комментарий", КомментарийВСообщении);
Параметры.Вставить("ИсполнительЗадачиПоПочте", ИсполнительЗадачи);
Если ЗначениеЗаполнено(ФактическийИсполнительЗадачи) Тогда
Параметры.Вставить("ФактическийИсполнительЗадачи", ФактическийИсполнительЗадачи);
КонецЕсли;
ОбработатьВложенияВСообщении(ЗадачаСсылка, Сообщение);
РезультатПроверки = БизнесПроцессыИЗадачиСервер.ПроверитьУсловияЗапретаВыполнения(ЗадачаСсылка, Параметры);
Если РезультатПроверки.ЗапретВыполнения Тогда
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ЗапретВыполнения,
РезультатПроверки.ТекстПредупреждения,
ЗадачаСсылка);
ОтправитьУведомлениеОбОшибке(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.ЗапретВыполнения,
ЗадачаСсылка,
КодЯзыкаИсполнителя,
РезультатПроверки.ТекстПредупреждения);
ЗафиксироватьТранзакцию();
Возврат Истина;
КонецЕсли;
ВыполнениеЗадачСервер.ВыполнитьЗадачуПоПочте(ЗадачаСсылка, Параметры);
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.Выполнена,
Строка(ВариантВыполненияЗадачи) + ". " + КомментарийВСообщении,
ЗадачаСсылка);
КонецЕсли;
//-код для вставки-
конецесли;
//-конец кода для вставки-
ЗафиксироватьТранзакцию();
Возврат Истина;
Исключение
ОтменитьТранзакцию();
РегистрыСведений.ПротоколВыполненияЗадачПоПочте.ЗаписатьРезультатВыполненияПоСообщению(
Сообщение,
Перечисления.РезультатВыполненияЗадачиПоПочте.Ошибка,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),
ЗадачаСсылка);
Возврат Ложь;
КонецПопытки;
КонецФункции
Вот и все изменения.