Встречаются ситуации, когда провести согласование одним процессом невозможно, в этом случае можно в рамках комплексного процесса создать несколько процессов согласования, но в данном случае в задачах ознакомления будет история согласования по каждому процессу, создадим настройки вывода истории согласования сбором с нескольких процессов.
Начнем с добавления в основную конфигурацию справочника для хранения элементов настроек:
Далее добавим регистр настроек РАДО_НастройкиПроцессов:
ОбъектНастройки: СправочникСсылка.ВидыВнутреннихДокументов, СправочникСсылка.ШаблоныСогласования, СправочникСсылка.ВидыВходящихДокументов, СправочникСсылка.ШаблоныИсполнения, СправочникСсылка.ВидыИсходящихДокументов
Параметр: СправочникСсылка.РАДО_ПараметрыПроцессов
ЗначениеНастройки: Булево
В модуль менеджера регистра РАДО_НастройкиПроцессов добавим код с функцией получения параметров процессов:
Функция ПолучитьПараметрПроцесса(ОбъектНастройки, Параметр) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РАДО_НастройкиПроцессов.ЗначениеНастройки КАК ЗначениеНастройки
|ИЗ
| РегистрСведений.РАДО_НастройкиПроцессов КАК РАДО_НастройкиПроцессов
|ГДЕ
| РАДО_НастройкиПроцессов.ОбъектНастройки = &ОбъектНастройки
| И РАДО_НастройкиПроцессов.Параметр = &Параметр";
Запрос.УстановитьПараметр("ОбъектНастройки", ОбъектНастройки);
Запрос.УстановитьПараметр("Параметр", Параметр);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат Неопределено;
КонецЕсли;
ЗначениеПараметра = РезультатЗапроса.Выгрузить()[0].ЗначениеНастройки;
Возврат ЗначениеПараметра;
КонецФункции
В модуле расширения ОбзорЗадачВызовСервера добавим функцию определения параметров бизнес процесса из регистра настроек РАДО_НастройкиПроцессов
Функция ПолучитьПараметрыПроцесса(БизнесПроцесс)
МассивТекстовЗапроса = Новый Массив;
ТекстЗапросаРевизитыПроцессов =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| КомплексныйПроцесс.Ссылка КАК СсылкаКомплексногоПроцесса,
| КомплексныйПроцесс.Схема КАК СхемаКомплексногоПроцесса,
| ТаблицаТекущегоПроцесса.Наименование КАК НаименованиеТекущегоПроцесса,
| РАДО_НастройкиПроцессов.ЗначениеНастройки КАК ЗначениеПараметра
|ИЗ
| ";
МассивТекстовЗапроса.Добавить(ТекстЗапросаРевизитыПроцессов);
ТаблицаТекущегоПроцесса = ОбщегоНазначения.ИмяТаблицыПоСсылке(БизнесПроцесс);
МассивТекстовЗапроса.Добавить(ТаблицаТекущегоПроцесса);
ТекстЗапросаПродолжение =
" КАК ТаблицаТекущегоПроцесса
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДочерниеБизнесПроцессы КАК РегистрСведенийДочерниеБизнесПроцессы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ БизнесПроцесс.КомплексныйПроцесс КАК КомплексныйПроцесс
| ПО РегистрСведенийДочерниеБизнесПроцессы.РодительскийПроцесс = КомплексныйПроцесс.Ссылка
| ПО РегистрСведенийДочерниеБизнесПроцессы.ДочернийПроцесс = &БизнесПроцесс
| И (ТаблицаТекущегоПроцесса.Ссылка = &БизнесПроцесс)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РАДО_НастройкиПроцессов КАК РАДО_НастройкиПроцессов
| ПО ТаблицаТекущегоПроцесса.Шаблон = РАДО_НастройкиПроцессов.ОбъектНастройки
| И (РАДО_НастройкиПроцессов.Параметр = ЗНАЧЕНИЕ(Справочник.РАДО_ПараметрыПроцессов.ПоказатьОписаниеВыполнения))";
МассивТекстовЗапроса.Добавить(ТекстЗапросаПродолжение);
Запрос = Новый Запрос;
Запрос.Текст = СтрСоединить(МассивТекстовЗапроса);
Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцесс);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат Неопределено;
КонецЕсли;
РеквизитыПроцессов = Результат.Выгрузить()[0];
ПараметрыПроцессов = Новый Структура();
ПараметрыПроцессов.Вставить("ЗначениеПараметра", РеквизитыПроцессов.ЗначениеПараметра);
ПараметрыПроцессов.Вставить("СсылкаКомплексногоПроцесса", РеквизитыПроцессов.СсылкаКомплексногоПроцесса);
ПараметрыПроцессов.Вставить("СхемаКомплексногоПроцесса", РеквизитыПроцессов.СхемаКомплексногоПроцесса);
ПараметрыПроцессов.Вставить("НаименованиеТекущегоПроцесса", РеквизитыПроцессов.НаименованиеТекущегоПроцесса);
Возврат ПараметрыПроцессов;
КонецФункции
Далее функцией ПолучитьИсториюВыполненияПроцесса соберем историю выполнения по схеме или этапам процесса
Функция ПолучитьИсториюВыполненияПроцесса(БизнесПроцесс)
РезультатИсторияВыполненияПроцесса = Новый Структура("ДополнитьИсториейПроцесса");
ПараметрыПроцесса = ПолучитьПараметрыПроцесса(БизнесПроцесс);
Если ПараметрыПроцесса = Неопределено Тогда
РезультатИсторияВыполненияПроцесса.ДополнитьИсториейПроцесса = Ложь;
Возврат РезультатИсторияВыполненияПроцесса;
КонецЕсли;
Запрос = Новый Запрос();
Если ЗначениеЗаполнено(ПараметрыПроцесса.СхемаКомплексногоПроцесса) Тогда
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ИсторияВыполненияЗадач.Описание КАК Описание,
| Согласование.Наименование КАК НаименованиеПроцесса
|ИЗ
| Справочник.СхемыКомплексныхПроцессов.ПараметрыДействий КАК СхемыКомплексныхПроцессовПараметрыДействий
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияВыполненияЗадач КАК ИсторияВыполненияЗадач
| ПО СхемыКомплексныхПроцессовПараметрыДействий.Процесс = ИсторияВыполненияЗадач.БизнесПроцесс
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ БизнесПроцесс.Согласование КАК Согласование
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ШаблоныСогласования КАК ШаблоныСогласования
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РАДО_НастройкиПроцессов КАК РАДО_НастройкиПроцессов
| ПО (РАДО_НастройкиПроцессов.ОбъектНастройки = ШаблоныСогласования.Ссылка)
| И (РАДО_НастройкиПроцессов.Параметр = ЗНАЧЕНИЕ(Справочник.РАДО_ПараметрыПроцессов.СобратьОписаниеВыполнения))
| И (РАДО_НастройкиПроцессов.ЗначениеНастройки = &ЗначениеНастройки)
| ПО Согласование.Шаблон = ШаблоныСогласования.Ссылка
| ПО СхемыКомплексныхПроцессовПараметрыДействий.Процесс = Согласование.Ссылка
| И (СхемыКомплексныхПроцессовПараметрыДействий.Ссылка = &Схема)
|
|УПОРЯДОЧИТЬ ПО
| СхемыКомплексныхПроцессовПараметрыДействий.ПорядокСортировки";
Запрос.УстановитьПараметр("Схема", ПараметрыПроцесса.СхемаКомплексногоПроцесса);
Иначе
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ИсторияВыполненияЗадач.Описание КАК Описание,
| Согласование.Наименование КАК НаименованиеПроцесса
|ИЗ
| БизнесПроцесс.КомплексныйПроцесс.Этапы КАК КомплексныйПроцессЭтапы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияВыполненияЗадач КАК ИсторияВыполненияЗадач
| ПО КомплексныйПроцессЭтапы.ЗапущенныйБизнесПроцесс = ИсторияВыполненияЗадач.БизнесПроцесс
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ БизнесПроцесс.Согласование КАК Согласование
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РАДО_НастройкиПроцессов КАК РАДО_НастройкиПроцессов
| ПО (РАДО_НастройкиПроцессов.Параметр = ЗНАЧЕНИЕ(Справочник.РАДО_ПараметрыПроцессов.СобратьОписаниеВыполнения))
| И (РАДО_НастройкиПроцессов.ЗначениеНастройки = &ЗначениеНастройки)
| И Согласование.Шаблон = РАДО_НастройкиПроцессов.ОбъектНастройки
| ПО КомплексныйПроцессЭтапы.ЗапущенныйБизнесПроцесс = Согласование.Ссылка
| И (КомплексныйПроцессЭтапы.Ссылка = &КомплексныйПроцесс)
|
|УПОРЯДОЧИТЬ ПО
| КомплексныйПроцессЭтапы.ПорядокСортировки";
Запрос.УстановитьПараметр("КомплексныйПроцесс", ПараметрыПроцесса.СсылкаКомплексногоПроцесса);
КонецЕсли;
Запрос.УстановитьПараметр("ЗначениеНастройки", ПараметрыПроцесса.ЗначениеПараметра);
РезультатОписания = Запрос.Выполнить();
Если РезультатОписания.Пустой() Тогда
РезультатИсторияВыполненияПроцесса.ДополнитьИсториейПроцесса = Ложь;
Возврат РезультатИсторияВыполненияПроцесса;
КонецЕсли;
ТаблицаОписаний = РезультатОписания.Выгрузить();
РезультатИсторияВыполненияПроцесса.ДополнитьИсториейПроцесса = Истина;
РезультатИсторияВыполненияПроцесса.Вставить("ТаблицаОписаний", ТаблицаОписаний);
РезультатИсторияВыполненияПроцесса.Вставить("НаименованиеТекущегоПроцесса", ПараметрыПроцесса.НаименованиеТекущегоПроцесса);
Возврат РезультатИсторияВыполненияПроцесса;
КонецФункции
В заключение переопределим ПолучитьОбзорЗадачи модуля ОбзорЗадачВызовСервера использую ранее добавленную функцию ПолучитьИсториюВыполненияПроцесса для дополнения собранной истории выполнения по настройкам к одной задаче.
&ИзменениеИКонтроль("ПолучитьОбзорЗадачи")
Функция УОЗ_ПолучитьОбзорЗадачи(Знач Задача)
HTMLТекст = ОбзорЗадачВызовСервераПереопределяемый.ПолучитьОбзорЗадачи(Задача);
Если ЗначениеЗаполнено(HTMLТекст) Тогда
Возврат HTMLТекст;
КонецЕсли;
#Вставка
ПараметрыИсторияВыполненияПроцесса = ПолучитьИсториюВыполненияПроцесса(Задача.БизнесПроцесс);
#КонецВставки
// Формируем основное представление процесса
HTMLТекст = "<html>
|<head>
|<style type=""text/css"">
| body {
| overflow: auto;
| margin-top: 2px;
| margin-left: 2px;
| margin-right: 2px;
| font-family: Arial;
| font-size: 10pt;}
| table {
| width: 100%;
| font-family: Arial;
| font-size: 10pt;
| border: 0px solid;}
| td {vertical-align: top;}
| a:link {
| color: #006699; text-decoration: none;}
| a:visited {
| color: #006699; text-decoration: none;}
| a:hover {
| color: #006699; text-decoration: underline;}
| p {
| margin-top: 7px;}
| img {border: 0px;}
|</style>
|<body>";
СостояниеВыполненияЗадачи = РегистрыСведений.ЗадачиДляВыполнения.СостояниеВыполненияЗадачи(Задача.Ссылка);
// Состояние процесса и результат выполнения задачи
Если Задача.СостояниеБизнесПроцесса = Перечисления.СостоянияБизнесПроцессов.Прерван Тогда
ПричинаПрерывания = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(
Задача.Ссылка, "БизнесПроцесс.ПричинаПрерывания");
Если ПустаяСтрока(ПричинаПрерывания) Тогда
ПричинаПрерывания = НСтр("ru = 'Задача прервана'");
Иначе
ПричинаПрерывания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Задача прервана: %1'"),
ПричинаПрерывания);
КонецЕсли;
HTMLТекст = HTMLТекст + "<table bgcolor=#F0F0F0><tr>";
HTMLТекст = HTMLТекст + "<td width=20>";
ОбзорОбъектовКлиентСервер.ДобавитьКартинку(
HTMLТекст, БиблиотекаКартинок.ЗнакПрерванПроцесс, "ПоказатьПричинуПрерыванияПроцесса");
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "<td>";
HTMLТекст = HTMLТекст + СтрШаблон(
"<A href=ПоказатьПричинуПрерыванияПроцесса>%1</A>",
РаботаС_HTML.ЗаменитьСпецСимволыHTML(ПричинаПрерывания));
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "</tr></table>";
HTMLТекст = HTMLТекст + "<p>";
ИначеЕсли Задача.СостояниеБизнесПроцесса = Перечисления.СостоянияБизнесПроцессов.Остановлен Тогда
HTMLТекст = HTMLТекст + "<table bgcolor=#F0F0F0><tr>";
HTMLТекст = HTMLТекст + "<td width=20> ";
ОбзорОбъектовКлиентСервер.ДобавитьКартинку(HTMLТекст, БиблиотекаКартинок.ЗнакПауза);
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "<td>";
ОбзорОбъектовКлиентСервер.ДобавитьЗначение(HTMLТекст, НСтр("ru = 'Задача остановлена'"), "");
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "</tr></table>";
HTMLТекст = HTMLТекст + "<p>";
ИначеЕсли СостояниеВыполненияЗадачи.СостояниеВыполнения = Перечисления.СостоянияЗадачДляВыполнения.ВыполнениеОтменено Тогда
HTMLТекст = HTMLТекст + "<table bgcolor=#F0F0F0><tr>";
HTMLТекст = HTMLТекст + "<td width=20>";
ОбзорОбъектовКлиентСервер.ДобавитьКартинку(
HTMLТекст, БиблиотекаКартинок.Предупреждение, "ПоказатьПричинуОтменыВыполнения");
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "<td>";
ПричинаОтменыВыполненияHTML = "";
ОбзорОбъектовКлиентСервер.ДобавитьЗначение(
ПричинаОтменыВыполненияHTML,
СостояниеВыполненияЗадачи.ПричинаОтменыВыполнения,
"FF0000");
HTMLТекст = HTMLТекст + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"<A href=ПоказатьПричинуОтменыВыполнения>%1</A>", ПричинаОтменыВыполненияHTML);
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "</tr></table>";
HTMLТекст = HTMLТекст + "<p>";
ИначеЕсли СостояниеВыполненияЗадачи.СостояниеВыполнения = Перечисления.СостоянияЗадачДляВыполнения.ГотоваКВыполнению Тогда
HTMLТекст = HTMLТекст + "<table bgcolor=#F0F0F0><tr>";
HTMLТекст = HTMLТекст + "<td width=20> ";
ОбзорОбъектовКлиентСервер.ДобавитьКартинку(HTMLТекст, БиблиотекаКартинок.СтартБизнесПроцесса);
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "<td>";
ОбзорОбъектовКлиентСервер.ДобавитьЗначение(HTMLТекст,
НСтр("ru = 'Задача находится в очереди для выполнения. Выполнение задачи произойдет автоматически в ближайшее время.'"), "");
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "</tr></table>";
HTMLТекст = HTMLТекст + "<p>";
ИначеЕсли Задача.Выполнена Тогда
МетаданныеПроцесса = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Задача.БизнесПроцесс);
ПредставлениеРезультатаЗадачи = МетаданныеПроцесса.ПредставлениеРезультатаЗадачи(Задача);
РезультатВыполненияЗадачи = РегистрыСведений.
РезультатыВыполненияПроцессовИЗадач.РезультатВыполненияПоОбъекту(Задача.Ссылка);
Если РезультатВыполненияЗадачи =
Перечисления.ВариантыВыполненияПроцессовИЗадач.Положительно Тогда
Картинка = БиблиотекаКартинок.РезультатВыполненияПроцессовИЗадач_Положительный;
ЦветТекста = "#008000";
ИначеЕсли РезультатВыполненияЗадачи =
Перечисления.ВариантыВыполненияПроцессовИЗадач.Отрицательно Тогда
Картинка = БиблиотекаКартинок.РезультатВыполненияПроцессовИЗадач_Отрицательный;
ЦветТекста = "#B22222";
ИначеЕсли РезультатВыполненияЗадачи = Перечисления.
ВариантыВыполненияПроцессовИЗадач.ПоложительноСЗамечаниями Тогда
Картинка = БиблиотекаКартинок.РезультатВыполненияПроцессовИЗадач_ПоложительныйСЗамечаниями;
ЦветТекста = "#008000";
Иначе
Картинка = БиблиотекаКартинок.РезультатВыполненияПроцессовИЗадач;
ЦветТекста = "";
КонецЕсли;
HTMLТекст = HTMLТекст + "<table bgcolor=#F0F0F0><tr>";
HTMLТекст = HTMLТекст + "<td width=20>";
ОбзорОбъектовКлиентСервер.ДобавитьКартинку(HTMLТекст, Картинка);
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "<td>";
ОбзорОбъектовКлиентСервер.ДобавитьЗначение(HTMLТекст, ПредставлениеРезультатаЗадачи, ЦветТекста);
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "</tr></table>";
HTMLТекст = HTMLТекст + "<p>";
КонецЕсли;
HTMLТекст = HTMLТекст + "<table><tr>";
HTMLТекст = HTMLТекст + "<td>";
// Наименование
HTMLТекст = HTMLТекст + "<B>";
ОбзорОбъектовКлиентСервер.ДобавитьЗначение(HTMLТекст, Задача.Наименование, "");
HTMLТекст = HTMLТекст + "<br>";
HTMLТекст = HTMLТекст + "</B>";
ПредметДокумент = ПолучитьОсновнойПредметДокумент(Задача.Предметы);
Если ЗначениеЗаполнено(ПредметДокумент) Тогда
ОбзорПредмета = ПолучитьОбзорПредметаЗадачи(ПредметДокумент);
Если Не ПустаяСтрока(ОбзорПредмета) Тогда
HTMLТекст = HTMLТекст + "<p>" + ОбзорПредмета + "</p>";
КонецЕсли;
КонецЕсли;
// Описание
Если ЗначениеЗаполнено(Задача.Описание) Тогда
HTMLТекст = HTMLТекст + "<p>";
ОписаниеЗадачиHTML = "";
ОбзорОбъектовКлиентСервер.ДобавитьРеквизит(ОписаниеЗадачиHTML, "", Задача.Описание);
ОписаниеЗадачиHTML = СтрЗаменить(ОписаниеЗадачиHTML, Символы.Таб, " ");
ОписаниеЗадачиHTML = СтрЗаменить(ОписаниеЗадачиHTML, Символы.ПС, "<br>");
HTMLТекст = HTMLТекст + ОписаниеЗадачиHTML;
КонецЕсли;
// Важность
Если Задача.Важность = Перечисления.ВариантыВажностиЗадачи.Высокая Тогда
Важность = НСтр("ru = 'Высокая'");
ИначеЕсли Задача.Важность = Перечисления.ВариантыВажностиЗадачи.Обычная Тогда
Важность = НСтр("ru = 'Обычная'");
ИначеЕсли Задача.Важность = Перечисления.ВариантыВажностиЗадачи.Низкая Тогда
Важность = НСтр("ru = 'Низкая'");
КонецЕсли;
HTMLТекст = HTMLТекст + "<p>";
ОбзорОбъектовКлиентСервер.ДобавитьРеквизит(HTMLТекст, НСтр("ru = 'Важность: '"), Важность);
// Исполнитель
HTMLТекст = HTMLТекст + "<p>";
ОбзорОбъектовКлиентСервер.ДобавитьПодпись(HTMLТекст, НСтр("ru = 'Кому:'"));
ТекущийПользователь = ПользователиКлиентСервер.ТекущийПользователь();
ИсполнителиЗадачПользователя = БизнесПроцессыИЗадачиСервер.
ИсполнителиЗадачПользователя(ТекущийПользователь);
// Признак ролевой/делегированной задачи
ЗадачаДелегированаТекущемуПользователю =
РегистрыСведений.ИсполнителиРолейИДелегаты.ИсполнительЯвляетсяДелегатом(
Задача.ТекущийИсполнитель,
ТекущийПользователь,
"ПроцессыИЗадачи");
Если ЗадачаДелегированаТекущемуПользователю Тогда
ОбзорОбъектовКлиентСервер.ДобавитьКартинку(HTMLТекст, БиблиотекаКартинок.ДелегированнаяЗадача);
HTMLТекст = HTMLТекст + " ";
ИначеЕсли ТипЗнч(Задача.ТекущийИсполнитель) = Тип("СправочникСсылка.ПолныеРоли") Тогда
ОбзорОбъектовКлиентСервер.ДобавитьКартинку(HTMLТекст, БиблиотекаКартинок.РолеваяЗадача);
HTMLТекст = HTMLТекст + " ";
КонецЕсли;
Если НЕ Задача.Исполнитель.Пустая() Тогда
ОбзорОбъектовКлиентСервер.ДобавитьЗначение(HTMLТекст, Задача.Исполнитель, "");
Иначе
ИсполнительСтрокой = Строка(Задача.РольИсполнителя);
HTMLТекст = HTMLТекст + СтрШаблон(
"<A href=v8doc:%1>%2</A>",
ПолучитьНавигационнуюСсылку(Задача.РольИсполнителя),
РаботаС_HTML.ЗаменитьСпецСимволыHTML(Строка(ИсполнительСтрокой)));
КонецЕсли;
HTMLТекст = HTMLТекст + "<br>";
// Срок
Если ЗначениеЗаполнено(Задача.СрокИсполнения) Тогда
ОбзорОбъектовКлиентСервер.ДобавитьПодпись(HTMLТекст, НСтр("ru = 'Срок:'"));
ФормаДаты = ?(ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"),
"ДФ='dd.MM.yyyy HH:mm'", "ДФ='dd.MM.yyyy'");
Если ТипЗнч(Задача.БизнесПроцесс) <>
Тип("БизнесПроцессСсылка.РешениеВопросовВыполненияЗадач")
И Не Задача.Выполнена
И ПолучитьФункциональнуюОпцию("ВестиУчетПереносовСроковЗадач") Тогда
HTMLТекст = HTMLТекст + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"<A href=%1> %2</A>",
"ИзменитьСрокВыполнения",
Формат(Задача.СрокИсполнения, ФормаДаты));
Иначе
HTMLТекст = HTMLТекст + " " + Формат(Задача.СрокИсполнения, ФормаДаты);
КонецЕсли;
HTMLТекст = HTMLТекст + "<br>";
КонецЕсли;
// Автор
ОбзорОбъектовКлиентСервер.ДобавитьРеквизит(HTMLТекст, НСтр("ru = 'Автор:'"), Задача.Автор);
// Контроль
Если ПолучитьФункциональнуюОпцию("ИспользоватьКонтрольОбъектов") Тогда
Контролеры = РаботаСБизнесПроцессамиВызовСервера.КонтролерыЗадачи(Задача, Не Задача.Выполнена);
КонтролерыСтрокой = СтрСоединить(Контролеры, ", ");
Если Задача.Выполнена Тогда
ПодписьКонтролера = НСтр("ru = 'Контролеры: '");
Иначе
КоличествоКонтролеров = Контролеры.Количество();
Если КоличествоКонтролеров = 1 Тогда
ПодписьКонтролера = НСтр("ru = 'Контролирует: '");
ИначеЕсли КоличествоКонтролеров > 1 Тогда
ПодписьКонтролера = НСтр("ru = 'Контролируют: '");
КонецЕсли;
КонецЕсли;
ОбзорОбъектовКлиентСервер.ДобавитьПодпись(HTMLТекст, ПодписьКонтролера);
HTMLТекст = HTMLТекст + СтрШаблон(
"<A href=ОткрытьКарточкуКонтроля>%1</A>",
РаботаС_HTML.ЗаменитьСпецСимволыHTML(КонтролерыСтрокой));
HTMLТекст = HTMLТекст + "<br>";
КонецЕсли;
// История выполнения
ИсторияВыполнения = РегистрыСведений.ИсторияВыполненияЗадач.ИсторияПоБизнесПроцессу(
Задача.БизнесПроцесс);
Если ЗначениеЗаполнено(ИсторияВыполнения) Тогда
HTMLТекст = HTMLТекст + "<p>";
HTMLТекст = HTMLТекст + "<B>";
ОбзорОбъектовКлиентСервер.ДобавитьПодпись(HTMLТекст, НСТР("ru = 'История выполнения:'"));
HTMLТекст = HTMLТекст + "</B>";
HTMLТекст = HTMLТекст + "<br>";
#Вставка
Если ПараметрыИсторияВыполненияПроцесса.ДополнитьИсториейПроцесса Тогда
HTMLТекст = HTMLТекст + "<p>";
HTMLТекст = HTMLТекст + "<B>";
ОбзорОбъектовКлиентСервер.ДобавитьПодпись(HTMLТекст, ПараметрыИсторияВыполненияПроцесса.НаименованиеТекущегоПроцесса);
HTMLТекст = HTMLТекст + "</B>";
HTMLТекст = HTMLТекст + "<br>";
КонецЕсли;
#КонецВставки
ИсторияВыполненияHTML = "";
ОбзорОбъектовКлиентСервер.ДобавитьРеквизит(ИсторияВыполненияHTML, "", ИсторияВыполнения);
ИсторияВыполненияHTML = СтрЗаменить(ИсторияВыполненияHTML, Символы.Таб, " ");
ИсторияВыполненияHTML = СтрЗаменить(ИсторияВыполненияHTML, Символы.ПС, "<br>");
HTMLТекст = HTMLТекст + ИсторияВыполненияHTML;
КонецЕсли;
#Вставка
Если ПараметрыИсторияВыполненияПроцесса.ДополнитьИсториейПроцесса Тогда
Если Не ЗначениеЗаполнено(ИсторияВыполнения) Тогда
HTMLТекст = HTMLТекст + "<p>";
HTMLТекст = HTMLТекст + "<B>";
ОбзорОбъектовКлиентСервер.ДобавитьПодпись(HTMLТекст, НСТР("ru = 'История выполнения:'"));
HTMLТекст = HTMLТекст + "</B>";
HTMLТекст = HTMLТекст + "<br>";
КонецЕсли;
Для Каждого Стр Из ПараметрыИсторияВыполненияПроцесса.ТаблицаОписаний Цикл
HTMLТекст = HTMLТекст + "<br>";
HTMLТекст = HTMLТекст + "<B>";
ОбзорОбъектовКлиентСервер.ДобавитьПодпись(HTMLТекст, Стр.НаименованиеПроцесса);
HTMLТекст = HTMLТекст + "</B>";
HTMLТекст = HTMLТекст + "<br>";
ИсторияСогласованияHTML = "";
ОбзорОбъектовКлиентСервер.ДобавитьРеквизит(ИсторияСогласованияHTML, "", Стр.Описание);
ИсторияСогласованияHTML = СтрЗаменить(ИсторияСогласованияHTML, Символы.Таб, " ");
ИсторияСогласованияHTML = СтрЗаменить(ИсторияСогласованияHTML, Символы.ПС, "<br>");
HTMLТекст = HTMLТекст + ИсторияСогласованияHTML;
КонецЦикла;
КонецЕсли;
#КонецВставки
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "</tr></table>";
HTMLТекст = HTMLТекст + "</body></html>";
Возврат HTMLТекст;
КонецФункции
Тестирование проводилось на платформе 8.3.21.1302 конфигурации Документооборот 8 КОРП, редакция 2.1 (2.1.29.18).